本帖最后由 小海豚zc 于 2015-8-20 17:26 编辑
首先非常感谢您花时间做演示,我大概理解怎么用了,
根据我的理解,我写了个MATLAB的功率谱的演示程序,您看下对不对
还有两个小问题:
1.MATLAB做功率谱也会默认使用功率恢复系数,要想让幅值恢复 就得 /1.633*2(汉宁窗)??
2.如果我以功率谱为评价指标(例如根据功率谱做的三分之一倍频程),关注幅值绝对大小,那么我需要恢复幅值还是就用默认的能量恢复??相关的规范上只说了要加窗,没具体说是否用恢复系数等等。简单说就是:什么情况下用幅值恢复系数,什么情况下用功率恢复系数?
第二个问题困扰我很久了。。。希望前辈指教
- %演示
- clear;clc;
- Fs=100;
- N=10000;
- n=0:1/Fs:(N/Fs-1/Fs);
- xn=cos(2*pi*40*n);
- ff=(0:N/2-1)*Fs/N;
- figure;
- subplot(221),plot(n,xn),title('时域图');
- xlabel('时间');
- ylabel('幅值');
- y=fft(xn,N);
- y1=abs(y)*2/N;
- plot_y=y1(1:(N/2));
- subplot(222),plot(ff,plot_y),title('频谱图(FFT)');
- xlabel('频率/Hz');
- ylabel('幅值');
- window=boxcar(length(xn));
- [Pxx1,f]=periodogram(xn,window,N,Fs);
- subplot(223),plot(ff,Pxx1(1:N/2)*Fs/N),title('直接法功率谱 矩形窗');
- xlabel('频率/Hz');
- ylabel('幅值');
- han=1.5;
- %用Equivalent Noise Bandwidth (bins)值,而不是hanning能量恢复系数1.633
- %1.5=(2/1.633)^2
- window=hanning(length(xn));
- [Pxx2,f]=periodogram(xn,window,N,Fs);
- subplot(224),plot(ff,Pxx2(1:N/2)*Fs/N*han),title('直接法功率谱 汉宁窗');
- xlabel('频率/Hz');
- ylabel('幅值');
复制代码 |