声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2675|回复: 16

[FFT] 如何校正FFT后最大振幅值(请高手解惑,感激不尽)

[复制链接]
发表于 2007-10-22 00:05 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 wdhd 于 2016-9-8 13:54 编辑

  我的情形是这样的,我跑出一个车身位移时域图(Y轴:即amplitude值,X轴:time)要把它转成频谱图,因为只有位移中间有振荡,我只撷取其中振幅较大的那一段(A.例如3.2秒~3.3秒),问题就是撷取不同长度的时域图(B.例如3.2秒~3.4秒),一样是照下列程序去跑出频谱图,其结果波形是几乎一样的,但是其y轴最大振幅值却不一样,且差约2倍(A例子是B例子的2倍),为什么会这样呢,这问题困扰我好久了,请高手解惑,感激不尽!其中3.3秒~3.4秒振幅已很小,3.4秒以后几乎是0
  %程序:
  n=1024;
  nh=n/2;
  nh1=nh+1;
  N1=124;% amplitude值共取124点
  Y1 = fft(amplitude,n);
  Py1 = abs(Y1)./N1;%校正放大N倍的值
  f1 = 1/0.0035*(0:nh)/n;
  %我的取样频率是每0.0035秒取一点
  plot(f1,Py1(1:nh1));
  title('Frequency content of y-up5cm')
  xlabel('frequency (Hz)')
  ylabel('Length(mm)')
  legend('20km/hr');
  %
  amplitude值共取124点
  0
  21.501804039540136
  43.98548131900878
  70.91529649745378
  100.50477183819521
  129.61537921396646
  156.953249046414
  183.45898830805413
  207.53632010013752
  230.2707577142209
  253.0688084762911
  270.17928524897235
  279.5617474383296
  284.5538310136583
  284.5483920987078
  282.8377927255328
  279.7927168091018
  283.40990641630344
  281.3830587859606
  278.5814523362579
  270.8734530898399
  257.63484629874836
  239.23055511669975
  217.54783258222847
  193.47614777839314
  167.72916962525414
  140.65022763349984
  112.6437324255382
  83.9514261089326
  55.33091696974037
  30.29436425165986
  8.719987106948592
  -10.329023638449481
  -25.500491094258603
  -38.92114095766206
  -49.688284345498325
  -57.130517931938435
  -61.06822385111339
  -61.946046754236015
  -60.042378357993854
  -56.508252007038266
  -52.017786358547326
  -47.09855073708182
  -42.45765269257321
  -37.99740346375544
  -34.155406285791045
  -30.787254290836668
  -27.904999921740224
  -25.397385496041558
  -23.014268389369988
  -20.720361292107015
  -18.417899727059854
  -16.22413743413862
  -14.149575743719462
  -12.271533892645452
  -10.535310934066885
  -8.852081218124267
  -7.120391536694734
  -5.279896663848938
  -3.298112903923216
  -1.164214868171359
  1.088536165313243
  3.403327842848894
  5.693347160670953
  7.856618130522284
  9.799685589679155
  11.426313999301975
  12.686691766857276
  13.532942011042074
  13.981499014289737
  14.04699358640404
  13.799035095228971
  13.286533167175795
  12.567461354362186
  11.680972196748522
  10.678239956896956
  9.594148783461987
  8.465174357099668
  7.317220060854003
  6.172992946017431
  5.050067497524314
  3.961422170758077
  2.913326042002998
  1.891640002579911
  0.899292093823719
  -0.051247117517295
  -1.447362020114169
  -9.854326459236397
  -27.503083055733192
  -54.84726870497945
  -91.15476962940575
  -132.95104088481864
  -178.77016875489815
  -224.16610075487552
  -267.3577713655101
  -305.71153776297615
  -334.6719414212301
  -348.3757633096496
  -346.2024333320699
  -331.3640057435133
  -305.19345349971496
  -276.43210655975247
  -252.2132899513571
  -234.90860215447347
  -226.61838464431486
  -222.44223533250434
  -216.9148477611869
  -208.14082890909143
  -194.70730688596367
  -175.51269980163605
  -150.03763963720277
  -119.1840646267534
  -83.8507436846325
  -44.98776333660302
  -6.584783864814536
  26.521475906889076
  50.37275906685009
  63.871184224760064
  68.19663605119378
  64.52556271037548
  54.519229956294964
  40.94804079506927
  26.342059392615045
  0
回复
分享到:

