【求助】psd的规一化处理
对一个信号做功率谱密度分析,但是起结果参差不齐,不稳定,如何对它进行规一化处理?随便给一个程序,如下:
clear all;
n=1:0.001:3.047;
y=sin(2*pi*16*n);
n_length=2048;
fs=1024;
t=(0:n_length-1)/fs;
f=fs*(0:n_length/2)/n_length;
=xcorr(y);
y_fft=abs(fft(y_xcorr,n_length));
figure(1);
plot(f,y_fft(1:n_length/2+1))
虽然在16hz附近处得到峰值,但是其幅度如何进行规一化处理?? 将FFT变换后的结果*2/n_length,即y_fft=abs(fft(y_xcorr,n_length))*2/n_length;
试试看。 我把楼主的程序作了较大的修改。
clear all;
fs=1024;
n=(0:2047)/fs; %上程序中n的采样频率和fs不一致,3.047是否应为2.047,因为n_length=2048
y=sin(2*pi*16*n);
n_length=2048;
t=(0:n_length-1)/fs;
f=fs*(0:n_length/2)/n_length;
X=fft(y);
=xcorr(y,'unbiased');%用相关系数求功率谱密度,要用相关系数的无偏估计
%信号长度2048个,相关系数4095个
y_fft=abs(fft(y_xcorr)); %求出的功率谱密度也有4095个
%figure(1);
%subplot 211; plot(f,abs(X(1:n_length/2+1))*2/n_length);%画出信号的频谱,信号长度2048个,谱线1025个
%axis(); grid;
%title('Spectrum of signal y');
%xlabel('Frequency(Hz)'); ylabel('Amplitude');
%subplot 212; plot(lags/fs,y_xcorr); %画出相关系数,共有4095个
%axis([-2 2 -1 1]); grid;
%title('Signal Autocorrelation');
%xlabel('Time Lags(sec)'); ylabel('Amplitude');
%figure(2);
f1=fs*(0 : n_length)/2/n_length; %使用的频率矢量f1不同于信号频谱图的矢量f,因为FFT变换的长度不同
%subplot 212;
plot(f1,y_fft(1:n_length+1)/n_length); grid;
axis(); 原帖由 songzy41 于 2006-11-9 21:54 发表
我把楼主的程序作了较大的修改。
clear all;
fs=1024;
n=(0:2047)/fs; %上程序中n的采样频率和fs不一致,3.047是否应为2.047,因为n_length=2048
y=sin(2*pi*16*n);
n_length=2048;
t=(0:n_length-1 ...
感谢你的关注和帮助。
第一,我写的n和fs采样频率确实不一样,这是有问题,我的错。
第二,我程序中3.047是因为n从1开始取值。
然后其他的都ok。。。最后还要感谢一遍。。
另外,如果用welch方法求取psd,又该如何规一化呢??
比如还是上面的例子:
clear all;
fs=1024;
n=(0:2047)/fs;
y=sin(2*pi*16*n);
n_length=2048;
x=y(1:1152); %8段平均,每段取256个数据,每段重叠50%
n=256;
wn=hamming(n);
=pwelch(x,wn,n/2,n,fs);
figure(1);
plot(f,pxx);
得出的结果,幅值只有0.09???
[ 本帖最后由 garfield 于 2006-11-10 15:34 编辑 ] 哦,对了,如果你取的是单边谱,在语句:plot(f1,y_fft(1:n_length+1)/n_length); 中应该还是乘以2比较好吧。。
当然,如果不影响使用(如整段程序所有处都不乘以2),也是没有问题的。。。
多嘴一句。。
页:
[1]