离散信号时域平移的频域处理matlab仿真问题???
把前面tommy321 的问题引申了一下利用DFT的时移特性。将信号x变换到频域的X,
X乘以一指数函数反变换到时域的x。
x<--->X
x<--> Xexp(-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();
subplot(2,1,2)
plot(x_delay);
axis();
问题:
1、为何时移因子n_shift为偶数时,时移正确。
例如n_shift=2时,x_delay=x
时移因子n_shift为奇数时,时移错误。
例如n_shift=3时,x_delay /= x
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)为复数。是有限字长效应吗
回复 楼主 attentionq 的帖子
知道原因了,代码写的有问题 楼主,能不能把问题处理后的代码传上来,让我大家都学习一下? 嗯...回复 地板 小天775 的帖子
不要都是"嗯..."说说想法/看法吧 X_fft_1 = X_fft.*exp(-j*2*pi*n*df*n_shift);
这里改为
X_fft_1 = X_fft.*exp(-j*2*pi/N*n*n_shift);
即可
页:
[1]