声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1399|回复: 4

[综合讨论] 【求助】psd的规一化处理

[复制链接]
发表于 2006-11-9 12:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
对一个信号做功率谱密度分析,但是起结果参差不齐,不稳定,如何对它进行规一化处理?
随便给一个程序,如下:
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;

[y_xcorr,lags]=xcorr(y);
y_fft=abs(fft(y_xcorr,n_length));

figure(1);
plot(f,y_fft(1:n_length/2+1))

虽然在16hz附近处得到峰值,但是其幅度如何进行规一化处理??
回复
分享到:

使用道具 举报

发表于 2006-11-9 15:05 | 显示全部楼层
将FFT变换后的结果*2/n_length,即y_fft=abs(fft(y_xcorr,n_length))*2/n_length;
试试看。
发表于 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)/fs;
f=fs*(0:n_length/2)/n_length;
X=fft(y);
[y_xcorr,lags]=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([0 40 0 1.2]); 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([0 40 0 0.5]);

评分

1

查看全部评分

 楼主| 发表于 2006-11-10 09:57 | 显示全部楼层
原帖由 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);
[pxx,f]=pwelch(x,wn,n/2,n,fs);
figure(1);
plot(f,pxx);
得出的结果,幅值只有0.09???

[ 本帖最后由 garfield 于 2006-11-10 15:34 编辑 ]
 楼主| 发表于 2006-11-10 10:01 | 显示全部楼层
哦,对了,如果你取的是单边谱,在语句:plot(f1,y_fft(1:n_length+1)/n_length); 中应该还是乘以2比较好吧。。
当然,如果不影响使用(如整段程序所有处都不乘以2),也是没有问题的。。。
多嘴一句。。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-12 15:27 , Processed in 0.063494 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表