数字信号处理之经典谱估计与现代谱估计
2016-01-26 12:43
549 查看
%1、直接法:
clc;clear all;
u = wgn(1,2000,0); %产生高斯白噪声信号样本点2000个
b = [1 1 0.24];
a = [1 -1.5 0.56]; %滤波器系数
xn = filter(b,a,u) % u通过滤波器的输出xn
N = 1000;
xn = xn(1,1:N); %取x的1000个样本点分析
nfft=1024; %取1024点fft运算
Perw=abs(fft(xn,nfft)).^2/N; %按公式先计算x(n)的离散傅立叶变换,得X(k),然后再取其幅值的平方,并除以N
t=0:round(nfft/2-1);
f=t*N/nfft;
Perw_1=10*log10(Perw(t+1));
figure;
plot(f,Perw_1);
title('直接法功率谱');
xlabel('频率/Hz');
ylabel('功率谱密度');
Mean_Perw = mean(Perw_1);
Var_Perw= std(Perw_1);
disp(['Perw的均值为:' ,num2str(Mean_Perw)]);
disp(['Perw的方差为:' ,num2str(Var_Perw)]);
%2、间接法:
i = 0;
gn = xn;
for M =600:200:1000 %M分别取600 800 1000
i = i+1;
xn = gn(1,1:M);
cxn=xcorr(xn,'unbiased'); %计算序列的自相关函数
CXk=fft(cxn,nfft);
Pbt=abs(CXk);
index=0:round(nfft/2-1);
k=index*M/nfft;
figure;
plot(k,10*log10(Pbt(index+1)));
title(['间接法(自相关函数法)功率谱','M=',num2str(M)]);
xlabel('频率/Hz');
ylabel('功率谱密度');
Mean_Pbtw = mean(10*log10(Pbt(index+1)));
Var_Pbtw= std(10*log10(Pbt(index+1)));
disp(['Pbtw',num2str(i),'的均值为:' ,num2str(Mean_Pbtw)]);
disp(['Pbtw',num2str(i),'的方差为:' ,num2str(Var_Pbtw)]);
end
%3、AR现代谱估计法: clc;clear all; u = wgn(1,2000,0); %产生高斯白噪声信号样本点2000个 b = [1 1 0.24]; a = [1 -1.5 0.56]; %滤波器系数 xn = filter(b,a,u) % u通过滤波器的输出xn N = 1000; %N同时也表示采样率 xn = xn(1,1:N); %取x的1000个样本点分析 Nfft=1024; %取1024点fft运算 ORDER = 5; [Pxx,W] = pyulear(xn,ORDER,Nfft); t=0:round(Nfft/2-1); f=t*N/Nfft; Pxx_1 = 10*log10(Pxx(t+1)); plot(f,Pxx_1); title('AR模型法功率谱'); xlabel('频率/Hz'); ylabel('功率谱密度'); Mean_Pxx = mean(Pxx_1); Var_Pxx= std(Pxx_1); disp(['Perw的均值为:' ,num2str(Mean_Pxx)]); disp(['Perw的方差为:' ,num2str(Var_Pxx)]);
相关文章推荐
- 解析在main函数之前调用函数以及对设计的作用详解
- java和matlab画多边形闭合折线图示例讲解
- C#调用Matlab生成的dll方法的详细说明
- 从java中调用matlab详细介绍
- 稀疏自动编码器 (Sparse Autoencoder)
- VC++与Matlab混合编程的快速实现
- Matlab 矩阵运算
- matlab与opencv部分函数的对照
- matlab神经网络工具箱创建神经网络
- Matlab
- MATLAB 入门教程
- matlab函数_连通区域
- MATLAB中函数模式和命令模式的区别
- MATLAB 添加自定义的模块到simulink库浏览器
- MATLAB for Mac使编辑器支持中文
- [转]matlab中plot用法
- 初学数模-MATLAB Quick Start! Part I
- 初学数模-MATLAB Quick Start! Part II
- matlab程序优化以及eclipse与github的结合
- matlab中的rand函数(用于产生随机数)