wd963852 发表于 2009-1-5 13:17

请教IFFT和FFT的一点问题

各位高手请指点一下我这个程序,我想求gr的IFFT-   y_t 然后求target的IFFT--z_t将x_t=z_t./y_t;进行FFT变换 。在变换的过程中,特别是gr和target的IFFT时负时域的信号看不到。最后求x_t时z_t和y_t的时间轴不会对应相除。请各位高手指点。:@)
fm=40;
fs=2*fm;
deltaf=1;
deltav=(-fs):deltaf:fs;
gr=1./(1+((deltav-13.2)/3.3).^2);
subplot(2,2,1);
figure(1);
plot(deltav,gr);
y_t=ifft(gr);
yt=real(y_t);
t=(0:length(y_t)-1)/fs;
subplot(2,2,2);
plot(t,yt);
subplot(2,2,3)
fs1=(-fs):fs;
target=rectpuls(fs1,80)
target=target(1:161);
plot(fs1(1:161),target);
z_t=ifft(target);
zt=real(z_t);
t=(0:length(z_t)-1)/fs;
subplot(2,2,4)
plot(t,zt);
figure(2);
x_t=z_t./y_t;
figure(2)
subplot(2,2,3);
plot(x_t);
p_f=fft(x_t);
f=(0:length(p_f)-1)*fs/length(p_f);
subplot(2,2,4);
pf=real(p_f);
plot(f,pf);

wd963852 发表于 2009-1-5 20:56

没有回复的吗   自己顶一下呵呵
请各位高手不吝赐教

wd963852 发表于 2009-1-6 18:10

