lly666666 发表于 2014-10-1 23:11

关于功率谱估计的一个MATLAB问题

最近在研究分段平均周期图法,我用MATLAB随机生成1000组只含有-1和1的数组,每组都有256个bit,每个bit的sample rate是4。
这1000组的数据相当于是从一个大的数据中截取出来的。
然后我用
y=fft(x,FFT_Length);
对每一组一共256*4个samples进行傅立叶变换   N = 256*4
pow=pow+power(abs(y),2);
然后化成功率,把1000组的功率都相加,最后得到一个总的pow
然后我用pow/1000/N 得到每个点的平均功率。


问题来了,当我把pow这个矩阵里面的值全部相加的时候,竟然不是1,因为时域的平均功率和频域的平均功率应该是相等的,时域里肯定是1,但是频域不是1。我开始找错,发现网上说要把fft以后的值*2/N得出真实的值,但是这样做还是错的,最后发现是在功率之后/N才能得到1,也就是说
pow=pow+power(abs(y),2)/N;
我不知道为啥,是MATLAB本身fft的缺陷吗?求大神解惑!

hcharlie 发表于 2014-10-2 21:16

本帖最后由 hcharlie 于 2014-10-3 15:54 编辑

MATLAB在FFT计算以后,频谱(数学谱)要增加N倍,平方会增加N^2倍,按你的计算,总功率/N^2等于1是正确的,我用别的方法计算结果也是这样.
所以你的计算应该得这个结果.
书上讲的FFT以后谱要除以N/2是指物理谱,是数学谱的两倍,不要混淆.
从物理意义讲,PSD=数学谱平方/DF,DF为频率分辨率;
求PSD面积,PSD*DF积分求和,(看得出DF一乘一除消掉)
求平方根得到Grms=1g.
OK !!!



页: [1]
查看完整版本: 关于功率谱估计的一个MATLAB问题