|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
本帖最后由 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));
[Pxx2,f] = 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('幅值谱')
|
|