如何校正FFT后最大振幅值(请高手解惑,感激不尽)
本帖最后由 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
要是想保证一致,FFT之后的谱要除以FFT的长度 1,A例和B例是指什么,图?怎么没有给出?
2,楼主给出124个点,采样频率似乎是1/0.0035(从计算频率刻度中看出),则124个点仅0.5秒左右,怎么和3.2~3.4秒对应起来?
回复 #1 porsche7533967 的帖子
可以先拿一个标准正弦信号试试不同长度时,你的程序得到的幅值是否一致。 本帖最后由 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秒对应起来?
这是我的图文件资料,请高手解惑,感激不尽!
请高手解惑,感激不尽!感激不尽
回复 #6 porsche7533967 的帖子
不用高手,help fft就会发现, fft计算时没有除以fft长度N,因此最大谱值对应NA。如果想不同长度之间保持一直就必须除N 本帖最后由 wdhd 于 2016-9-8 13:55 编辑原帖由 VibrationMaster 于 2007-10-23 06:50 发表
不用高手,help fft就会发现, fft计算时没有除以fft长度N,因此最大谱值对应NA。如果想不同长度之间保持一直就必须除N
Py1 = abs(Y1)./N1;%校正放大N倍的值
(请高手解惑,感激不尽) %Y1 = fft(amplitude,n);
%Py1 = abs(Y1)./N1;%校正放大N倍的值
Py1 = abs(Y1)./N1==》Py1 = abs(Y1)./n % 细心一点,耐心一点 本帖最后由 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 编辑 ]
闲着也是闲着。 n 就是你执行这句话Y1 = fft(amplitude,n)的n。 abs(fft(Y1,N))/n,要除的采样数据的个数n,N是将n以0补齐到2的整数次幂后的长度,
我现在有一个问题,有的说abs(fft(Y1,N))/n 后还要乘2,应不应该乘2呢
[ 本帖最后由 zhangnan3509 于 2007-10-24 08:50 编辑 ]
回复 #12 witty01 的帖子
求单边谱应该乘2,这个问题版里之前讨论过很多次了,你可以看看zhlong版主的置顶贴,里面有关于这个问题的帖子回复 #12 witty01 的帖子
如果你的原始数据是实单频信号,如果回到原始幅值需要乘2。 但是我们在做数值仿真,有时用复单频信号,x=Aexp(j*wt),则不用乘2。 我知道了,谢谢:lol
页:
[1]
2