声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 19641|回复: 14

[综合讨论] 已知频域值,如何用matlab的IFFT函数求时域图

[复制链接]
发表于 2012-12-9 10:57 | 显示全部楼层 |阅读模式

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

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

x
在频域计算式中的得到一组1MHz:1MHz:1024MHz的频域数据,想将其转换到时域,我看论坛上的IFFT变换的步骤是:1先用对称性质构建负频率部分的值;2确定0Hz时的频域值;3最后对全频域(正频域+负频域)做IFFT变换。负频率部分值可以求,我想问的是 0Hz时的频域值怎么给定,IFFT后要不要乘以什么系数?求解答,谢谢!

本帖被以下淘专辑推荐:

回复
分享到:

使用道具 举报

发表于 2012-12-9 11:58 | 显示全部楼层
单是只有频域的幅值信息是重构不了时域信号的,还需要相位信息,否则反变换回去的解不是唯一的。
傅里叶变换本来就是复变换得到的是a+bi形式的含有相位信息的复数,这样才能完成逆变换,得到唯一的时域解。

评分

1

查看全部评分

 楼主| 发表于 2012-12-9 17:13 | 显示全部楼层

我得到的这1024个数据是复数形式的啊,这应该算是有相位信息的吧?
发表于 2012-12-11 10:18 | 显示全部楼层
咯咯 发表于 2012-12-9 17:13
我得到的这1024个数据是复数形式的啊,这应该算是有相位信息的吧?

1. 0频率指的是信号的直流量
2. 你的1024复数结果是否是频域信息需要你自己判断
3. 频域信息直接ifft就可以重构数据,你可以找一组信号进行fft处理,然后再ifft就知道了

评分

1

查看全部评分

 楼主| 发表于 2012-12-11 18:53 | 显示全部楼层
happy 发表于 2012-12-11 10:18
1. 0频率指的是信号的直流量
2. 你的1024复数结果是否是频域信息需要你自己判断
3. 频域信息直接ifft就 ...

谢谢你的回答!1.我得到的频域值没有0Hz时的直流量,这个0Hz时的频域值在IFFT是否是必须的,如果是必须的,应该怎么填补;2我得到的这1024个复数结果是在频域里得到的,因此是频域信息的
请问 有没有对频谱响应做快速傅里叶逆变换得到时域结果的 例子或者资料?谢谢!
发表于 2012-12-11 20:44 | 显示全部楼层
  1. fs=100;%设定采样频率
  2. N=128;
  3. n=0:N-1;
  4. t=n/fs;
  5. x=sin(2*pi*t);
  6. figure(1);
  7. subplot(311);
  8. plot(t,x);
  9. %进行FFT变换并做频谱图
  10. y=fft(x,N)/N;%进行fft变换
  11. mag=abs(y);%求幅值
  12. f=(0:N-1)'*100/N;%进行对应的频率转换
  13. subplot(312);
  14. plot(f,mag);%做频谱图
  15. %用IFFT恢复原始信号
  16. xifft=ifft(y)*N;
  17. magx=real(xifft);
  18. subplot(313);
  19. plot(t,magx);
复制代码
从原函数经过fft再ifft,后还原

评分

1

查看全部评分

发表于 2012-12-11 20:45 | 显示全部楼层
咯咯 发表于 2012-12-11 18:53
谢谢你的回答!1.我得到的频域值没有0Hz时的直流量,这个0Hz时的频域值在IFFT是否是必须的,如果是必须的 ...

lz是做滤波么,0hz上的直流分量是要被滤掉的啊
 楼主| 发表于 2012-12-11 21:52 | 显示全部楼层
321forever 发表于 2012-12-11 20:45
lz是做滤波么,0hz上的直流分量是要被滤掉的啊

谢谢!我不是在做滤波,在做导线间的串扰。我是按照这么做的,但是变换后的时域波形就是不对。我在频域计算得到的只有正频率部分的响应,我看论坛上说要反变换到时域还需知道负频率部分和0Hz部分的值,不能直接对正频域部分的复数列用IFFT啊。明天 我上传频域波形和按照你说的那种方法反变换出来的波形给你看下,感觉就是不对。谢谢!

点评

0 Hz和右半边 都置0  发表于 2012-12-12 03:09
发表于 2012-12-12 03:09 | 显示全部楼层
咯咯 发表于 2012-12-11 21:52
谢谢!我不是在做滤波,在做导线间的串扰。我是按照这么做的,但是变换后的时域波形就是不对。我在频域计 ...

