信号相移
Phase shift in a signal
这就是我写代码的方式
fc = 10;
td = 5000;
fs = 3*fc;
ts = 1/fs;
t = 0:ts:1-ts;
a = cos(2*pi*fc*t);
figure, plot(a);
Y = fftshift(fft(a));
nfft = length(Y);
p = 0:fs/nfft:1-fs/nfft;
p1 = Y.*exp(-1i*2*pi*p*td);
p2 = ifft(ifftshift(p1));
figure, plot(abs(p2));
这是我得到的结果。然而,具有相移的信号与没有相移的信号相同。
如果你想添加相移,你只需要做:
a = cos(2*pi*fc*t + S);
其中 S 是位移(以弧度为单位)。
此外,如果您仍想绘制 ifft(p1)
,则不应使用 abs(p2)
,而应使用 real(p2)
。
希望对您有所帮助
乘以exp(-1i*2*pi*p*td)
可以在FT域中增加一个延迟,没错
但是fft
默认不居中(使用fftshift
),DC在索引1处。所以p
不对,试试p = 0:fs/nfft:1-fs/nfft;
相反。
编辑: 似乎不完全清楚。如果您使用 p = 0:fs/nfft:1-fs/nfft;
,请不要使用 fftshift
。如果要使用fftshift
,p必须是-1/2+fs/nfft:fs/nfft:1/2
.
这就是我写代码的方式
fc = 10;
td = 5000;
fs = 3*fc;
ts = 1/fs;
t = 0:ts:1-ts;
a = cos(2*pi*fc*t);
figure, plot(a);
Y = fftshift(fft(a));
nfft = length(Y);
p = 0:fs/nfft:1-fs/nfft;
p1 = Y.*exp(-1i*2*pi*p*td);
p2 = ifft(ifftshift(p1));
figure, plot(abs(p2));
这是我得到的结果。然而,具有相移的信号与没有相移的信号相同。
如果你想添加相移,你只需要做:
a = cos(2*pi*fc*t + S);
其中 S 是位移(以弧度为单位)。
此外,如果您仍想绘制 ifft(p1)
,则不应使用 abs(p2)
,而应使用 real(p2)
。
希望对您有所帮助
乘以exp(-1i*2*pi*p*td)
可以在FT域中增加一个延迟,没错
但是fft
默认不居中(使用fftshift
),DC在索引1处。所以p
不对,试试p = 0:fs/nfft:1-fs/nfft;
相反。
编辑: 似乎不完全清楚。如果您使用 p = 0:fs/nfft:1-fs/nfft;
,请不要使用 fftshift
。如果要使用fftshift
,p必须是-1/2+fs/nfft:fs/nfft:1/2
.