cangcudeshu 发表于 2019-5-11 08:47

fft真实幅值与功率谱

众所周知matlab在做fft之后取模abs之后乘2除nfft即可得到幅度谱,在求功率谱的时候是对幅度值的平方除nfft还是直接在傅里叶变化后的模值基础上取平方再乘2除nfft。
amp=fft(x(t),nfft);
real_amp=abs(amp)*2/nfft;
PSD=rea_amp.^2/nfft;
PSD1=2*abs(fft(x(t),nfft)).^2/nfft;

PSD1和PSD这两个值哪个是正确的功率谱呢??????

cangcudeshu 发表于 2019-5-11 08:54

哪位大神帮帮我啊,我已经困惑了好久了

zhdbit 发表于 2019-5-11 09:17

为啥要除nfft啊,直接平方就行了吧

cangcudeshu 发表于 2019-5-11 10:18

zhdbit 发表于 2019-5-11 09:17
为啥要除nfft啊,直接平方就行了吧

我也不清楚,帕塞瓦尔定理前面有一个1/2pi,我理解我除以N

qiaohai 发表于 2019-5-11 11:11

本帖最后由 qiaohai 于 2019-5-11 11:30 编辑

1)fft计算结果除以N得到有正负频率的数学频谱;
2)数学频谱*2得到只有正频率的物理频谱;
3)数学频谱的平方得到数学功率谱;
4)数学功率谱*2得到物理功率谱;
5)以上功率谱与随机振动里的功率谱密度差df倍,df为频率分辨率;
6)随机振动里的功率谱密度是定义在无穷域的,在有限域领域做出来的只能是谱密度估计,要得到一定精度的谱密度估计要进行至少50~100次的谱平均,像现在一次计算得到的什么功率谱,我不知道算出来有何用处,没有理论的支持。
我的意见再说清楚一点,不是随机振动信号不必求什么功率谱,没有理论支持。

TestGuru 发表于 2019-5-11 20:36

xr[ ],xr[ ]分别为FFT后的实部和虚部,NFFT为FFT点数,A[ ]为RMS幅度,P[ ]为功率,PSD[ ]为功率密度,Fs为采样频率

A=sqrt(xr*xr+xi*xi)/NFFT;//FFT BIN中心频率为直流
P=A*A;
PSD=P/Fs*NFFT;

for(i=1;i<NFFT/2;i++)   
{
        A=sqrt(2*(xr*xr+xi*xi))/NFFT;//FFT BIN中心频率大于直流且小于奈奎斯特频率
      P=A*A;
      PSD=P/Fs*NFFT;
}
i=NFFT/2;
A=sqrt(xr*xr+xi*xi)/NFFT;//FFT BIN中心频率=奈奎斯特频率,一般可以扔掉
P=A*A;
PSD=P/Fs*NFFT;

zhdbit 发表于 2019-5-12 14:31

cangcudeshu 发表于 2019-5-11 10:18
我也不清楚,帕塞瓦尔定理前面有一个1/2pi,我理解我除以N

我以前用给定的加速度功率谱密度做傅里叶逆变换模拟时域随机信号做瞬态多体分析的时候,幅值谱和自谱之间就是直接平方处理的,对时域信号求有效值和原PSD误差均在2.5%以内,方法应该是对的。。。

qiaohai 发表于 2019-5-12 19:36

zhdbit 发表于 2019-5-12 14:31
我以前用给定的加速度功率谱密度做傅里叶逆变换模拟时域随机信号做瞬态多体分析的时候,幅值谱和自谱之间 ...

是的。做 IFFT逆变换时不能除N,做FFT正变换时需要除N。
页: [1]
查看完整版本: fft真实幅值与功率谱