这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 为什么两种方法求功率谱密度,画出的图不一样?

共2条 1/1 1 跳转至

为什么两种方法求功率谱密度,画出的图不一样?

菜鸟
2011-06-08 13:05:11     打赏

第一个图画出来100hz幅值约在20dB左右,而第二为0,为什么?

Fs=4096;
nfft=1024;         %2^n
N=1024;
n=0:1/Fs:1;
x=sin(2*pi*100*n);
X=fft(x,nfft);
mag1=abs(X)*2/N;
F1=(0:N-1)*Fs/N;   %真实频率
figure,plot(F1(1:N/2),mag1(1:N/2)); %绘出Nyquist频率之前的振幅
Pxx=abs(X).^2/length(n);   %求解PSD
t=0:round(nfft/2-1);
f=t*Fs/nfft;
P=10*log10(Pxx(t+1));   %纵坐标的单位为dB
figure;plot(f,P);

clear;
Fs=4096; %采样频率
n=0:1/Fs:1;
% 产生含有噪声的序列
xn=sin(2*pi*100*n);
window=boxcar(length(xn)); %矩形窗
nfft=1024;
[Pxx,f]=periodogram(xn,window,nfft,Fs); %直接法
plot(f,10*log10(Pxx));




关键词: 为什么     两种     方法     功率     密度     画出     不一样    

工程师
2011-06-10 16:16:21     打赏
2楼
用FFT进行谱分析的纵坐标的值一般情况下没有多大意义,一般看信噪比就行了!
你第一个程序有一些问题,如下:

Fs=4096;
nfft=1024;         %2^n
N=1024;
n=0:1/Fs:1;                      %产生1*4097向量
x=sin(2*pi*100*n);        %sin(0)=0
X=fft(x,nfft);                      %对4097个点进行1024点FFT变换,会截断为1024个点
mag1=abs(X)*2/N;
F1=(0:N-1)*Fs/N;   %真实频率
figure,plot(F1(1:N/2),mag1(1:N/2)); %绘出Nyquist频率之前的振幅
Pxx=abs(X).^2/length(n);   %求解PSD   %既然是进行1024点FFT变换,为什么除的是4097呢
t=0:round(nfft/2-1);     %
f=t*Fs/nfft;
P=10*log10(Pxx(t+1));   %纵坐标的单位为dB
figure;plot(f,P);


可见,你对4097个点进行1024点FFT变换,截断后为1024个点,由于第一个点为0,所以实际相当于对1023个点进行1024点FFT变换。FFT变换会出现频谱扩散,即离散的谱线会展宽。谱分辨率为:F=Fs/N=4096/1023不为整数,FFT相当于对连续频谱的采样,谱分辨率不为整数,从而不会采样到离散谱线(实际已展宽)的峰值。故FFT出来的纵坐标是不能表征功率的。

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]