|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
把前面tommy321 的问题引申了一下
利用DFT的时移特性。将信号x[n]变换到频域的X[k],
X[k]乘以一指数函数反变换到时域的x[n-n0]。
x[n] <---> X[k]
x[n-n0] <--> X[k]exp(-j2*pi*n*fs/N*n0)
matlab程序如下:
clc;
clear;
close all;
fs = 1000;
N = 256;
df = fs/N;
n = 0:N-1;
n_shift = 11; %时移因子
f0 = 100;
f1 = 120;
x = sin(2*pi*f0*n/fs)+sin(2*pi*f1*n/fs);
X_fft = fft(x,N);
X_fft_1 = X_fft.*exp(-j*2*pi*n*df*n_shift);
x_delay=real(ifft(X_fft_1,256));
figure(1)
subplot(2,1,1)
plot(x);
axis([0 100 -2 2]);
subplot(2,1,2)
plot(x_delay);
axis([0 100 -2 2]);
问题:
1、为何时移因子n_shift为偶数时,时移正确。
例如n_shift=2时,x_delay[n]=x[n-2]
时移因子n_shift为奇数时,时移错误。
例如n_shift=3时,x_delay[n] /= x[n-3]
2、程序中
X_fft = fft(x,N);
X_fft_1 = X_fft.*exp(-j*2*pi*n*df*n_shift);
x_delay=real(ifft(X_fft_1,256));
用到了real函数,
想搞清楚到底是什么原因造成了ifft(X_fft_1,256)为复数。是有限字长效应吗 |
|