我倒是不理解负频率的概念, 不知道是不是就是与真是频率相对称的右半边呢,如果是的话,不能只取频率的左半边,例如,经过fft得到一个1*1000 的数列,不能只用1*500来做fft,要把右半边置0,就是只让左半边有数
发表于 2012-12-12 09:54 | 显示全部楼层
321forever 发表于 2012-12-12 03:09
我倒是不理解负频率的概念, 不知道是不是就是与真是频率相对称的右半边呢,如果是的话,不能只取频率的左 ...

负频率的出现纯是数学运算的结果,没有实际的物理意义
可以利用共轭对称的特性构造负频率信息
 楼主| 发表于 2012-12-12 21:01 | 显示全部楼层
本帖最后由 咯咯 于 2012-12-12 21:05 编辑
321forever 发表于 2012-12-12 03:09
我倒是不理解负频率的概念, 不知道是不是就是与真是频率相对称的右半边呢,如果是的话,不能只取频率的左 ...


反变换得到的响应波形

反变换得到的响应波形

激励的时域波形

激励的时域波形

激励的频域波形

激励的频域波形

你好!我先用matlab里的FFT来产生激励波形,然后将激励波形的频域值存到表里,供频域计算时调用,最后将计算得到的频域值,用IFFT反变换到时域。IFFT反变换的复数列是[0 正频率的响应 负频率的响应] 其中负频率响应是根据对称性质对正频率值求得共轭。但是从反变换得到的图形上看,为什么刚开始激励波形为0时,反变换得到的会有响应呢?(反变换得到的时域波形刚开始并不为0)。我单纯用0作为激励源时,频域值都为0。不知道哪里错了,频域响应值应该不会错了,应该是反变换时出的错。我看了很多帖子,也没找到方法。谢谢!

点评

lz能解释下这3幅图都是什么后的结果么,能给出原来的图形,fft后的图形,ifft还原的图形么,还有能不能传上来做fft和ifft的程序  发表于 2012-12-13 04:10
 楼主| 发表于 2012-12-12 21:02 | 显示全部楼层
happy 发表于 2012-12-12 09:54
负频率的出现纯是数学运算的结果,没有实际的物理意义
可以利用共轭对称的特性构造负频率信息

你好!你能帮我看下吗?我这个反变换时怎么回事?谢谢!
发表于 2012-12-13 04:06 | 显示全部楼层
happy 发表于 2012-12-12 09:54
负频率的出现纯是数学运算的结果,没有实际的物理意义
可以利用共轭对称的特性构造负频率信息

那负频率是fft后,图形中得到的与原频率(左半部)对称的右半部分么?
 楼主| 发表于 2012-12-13 10:19 | 显示全部楼层
本帖最后由 咯咯 于 2012-12-13 10:22 编辑
321forever 发表于 2012-12-13 04:06
那负频率是fft后,图形中得到的与原频率(左半部)对称的右半部分么?


第一幅图就是计算得到频域响应后经过ifft反变换到时域的波形,第二幅图是所加激励源的时域波形,第三幅图是激励源的频域波形。
这是激励波形的时域和频域的产生
  1. N=4096; %%采样点数
  2. Fs=4096000000; %%采样频率
  3. k1=1;k2=1;
  4. for t=0:1/Fs:1e-6;
  5. if t<=1*1e-7
  6.     %S_y1(k1)=1e6*10/5*t;
  7.     S_y1(k1)=0;
  8.     %S_y1(k1)=sin(2*pi*10000*t);
  9.     k1=k1+1;
  10. end
  11. if t>1e-7&&t<=2.5*1e-7
  12.     %S_y2(k2)=10-1e6/(2-0.5)*(t-5*1e-6);
  13.     S_y2(k2)=1e7*1/(2.5-1)*(t-1e-7);
  14.     k2=k2+1;
  15.    % S_y2(k2)=sin(2*pi*10000*t);
  16. end
  17. if t>2.5*1e-7
  18.     S_y2(k2)=1;
  19.     k2=k2+1;
  20. end
  21. end
  22. S_y=[S_y1,S_y2]; %%%激励的时域波形

  23. figure(6)
  24. plot(0:1/Fs:1e-6,S_y);hold on;%%%画出时域波形
  25. figure(7)
  26. F_y=fft(S_y,N);%%对时域波形做FFT变换
  27. A_F_y=abs(F_y)/(N/2);
  28. A_F_y(1)=A_F_y(1)/2;
  29. f=([1:N]-1)*Fs/N;
  30. plot(f(1:N/2),A_F_y(1:N/2));%%%做出激励波形的频域图
  31. %plot(f(1:N),A_F_y(1:N));
  32. %plot(A_F_y);
  33. %figure(4)
  34. %I_F_y=1/N*conj((fft(conj(F_y))));
  35. %plot((f.*1/Fs)*N/Fs,ifft(F_y));
  36. %figure(5)
  37. %plot((f.*1/Fs)*N/Fs,real(I_F_y));
  38. for kk=1:1:(N/2)
  39.     V_s(kk)=F_y(kk+1)/2;%%%将激励波形的频域值存到V_s中,供后面的频域计算时调用(1MHz:1Mhz:1024MHz的频域值)
  40. end
