声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1930|回复: 6

[FFT] FFT变换的结果与论文差异很大,峰值无法分开,求教

[复制链接]
发表于 2018-1-6 12:30 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 Ja要认真做科研 于 2018-1-6 12:32 编辑

      信号处理新人,请教各位~

      我想求一个加速度信号的频谱,用的FFT,发现分析结果和论文差异很大,论文的峰非常明显(下面有图),而且最高的两个峰之间是分开的(2和3号峰),而我做的最高的两个峰是合在一起的,如同一个三角形(下面有图)。我和论文的坐标横轴都是对数坐标。请教各位要用什么样的方法处理才能得到像这篇论文效果这么好的频谱图呢?
      我可以确定的是我的加速度信号是正确的,和论文处理的原始信号一致(通过图片读数软件校核过关键点,都吻合)。加速度的数据我也附件附上(av.mat),是一个1*2500的向量。

论文里的频谱图

论文里的频谱图

我的频谱图

我的频谱图

加速度数据在此 av.rar (17.87 KB, 下载次数: 6) 是matlab的mat文件
我的FFT代码(是很初级的fft,没有用什么特别的方法调整过),其中av是加速度信号,一个实数向量:

  1. fs = 1/dt;
  2. point_num = length(av);

  3. NFFT = 2^nextpow2(point_num);
  4. f_series = fs*linspace(0,1,NFFT);
  5. avmag_adjust = 2*abs(fft(av, NFFT))/point_num;


  6. %下面是作图部分不太重要
  7. subplot(2,1,1), plot(f_series, avmag_adjust);
  8. xlim([0 20]);
  9. xlabel('频率/Hz');
  10. ylabel('振幅'); grid on;
  11. subplot(2,1,2), semilogx(f_series, avmag_adjust);
  12. xlim([0.1 100]);
  13. xlabel('频率/Hz');
  14. ylabel('振幅'); grid on;

复制代码

我已经尝试过的方法(但是这些方法我都是简单尝试,具体的参数调整并没有什么经验,所以很难达到最优):
      1、加窗,加了汉宁窗之后,效果亦不明显
      2、ZOOM FFT:小峰的分辨率似乎高了一些,但是最高的两个峰仍然不能分开。



      最后还有个小问题想请教一下:fft需要用2的幂的数据作为输入值,如果不是刚好是2的幂,那就补0补到2的幂,但是matlab里输入值不是2的幂也可以,比如这个a是2500的,直接用2500,和用上面的4096的进行处理,图像还是有差异的(貌似4096更好一些)。我想知道哪种方法是对的呢?直接用2500,还是补0补到4096呢?

非常感谢各位的解答!一个苦逼土木小博士谢过啦~~

回复
分享到:

使用道具 举报

发表于 2018-1-6 18:17 | 显示全部楼层
我也是新手恰好也是土木的,对最后的小问题,说下自己的理解
数据样本数如果不是2的幂,Matlab中fft会自动补零,补零以后,如果之前没有加窗,可能频谱上有泄露;但之前加窗了的话,频谱和样本数据恰好是2的幂的情况(没有被自动补零)差不多。

然后论文里能识别出2,3两个自振频率,是不是因为作者的样本点更多,采样时间越长,频谱上的分辨率越高
 楼主| 发表于 2018-1-6 19:59 | 显示全部楼层
xx12231265 发表于 2018-1-6 18:17
我也是新手恰好也是土木的,对最后的小问题,说下自己的理解
数据样本数如果不是2的幂,Matlab中fft会自动 ...

感谢帮助~
关于采样频率那个,我的加速度信号是有限元模拟出来的,对于这样的模拟数据,采样频率应该就是模拟的时候的步长吧。因为模拟的时候使用纽马克beta法模拟的,计算的步长我用的是1/1000s,得到的数据就是每秒1000个数据点,这样的话应该就是采样频率1000吧?我尝试过改变步长,但是没有什么效果,1/100图像会糙一点,1/10000和1/50000其实和1/1000差不多。所以我才认为作者是不是用了什么处理方法,比如滤波呀,或者zoom fft之类的。
发表于 2018-1-9 19:53 | 显示全部楼层
数据加长点看看
发表于 2018-1-9 22:24 | 显示全部楼层
按照楼主说的采样率1000试了一下,Nfft=4096,
f=[ 0        0.244140625000000        0.488281250000000        0.732421875000000        0.976562500000000        1.22070312500000        1.46484375000000        1.70898437500000        1.95312500000000        2.19726562500000        2.44140625000000....] 教课图中明显在2Hz有一条谱线,而你给的这个数据从1.95Hz直接跳2.19Hz了

考虑是栏栅效应造成, 建议仿真时间弄长点,这样频率分辨率就高了
/delta f=fs/Nfft  
 楼主| 发表于 2018-1-11 11:09 | 显示全部楼层
红轮 发表于 2018-1-9 22:24
按照楼主说的采样率1000试了一下,Nfft=4096,
f=[ 0        0.244140625000000        0.488281250000000  ...

对对,我现在再看这个问题觉得你说的非常正确!!
关键就在于仿真时间上,我是仿真一个车在某个速度下通过桥梁,如果要是想提高频率分辨率,最好的办法就是降低车速,然而车速我是按照论文给定的,所以我觉得这个论文的这个图可能有点问题,并不能做出来。。。

点评

如果要是想提高频率分辨率,最好的办法就是降低车速??? 额~~~~~ =1/T, 只能提高采样时间才行吧...  详情 回复 发表于 2018-1-13 11:42
发表于 2018-1-13 11:42 | 显示全部楼层
Ja要认真做科研 发表于 2018-1-11 11:09
对对,我现在再看这个问题觉得你说的非常正确!!
关键就在于仿真时间上,我是仿真一个车在某个速度下通 ...

如果要是想提高频率分辨率,最好的办法就是降低车速??? 额~~~~~
ΔF=1/T, 只能提高采样时间才行吧...
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-4-19 21:54 , Processed in 0.078821 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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