请大家多多指点。:@( :@( :@( :@( :@(

wd963852 发表于 2009-1-8 20:42

怎么没有指教的呢各位帮帮忙吧比较急:handshake

songzy41 发表于 2009-1-9 11:34

没有明白楼主信号之间的关系。gr和target这两个信号的频谱之间是什么关系,哪一个是输入信号的频谱、哪一个是输出信号的频谱或系统的响应?

wd963852 发表于 2009-1-9 12:43

回复 5楼 songzy41 的帖子

gr是系统函数频域函数,y_t是gr的ifft时域表达,target是系统输出频率函数,z_t是系统的输出的时域表达,我现在要求p_f=fft(ifft(target)/ifft(gr)),即x_t=z_t./y_t的傅里叶变换。
y_t=ifft(gr)   z_t=ifft(target);请宋兄帮我看看我的程序。我现在输出的y_t和z_t时间域的信号都没有负时间轴的好像都把负时间轴的信号对应到了正时间轴后半部分了。

wd963852 发表于 2009-1-9 12:54

回复 5楼 songzy41 的帖子

:handshake
呵呵,谢谢

songzy41 发表于 2009-1-9 16:09

哪么楼主x_t代表什么物理意义,系统输入?

wd963852 发表于 2009-1-9 16:24

回复 8楼 songzy41 的帖子

p_f是输入信号,x_t是p_f的时域信号。 x_t点乘y_t=z_t ----------------p_f卷积gr=target.   现在是已知target和gr求p_f。我这个系统中是 gr(频域)和 p_f分别是系统传递函数和系统输入,target是系统输出。

songzy41 发表于 2009-1-9 19:57

本帖最后由 wdhd 于 2016-9-13 14:23 编辑

原帖由 wd963852 于 2009-1-9 16:24 发表

gr是系统函数频域函数,y_t是gr的ifft时域表达,target是系统输出频率函数,z_t是系统的输出的时域表达,我现在要求p_f=fft(ifft(target)/ifft(gr)),即x_t=z_t./y_t的傅里叶变换。
y_t=ifft(gr)   z_t=ifft(target);请宋兄帮我看看我的程序。我现在输出的y_t和z_t时间域的信号都没有负时间轴的好像都把负时间轴的信号对应到了正时间轴后半部分了。

p_f是输入信号,x_t是p_f的时域信号。 x_t点乘y_t=z_t ----------------p_f卷积gr=target.   现在是已知target和gr求p_f。我这个系统中是 gr(频域)和 p_f分别是系统传递函数和系统输入,target是系统输出。
按楼主在6楼和9楼的描述,输入、输出和系统的变量为:
在时域上
输入信号:x_t
系统函数:y_t
系统的输出:z_t
而在频域上:
输入信号频谱:p_f
系统函数频谱:gr
系统的输出频谱:target
那末系统的输出应该是: z_t=x_t*y_t (*表示为卷积)?和楼主要求的似乎不同(x_t点乘y_t=z_t )?

wd963852 发表于 2009-1-10 10:45

回复 10楼 songzy41 的帖子

不太对   现在是频域的信号满足卷积的条件即:p_f*gr=target;要求p_f ,我想用FFT的相关性质p_f=fft(ifft(target)/ifft(gr)),即 p_f=fft(x_t)=fft(z_t./y_t)求出P_f来   我前面描述的可能不太清楚 本来想画个框图的 好像是画不上去 呵呵

songzy41 发表于 2009-1-10 11:45

原帖由 wd963852 于 2009-1-10 10:45 发表 http://www.chinavib.com/forum/images/common/back.gif
不太对   现在是频域的信号满足卷积的条件即:p_f*gr=target;要求p_f ,我想用FFT的相关性质p_f=fft(ifft(target)/ifft(gr)),即 p_f=fft(x_t)=fft(z_t./y_t)求出P_f来   我前面描述的可能不太清楚 本来想画个框图的 ...
楼主在1楼的程序中,有几个错误,
1,gr和target从图上看出频率是从负值排到正值的,但在IFFT之前一定要把频率安排成从0~fs/2,然后再是负频率,即gr和target都要做fftshift后再进行IFFT变换。
2,gr在IFFT后y_t有些数值很小,有些数值还是由于计算误差造成的,它在分母上很容易引起更大的运算误差。
为此,我在程序中对z_t加了一个窗函数(如同FIR滤波器设计时窗函数法),这样就能尽量避免计算中引起更大的运算误差。程序如下:
fm=40;
fs=2*fm;
deltaf=1;
deltav=(-fs):deltaf:fs;
fs1=deltav;
gr=1./(1+((deltav-13.2)/3.3).^2);
L=length(fs1);
gr1=fftshift(gr);
fs2=0:deltaf:fs*2;
subplot(2,2,1);
plot(fs2,gr1,'r'); axis tight; grid;
title('gr1');
yy_t=ifft(gr1);
yytr=real(yy_t);
yyti=imag(yy_t);
t1=(0: L-1)/fs;
subplot(2,2,2);
plot(t1,yytr,'r',t1,yyti,'b'); axis tight; grid;
legend('real','imag');
title('yyt');

target=rectpuls(fs1,80);
target1=fftshift(target);
z_t=ifft(target1);
subplot(2,2,3);
plot(fs2,target1,'r'); axis tight; grid;
title('target1');
ztr=real(z_t);
zti=imag(z_t);
subplot(2,2,4)
plot(t1,ztr,'r',t1,zti,'b'); axis tight; grid;
legend('real','imag');
title('z_t');
figure(2);
win=hamming(41)';
zz_t=ztr;
yzt=zeros(1,L);
yzt(1:21)=zz_t(1:21).*win(21:41);
yzt(L-19:L)=zz_t(L-19:L).*win(1:20);
subplot(2,2,1);
plot(t1,yzt);axis tight; grid;
title('yzt');

x_t=zeros(1,L);
for k=1 : L
   if yzt(k)~=0
       x_t(k)=yzt(k)/yy_t(k);
   end
end
xtr=real(x_t);
xti=imag(x_t);
subplot(2,2,2);
plot(t1,xtr,'r',t1,xti,'b');axis tight; grid;
legend('real','imag');
title('x_t');
p_f=fft(x_t);
p_f1=fftshift(p_f);
subplot(2,1,2); plot(fs1,abs(p_f1));
axis tight; grid;
title('p_f1');

wd963852 发表于 2009-1-10 13:55

回复 12楼 songzy41 的帖子

宋兄, 佩服啊。
有种茅塞顿开的感觉 呵呵 多谢指点。:handshake
“在IFFT之前一定要把频率安排成从0~fs/2” 以前这个不知道 呵呵

wd963852 发表于 2009-1-11 10:34

回复 12楼 songzy41 的帖子

求gr1的傅里叶逆变换以后的yyt只能显示正时间轴吗不能显示出负时间轴的吗?是不是变换以后负时间轴的对应于fs/2也折合到了正时间轴(即:也是先画了正时间轴又画了负时间轴的啊)?

songzy41 发表于 2009-1-11 15:41

gr1傅里叶逆变换后得的yyt,在显示中时间轴是一个相对的数值,如果楼主想显示负时间的数值,可以设
L2=fix(L/2);
t1=(-L2:L2)/fs;
页: [1] 2
查看完整版本: 请教IFFT和FFT的一点问题