复制代码
下面是对频域计算后得到的频域值进行IFFT变换
f_final=2048000000;%%%频率的最大值
f_initial=1000000; %%%初始计算的频率
fs=1000000; %%%采样频率
f=f_initial:fs:f_final
f_i(k_i)=log10(f);%%%对频率计数
f_P(k_i)=f;
w=2*pi*f;
[Z_r,zp]=cable_R(f);%其中Z_r为铜芯的内阻抗矩阵,zp为屏蔽壳的内阻抗
Z_P=zp*ones(n-1);
Z_Z=Z_r+1i*w*L+Z_P;
Y_Y=1i*w*C;%%%忽略电导G

%%%%%%%%%%%%%%%%%%%%%%%%
%【5】对ZY矩阵的对角化及模态特性阻抗Zc
[Tv C_v1]=eig(Z_Z*Y_Y);%求出来的Tv矩阵为特征向量组成的矩阵,其中第n列向量为C_v矩阵中第n个对角元的特征向量
r_v1=sqrt(C_v1);%%传播常数
[Ti C_v2]=eig(Y_Y*Z_Z);
r_v2=sqrt(C_v2);%%传播常数
%模态特性阻抗Zc
Zc=(Z_Z*Ti/r_v2)/Ti;
%%%%%%%%%%%%%%%%%%%%%%%%%%
%【6】加激励源
   Vs(1)=V_s(vs1);%%激励波形的频域值调用(1MHz:1MHz:1024MHz)
      vs1=vs1+1;
%%%%%%%%%%%%%%%
%【7】利用边界求解方程组I+和I-
Q11=(Zc+Zs)*Ti;
Q12=(Zc-Zs)*Ti;
for k=1:1:n-1
    E_r_v2(k,k)=exp(r_v2(k,k)*LL);%%%正向传播
    E_r_v1(k,k)=exp((-1)*r_v2(k,k)*LL);%%负向传播
end
Q21=(Zc-ZL)*Ti*E_r_v1;
Q22=(Zc+ZL)*Ti*E_r_v2;
Q(1:(n-1),1:(n-1))=Q11;
Q(n:2*(n-1),n:2*(n-1))=Q22;
Q(1:(n-1),n:2*(n-1))=Q12;
Q(n:2*(n-1),1:(n-1))=Q21;
E_S(1:(n-1))=Vs;E_S(n:2*(n-1))=VL;%%激励源
%%求解Im+和Im-
Im=inv(Q)*E_S;
%%%【8】求解z=L处37芯的响应
for k=1:1:2*(n-1)
    if k<n
        Im_P(k)=Im(k);
    else
        Im_N(k-n+1)=Im(k);
    end
end
V_response=Zc*Ti*(E_r_v1*Im_P+E_r_v2*Im_N);

%%%【8.1】建立37芯的终端响应矩阵

for k=1:1:(n-1)
    V_res{k}(k_i)=V_response(k);
end
k_i=k_i+1;
end
figure(1)
plot(f_i,log10(abs(V_res{1})));hold on; %%计算得到的频域响应
grid on;
%%%【9.1】对上述铜芯的频域响应转换为时域响应
V_res1_real=real(V_res{1});%%1号铜芯的实部
V_res1_imag=imag(V_res{1});%%1号铜芯的虚部
V_res1_N=conj(V_res{1});%%1号铜芯的负频率部分
while k_i>1
    k_i=k_i-1;
    V_res1_NC(k_j)=V_res1_N(k_i);%%V_res1_NC为重排后的负频率部分
f_N(k_j)=-f_P(k_i);%%频率负的部分重排
    k_j=k_j+1;
   
end
U_res_1=[0,V_res{1},V_res1_NC];%%%用频域计算得到的频域响应值
t1=([1:f_final/f_initial])*1/f_final;
figure(2)
plot(t1,real(ifft(U_res_1,2048)),'r');hold on;%%%频域值的IFFT反变换
发表于 2014-7-9 11:01 | 显示全部楼层
学习!!!!!!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-9 02:54 , Processed in 0.083881 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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