attentionq 发表于 2010-3-20 19:04

离散信号时域平移的频域处理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 发表于 2010-4-2 17:56

回复 楼主 attentionq 的帖子

知道原因了,代码写的有问题

gzslbs2003 发表于 2010-4-2 23:42

楼主,能不能把问题处理后的代码传上来,让我大家都学习一下?

小天775 发表于 2010-4-4 07:19

嗯...

ChaChing 发表于 2010-4-4 13:50

回复 地板 小天775 的帖子

不要都是"嗯..."
说说想法/看法吧

attentionq 发表于 2010-4-6 17:17

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]
查看完整版本: 离散信号时域平移的频域处理matlab仿真问题???