使用道具 举报

发表于 2007-10-22 07:06 | 显示全部楼层
要是想保证一致,FFT之后的谱要除以FFT的长度
发表于 2007-10-22 08:21 | 显示全部楼层
1,A例和B例是指什么,图?怎么没有给出?
2,楼主给出124个点,采样频率似乎是1/0.0035(从计算频率刻度中看出),则124个点仅0.5秒左右,怎么和3.2~3.4秒对应起来?
发表于 2007-10-22 08:21 | 显示全部楼层

回复 #1 porsche7533967 的帖子

可以先拿一个标准正弦信号试试不同长度时,你的程序得到的幅值是否一致。
 楼主| 发表于 2007-10-22 09:13 | 显示全部楼层
本帖最后由 wdhd 于 2016-9-8 13:55 编辑
原帖由 songzy41 于 2007-10-22 08:21 发表
1,A例和B例是指什么,图?怎么没有给出?
2,楼主给出124个点,采样频率似乎是1/0.0035(从计算频率刻度中看出),则124个点仅0.5秒左右,怎么和3.2~3.4秒对应起来?

  这是我的图文件资料,请高手解惑,感激不尽!

data

data
 楼主| 发表于 2007-10-22 23:19 | 显示全部楼层
请高手解惑,感激不尽!感激不尽
发表于 2007-10-23 06:50 | 显示全部楼层

回复 #6 porsche7533967 的帖子

不用高手,help fft就会发现, fft计算时没有除以fft长度N,因此最大谱值对应NA。如果想不同长度之间保持一直就必须除N

评分

1

查看全部评分

 楼主| 发表于 2007-10-23 09:34 | 显示全部楼层
本帖最后由 wdhd 于 2016-9-8 13:55 编辑
原帖由 VibrationMaster 于 2007-10-23 06:50 发表
不用高手,help fft就会发现, fft计算时没有除以fft长度N,因此最大谱值对应NA。如果想不同长度之间保持一直就必须除N

  Py1 = abs(Y1)./N1;%校正放大N倍的值
(请高手解惑,感激不尽)
发表于 2007-10-23 10:44 | 显示全部楼层
%Y1 = fft(amplitude,n);
%Py1 = abs(Y1)./N1;%校正放大N倍的值

Py1 = abs(Y1)./N1==》Py1 = abs(Y1)./n % 细心一点,耐心一点
 楼主| 发表于 2007-10-24 01:03 | 显示全部楼层
本帖最后由 wdhd 于 2016-9-8 13:55 编辑
原帖由 VibrationMaster 于 2007-10-23 10:44 发表
%Y1 = fft(amplitude,n);
%Py1 = abs(Y1)./N1;%校正放大N倍的值

Py1 = abs(Y1)./N1==》Py1 = abs(Y1)./n % 细心一点,耐心一点

  我想你没详细看我的说明吧,
  n=fft图取点数%(请高手解惑,感激不尽)
  N1=amplitude值取点数%(请高手解惑,感激不尽)
  照你说的话
  Py1 = abs(Y1)./n %不同n值会不一样,那n要取多少!?
  [ 本帖最后由 zhlong 于 2007-10-25 11:16 编辑 ]
发表于 2007-10-24 07:19 | 显示全部楼层
闲着也是闲着。 n 就是你执行这句话Y1 = fft(amplitude,n)的n。
发表于 2007-10-24 08:48 | 显示全部楼层
abs(fft(Y1,N))/n,要除的采样数据的个数n,N是将n以0补齐到2的整数次幂后的长度,

我现在有一个问题,有的说  abs(fft(Y1,N))/n 后还要乘2,应不应该乘2呢

[ 本帖最后由 zhangnan3509 于 2007-10-24 08:50 编辑 ]
发表于 2007-10-24 08:51 | 显示全部楼层

回复 #12 witty01 的帖子

求单边谱应该乘2,这个问题版里之前讨论过很多次了,你可以看看zhlong版主的置顶贴,里面有关于这个问题的帖子
发表于 2007-10-24 10:20 | 显示全部楼层

回复 #12 witty01 的帖子

如果你的原始数据是实单频信号,如果回到原始幅值需要乘2。 但是我们在做数值仿真,有时用复单频信号,x=Aexp(j*wt),则不用乘2。
发表于 2007-10-25 10:58 | 显示全部楼层
我知道了,谢谢:lol
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-12-2 11:29 , Processed in 0.082291 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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