migicmika 发表于 2012-11-26 19:01

关于功率谱还是功率谱密度(matlab中的总结)

本帖最后由 migicmika 于 2012-11-26 19:01 编辑

作为新手,这个对比可能有偏差,欢迎讨论。
结果先附上;

1.描述:前两天看了帖子,关于功率谱和功率谱密度的差别,我看了一下matlab中的代码,包含帮助。稍微总结:
matlab中 功率谱密度(PSD)和功率谱(MSS)不同,两者关系:PSD= MSS/df.
df= Fs/N 为频率分辨率;
2. 贴出我看到的定义:(新手不会打公式,见谅)
X(k)为x(n)FFT所求;A(k)为X(k)的绝对值。
则:
幅值谱 Am= A(k)/N;
功率谱 MSS= Am^2 =A(k)^2/N/N;
功率谱密度 PSD = MSS/df;
目前还有一些疑问:
有的书中 功率谱 = A(k)^2/N..(刘馥清著作)
还有些书中 功率谱密度 还和窗函数的有效噪声宽度有关。
不知道有没有谁能帮忙解释。
代码
%% 创建信号,保证整周期采样,并且将幅值设为10的数量级可以放大差别。
Fs = 2000;                  % Sampling frequency
T = 1/Fs;                     % Sample time
L = 10240;                     % Length of signal
t = (0:L-1)*T;                % Time vector
x = 10*sin(2*pi*50*t) + 20*sin(2*pi*500*t);
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%Matlab中功率谱密度用PSD表示,功率用 MSS表示
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 求幅值谱
ym = abs(fft(x))/length(x);
ym1 = 2*ym(1:floor(length(ym)/2)+1);
%% %% MATLAB 中定义求功率谱密度PSD(相当于功率谱除以df)
Px1 = abs(fft(x)).^2/length(x)/Fs;
Pxx1 = 2*Px1(1:floor(length(Px1)/2)+1);
%% %%%%% 通过定义求功率谱MSS
Px11 = (abs(fft(x))/length(x)).^2;
Pxx11 = 2*Px11(1:floor(length(Px11)/2)+1);
%% %%%% 通过周期法求功率谱密度PSD
w = boxcar(length(x));
= periodogram(x,w,length(x),Fs);
%% %% 通过自相关求(从结果的数量级看,此处自相关应该和MSS是互为FT对)
xx = xcorr(x,'unbiased');%%% 此处unbiased 还是biased 的作用未清
Px3 = abs(fft(xx))/length(xx);
Pxx3 = 2*Px3(1:floor(length(Px3)/2)+1);
subplot(511)
plot(Pxx1);
ylabel('功率谱密度-公式')
subplot(512)
plot(Pxx2);
ylabel('功率谱密度-周期法')
subplot(513)
plot(Pxx3);%% 自相关的横坐标有移位的现象,具体可以查资料
ylabel('自相关fft')
subplot(514)
plot(Pxx11);
ylabel('功率谱-公式')
subplot(515)
plot(ym1);
ylabel('幅值谱')


zengwj0423 发表于 2012-11-27 09:35

根据帕塞瓦定理的时域与频域的能量相等定理,推得功率谱密度函数= A(k)^2/N,但是一般工程上使用功率谱时不去特别关注其幅值的物理意义,而是关心较高幅值对应的频率值,及用功率谱密度或功率谱间接求取传递函数,所以一般工程上的定义功率谱为MSS= Am^2 =A(k)^2/N/N,功率谱密度 PSD = MSS/df各有用途
页: [1]
查看完整版本: 关于功率谱还是功率谱密度(matlab中的总结)