声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3816|回复: 16

[FFT] 请教IFFT和FFT的一点问题

[复制链接]
发表于 2009-1-5 13:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
各位高手请指点一下我这个程序,我想求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);
回复
分享到:

使用道具 举报

 楼主| 发表于 2009-1-5 20:56 | 显示全部楼层
没有回复的吗   自己顶一下  呵呵
请各位高手不吝赐教
 楼主| 发表于 2009-1-6 18:10 | 显示全部楼层
请大家多多指点。:@( :@( :@( :@( :@(
 楼主| 发表于 2009-1-8 20:42 | 显示全部楼层
怎么没有指教的呢  各位帮帮忙吧  比较急:handshake
发表于 2009-1-9 11:34 | 显示全部楼层
没有明白楼主信号之间的关系。gr和target这两个信号的频谱之间是什么关系,哪一个是输入信号的频谱、哪一个是输出信号的频谱或系统的响应?
 楼主| 发表于 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时间域的信号都没有负时间轴的  好像都把负时间轴的信号对应到了正时间轴后半部分了。
 楼主| 发表于 2009-1-9 12:54 | 显示全部楼层

回复 5楼 songzy41 的帖子

:handshake
呵呵,谢谢
发表于 2009-1-9 16:09 | 显示全部楼层
哪么楼主x_t代表什么物理意义,系统输入?
 楼主| 发表于 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是系统输出。
发表于 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 )?
 楼主| 发表于 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来   我前面描述的可能不太清楚 本来想画个框图的 好像是画不上去 呵呵
发表于 2009-1-10 11:45 | 显示全部楼层
原帖由 wd963852 于 2009-1-10 10:45 发表
不太对   现在是频域的信号满足卷积的条件即: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');
 楼主| 发表于 2009-1-10 13:55 | 显示全部楼层

回复 12楼 songzy41 的帖子

宋兄, 佩服啊。
有种茅塞顿开的感觉 呵呵 多谢指点。:handshake
“在IFFT之前一定要把频率安排成从0~fs/2” 以前这个不知道 呵呵
 楼主| 发表于 2009-1-11 10:34 | 显示全部楼层

回复 12楼 songzy41 的帖子

求gr1的傅里叶逆变换以后的yyt只能显示正时间轴吗  不能显示出负时间轴的吗?  是不是变换以后负时间轴的对应于fs/2也折合到了正时间轴(即:也是先画了正时间轴又画了负时间轴的啊)?
发表于 2009-1-11 15:41 | 显示全部楼层
gr1傅里叶逆变换后得的yyt,在显示中时间轴是一个相对的数值,如果楼主想显示负时间的数值,可以设
L2=fix(L/2);
t1=(-L2:L2)/fs;
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-17 03:47 , Processed in 0.061573 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表