一、功率谱的定义
由维纳辛定理可知,在离散的条件下功率谱密度和相关函数的关系如下。设离散随机序列x(n),自功率密度和自相关函数
有:
其中为数据采样间隔。
而离散随机序列x(n)和y(n),互功率谱密度和互相关函数
,有
且有,
实际工程中随机序列长度均为有限长,因此利用有限长随机序列计算的自功率谱密度和互功率谱密度只是真实值的一种估计。
二、用matlab计算功率谱密度
1.实例:
某信号有正弦分量和随机数所组成,正弦信号的频率分别为50HZ和120HZ,50HZ信号的幅值为1,120HZ信号的幅值为3,采样频率为1000HZ,随机信号是均值为0,方差为1。
下面分别调用fft与periodogram函数来计算功率谱密度。
clear all;
clc;
close all;
randn('state',0); % 随机数初始化
Fs = 1000; % 采样频率
t = 0:1/Fs:1-1/Fs; % 时间刻度
f1=50; f2=120; % 两个正弦分量频率
x=cos(2*pi*f1*t)+3*cos(2*pi*f2*t)+randn(size(t)); % 信号
% 使用FFT
N = length(x); % x长度
xdft = fft(x); % FFT
xdft = xdft(1:N/2+1); % 取正频率
psdx = (1/(Fs*N)) * abs(xdft).^2; % 计算功率谱密度
psdx(2:end-1) = 2*psdx(2:end-1); % 乘2(2:end-1)
freq = 0:Fs/length(x):Fs/2; % 频率刻度
subplot 211
plot(freq,10*log10(psdx),'k') % 取对数作图
grid on; xlim([0 Fs/2]);
title('用FFT的周期图')
xlabel('频率/Hz')
ylabel('功率谱密度/(dB/Hz)')
% 调用periodogram函数
[Pxx,f]=periodogram(x,rectwin(length(x)),N,Fs);
subplot 212
plot(freq,10*log10(Pxx),'k'); % 取对数作图
grid on; xlim([0 Fs/2]);
title('调用periodogram函数的周期图')
xlabel('频率/Hz')
ylabel('功率谱密度/(dB/Hz)')
mxerr = max(psdx'-Pxx) % 求两种方法的最大差值
set(gcf,'color','w');
2.分析
调用格式:
[Pxx,f]=periodogram(x,window,nfft,fs);
说明:
输入参数:
x : 被测信号;
window:窗函数,默认为矩行窗,长度为信号x的长;
nfft:FFT的长度,默认为信号x的长;
fs:采样频率;
输出参数:
Pxx:是以周期图法计算信号x的功率谱密度估值;
f:实际频率;
下面我们来对上述程序进行详细分析:
首先我们先看信号x的波形,很明显可以看出信号中存在噪声干扰。
然后信号x的频谱图为(采样频率为1000)(注:下图为移位后的图)

取正频率段

计算功率谱密度为

纵坐标取对数图

调用periodogram函数得到的功率谱图为

调用fft与调用periodogram函数得到的功率谱图对比:

err(误差)图

最大误差 mxerr =5.5511e-17
可以看到,两种方法计算出功率谱密度的最大差值在e-17量级上,几乎可以忽略不计。因此可以说明两种方法计算的结果是完全一致的,毫无差别。但调用periodogram函数的程序更简洁!
that's all。 Thank you!
最后
以上就是笨笨夏天最近收集整理的关于非参数法功率谱估计(2020-11-1) 一、功率谱的定义 二、用matlab计算功率谱密度的全部内容,更多相关非参数法功率谱估计(2020-11-1) 一、功率谱的定义内容请搜索靠谱客的其他文章。
发表评论 取消回复