马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
本帖最后由 小海豚zc 于 2014-10-2 20:04 编辑
恳请各位高手帮我解答一下这几个问题:
1、功率谱 幅值的意义
2、功率谱和频谱的关系,尤其数学关系
我现在需要的是 “等带宽分析得到的功率谱”,需要对这个功率谱进行频域的计权,所以其幅值的准确与否关系重大。网上搜过一些求功率谱的方法,我最后改写了一下,有三种方式的功率谱是近似相等的。但是这是不是我需要的那个“等带宽分析得到的功率谱”?
我的程序如下
- clear;clc;
- Fs=1000;%采样频率
- N=1000;%采样点数 Fs/N=t(采样总时间)
- %频率分辨率=Fs/N需满足关注频率为频率分辨率的整数倍
- n=0:1/Fs:(Fs/N-1/Fs);
- xn=cos(2*pi*40*n)+3*cos(2*pi*100*n)+5*cos(2*pi*150*n)+rand(size(n));%数据
- ff=n(1:N/2)*Fs;
- subplot(421),plot(n,xn),title('时域图');
- xlabel('时间');
- ylabel('幅值');
- %%fft
- y=fft(xn,N);
- y1=abs(y)*2/N;
- plot_y=y1(1:(N/2));
- %ploty2=plot_y/sqrt(2);
- subplot(422),plot(ff,plot_y),title('频谱图(FFT)');
- %hold on;stem(ff,plot_y,'r');
- xlabel('频率/Hz');
- ylabel('幅值');
- %power spectrum(间接法)
- %nfft=1024;%index=0:round(nfft/2-1);%k=index*Fs/nfft;
- cxn=xcorr(xn,'coeff'); %计算序列的自相关函数
- %xcorr(,'')中''内缺省or unbiased or biased or coeff
- CXk=fft(cxn,N);
- Pxx=abs(CXk);
- plot_Pxx=10*log10(Pxx(1:N/2));
- subplot(423),plot(ff,plot_Pxx),title('间接法(自相关函数法)功率谱');
- xlabel('频率/Hz');
- ylabel('功率谱密度');
- %power spectrum(直接法)
- window=boxcar(length(xn)); %矩形窗
- %nfft=1024;
- [Pxx,f]=periodogram(xn,window,N,Fs); %直接法
- subplot(424),plot(ff,Pxx(1:N/2)),title('直接法(periodogram)功率谱');
- xlabel('频率/Hz');
- ylabel('功率谱密度');
- %welch method
- window=boxcar(length(xn)); %矩形窗
- noverlap=20; %数据无重叠
- range='half'; %频率间隔为[0 Fs/2],只计算一半的频率
- [Pxx,f]=pwelch(xn,window,noverlap,N,Fs,range);
- %plot_Pxx=10*log10(Pxx);
- subplot(425),plot(f,Pxx),title('welch法功率谱');
- %Barlett method
- window=boxcar(length(n)); %矩形窗
- noverlap=0; %数据无重叠
- p=0.9; %置信概率
- [Pxx,Pxxc]=psd(xn,N,Fs,window,noverlap,p);
- %plot_Pxx=10*log10(Pxx);
- subplot(426),plot(Pxxc,Pxx/N*2),title('barlett法功率谱');
复制代码
|