小卒wwt 发表于 2016-1-11 19:41

matlab中功率谱密度的计算是否存在真实值的问题

因为自己需要根据结构跨中加速度功率谱密度函数频率计权后计算均方根加速度,所以希望知道功率谱密度是否存在真实值的问题。在计算幅值的时候存在真实值的问题,即
真实值=abs(fft(x,N))*2/N
但是在计算功率谱密度时,看到的计算方式大多为:
   y=fft(x,N);
   p=y.*conj(y)/N;
这种方式好像计算得到的功率谱密度并不是一个实际值,那么该如何计算得到实际值呢?
以下面程序为例,请帮忙写出功率谱密度的计算程序

clc
clear
%读入数据,第一列赋予列向量t,第三列赋予列向量a,第二列丢弃
<span style="line-height: 1.5;">=textread('aa.txt','%f%*f%f');</span>
%以下命令为显示加速度时程曲线
figure(1)
<span style="line-height: 1.5;">plot(t,a);</span>
xlabel('时间(s)');
ylabel('加速度(m/s^2)');
title('跨中加速度时程曲线');
grid;
%进行FFT变换并做频谱图
nfft=2^nextpow2(length(t));%找出大于t的个数的最大的2的指数值
y=fft(a,nfft);%进行fft变换,得到频率的幅值分布
mag=abs(y)*2/length(t); %求幅值
del=t(3)-t(2);%时间步长
fs=1/del;
f=(0:nfft-1)'*fs/nfft;%频率序列
figure(2);
<span style="line-height: 1.5;">plot(f,mag);%做频谱图</span>
axis();
xlabel('频率(Hz)');
ylabel('幅值');
title('跨中加速度频谱图');
grid;


hcharlie 发表于 2016-1-16 16:15

1)请注意你这两个公式计算得到的都是所谓功率谱,不带密度,所谓功率谱的因次是g^2,功率谱密度因次是g^2/Hz,相差频率因次,从数字上计算密度还要除以频率分辨率。
2)你的两个公式都有道理,前者说的是物理功率谱(密度),后者是所谓带负频率的数学功率谱(密度),后者为前者之半,你应该用前者。
3)调试程序都必须有自己正确的标准算例来验证结果,万不能靠任何别人出来指出正误。
页: [1]
查看完整版本: matlab中功率谱密度的计算是否存在真实值的问题