现代信号处理实验:MATLAB实现LD算法进行AR估计

这篇具有很好参考价值的文章主要介绍了现代信号处理实验:MATLAB实现LD算法进行AR估计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

MATLAB实现LD算法进行AR估计

利用给定的一组样本数据估计一个平稳随机信号的功率谱密度称为功率谱估计,又称谱估计。谱估计的方法可以分成经典谱估计和现代谱估计。

经典谱估计又称为非参数化的谱估计,分为直接法和间接法。直接法是指直接计算样本数据的傅里叶变换,即获取频谱,然后计算频谱和其共轭的乘积,就得到功率谱;间接法是指先计算样本数据的自相关函数,然后计算自相关函数的傅里叶变换,即得到功率谱。经典谱估计存在很多的缺陷,主要原因是对数据加窗时默认在窗外未观测到的数据的自相关系数为 0,这显然是不切实际的;此外样本数据是有限长的,而经典谱估计往往需要较长的数据才能获得较好性能,而且加窗函数也容易造成谱的模糊,因此我们需要参数化的谱估计,也就是现代谱估计。

现代谱估计中一类常用的模型是AR模型估计。

AR估计原理

AR 模型的表达式为:
ld算法 matlab,通信专业课程笔记,信号处理,matlab

上式两边同时作 Z 变换,得到:
ld算法 matlab,通信专业课程笔记,信号处理,matlab

AR 模型的原理就是根据观测到的数据x(n)来估计 a i {a_i} ai,从而估计输入信号的功率谱。具体来说就是将输入信号x(n)看成一个均值为 0,方差为 σ 2 \sigma^2 σ2的高斯噪声通过信道得到的;先通过观测数据估计信道参数 a i {a_i} ai,再结合 z 变换公式来计算输入信号的功率谱。

AR 过程的线性预测和 Levinson-Durbin 算法
ld算法 matlab,通信专业课程笔记,信号处理,matlab

求解上述Yule-Walker方程的常用算法是 Levinson-Durbin 算法,具体推导过程如下:p-1 阶的 Yule-Walker 方程如下:

ld算法 matlab,通信专业课程笔记,信号处理,matlab

代码实现

算法步骤:

根据 Levinson-Durbin 算法进行递推,来计算 AR 模型的各阶参数。采用最终预测误差 FPE 法来确定 AR 模型阶数 p。

  1. 初始化:ld算法 matlab,通信专业课程笔记,信号处理,matlab

  2. 迭代计算:ld算法 matlab,通信专业课程笔记,信号处理,matlab

  3. 若k>p或者误差小于阈值,返回各阶次参数

  4. 对比估计信号和实际信号,观察并分析结果

代码:

LD_AR function函数存放在LD_AR.m文件中:

function [R,order, params, var] = LD_AR(x)
N = length(x)-1;

%% 自相关矩阵
R = zeros(N, 1);
for n = 1:N
   R(n) = x(1:N-n+1) * (x(n:N))' /N;
end

%% LD 算法
a = zeros(N+1,N+1);
rho = zeros(1,N+1);
FPE = zeros(1,N+1);
rho(1) = R(1);
a(1,1) = -R(2)/R(1);
rho(2) = rho(1)*(1-abs(a(1,1))^2);
FPE(1) = (N+1)/(N-1) * rho(2);
for k=2:N-1
    S = 0;
    for m = 1:k-1
        S = S + a(k-1,m) * R(k-m+1);
    end
    a(k,k) = -(R(k+1)+S)/rho(k);
    for i = 1:k-1
        a(k,i) = a(k-1,i) + a(k,k) * a(k-1,k-i);
    end
    rho(k+1) = rho(k)*(1-a(k,k)^2);
    FPE(k) = (N+k)/(N-k) * rho(k+1);
end

%% 利用FPE确定AR模型阶数
min = FPE(1);
disp 'min:'
disp(min)
for k = 2:N-1
    if abs(FPE(k))<abs(min)
        min = FPE(k);
        order = k;
    end
end
params = [1, a(order,1:order)];
var = abs(rho(order+1));
end

main.m文件:文章来源地址https://www.toymoban.com/news/detail-768116.html

clear;
clc;

%% 产生一组样本点
awgn_noise = randn(1,1000); 
a_model = [1 -0.6 0.4 -0.3]; 
% a_model = [1 -0.4 0.2 -0.2 0.4]; 
x = filter(1, a_model, awgn_noise);

%% LD算法估计AR参数
[R,order, a, var] = LD_AR(x)

%% 原始信号 s
number=1000;
w = linspace(-pi,pi,number); 
s = zeros([1,number]);
for m = 1:number 
    c = w(m); 
    kk = [1: length(a_model)-1];
    s(m) = 1 /(abs(1+ a_model(2:end)* exp(-1i*c*kk')))^2; 
end  

%% 估计信号 s_hat
s_hat = zeros([1,number]);
for m = 1:number 
    c = w(m); 
    kk = [1: length(a)-1];
    s_hat(m) = 1 /(abs(1+ a(2:end)* exp(-1i*c*kk')))^2; 
end  

%% 绘制频谱
figure;
set(gcf,'position',[700, 200, 1400, 350])
subplot(1,3,1);
plot(w,s, 'b');
grid on
set(gca,'Xtick',[-pi,-pi/2,0, pi/2,pi]);
set(gca,'XTickLabel',{'-pi' '-pi/2' '0' 'pi/2' 'pi'});
title('原始信号功率谱','fontsize', 12); 
xlabel('频率','fontsize', 12);
ylabel('功率','fontsize', 12);
ylim([0,7]);

subplot(1,3,2);
plot(w,s_hat, 'r-'); 
grid on
set(gca,'Xtick',[-pi,-pi/2,0, pi/2,pi]);
set(gca,'XTickLabel',{'-pi' '-pi/2' '0' 'pi/2' 'pi'});
title('LD算法进行AR估计功率谱', 'fontsize', 12); 
xlabel('频率','fontsize', 12);
ylabel('功率','fontsize', 12);
ylim([0,7]);

subplot(1,3,3);
plot(w,s,'b'); 
hold on
plot(w,s_hat, 'r--');
hold off
grid on
set(gca,'Xtick',[-pi,-pi/2,0, pi/2,pi]);
set(gca,'XTickLabel',{'-pi' '-pi/2' '0' 'pi/2' 'pi'});
title('原始信号功率谱和LD算法进行AR估计比较', 'fontsize', 12); 
xlabel('频率','fontsize', 12);
ylabel('功率','fontsize', 12);
legend('原始信号','AR估计信号')
ylim([0,7]);


% clc;
% clear;
% 
% % 构造加入高斯白噪声的样本点函数
% f1=0.4;
% f2=0.2;
% N=input('产生的样本点个数N:');
% n=1:N;
% wn=randn(1,N);% 产生高斯白噪声
% xn=sin(2*pi*f1*n+pi/3)+10*sin(2*pi*f2*n+pi/4);
% yn=xn+wn;
% 
% Rx=xcorr(yn,'biased');
% 
% k=1:N;
% f=k/N;
% Sx=abs(fft(Rx,N));
% plot(f,Sx);
% title('功率谱');
% xlabel('f');
% ylabel('Sx');
% 
% % 根据自相关函数估计f1,f2
% sxk=zeros(1,N/2);
% for k=1:N/2
%     sxk(k)=Sx(k);
% end
% 
% [pks,locs]=findpeaks(sxk,'SortStr','descend');
% locs(1)
% locs(2)
% for i=1:2
%     fprintf('预测结果:f%d=%f\n',i,locs(i)/N);
% end

到了这里,关于现代信号处理实验:MATLAB实现LD算法进行AR估计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数字信号处理实验---Z变换及系统的零极点分析 Matlab代码

    一.各种函数的用法 1.tf2zp函数:通常用于将传递函数(Transfer Function)转换为零极增益形式(ZPK form),转换前G(s) = num(s) / den(s),转换后G(s) = K * (s - z1) * (s - z2) * ... * (s - zn) / (s - p1) * (s - p2) * ... * (s - pn) 2.zp2tf函数:用于将零极增益形式(ZPK form)转换为传递函数(Transfer Fu

    2024年01月23日
    浏览(50)
  • 现代信号处理——随机信号的统计描述

    一、信号的分类 确定性信号:能够以确定的时间函数表示的信号,信号在任何时刻的取值都是固定的,信号的取值都是可以通过表达式算出来的。 随机信号:称为不确定信号或随机过程,不是时间的确定函数,没有确定的表达式,只能通过观察去得到它的样本。 例如,观察

    2023年04月10日
    浏览(40)
  • 现代信号处理——盲信号分离(盲信号分离的基本理论)

    一、背景 盲信号分离的研究源自Jutten与Herault于1991年发表的论文。Comon于1994年提出盲信号分离的独立分量分析方法。正是他们的开拓性工作极大地推动了盲信号分离的研究,使得盲信号分离成为近30多年来信号处理界、机器学习界与神经计算界的一个研究热点。以广泛的应用

    2024年02月13日
    浏览(46)
  • 【数字信号处理课程设计】基于MATLAB实现语音信号的采集与处理(偏重滤波)

    目录 一、目标与任务 二、原理介绍 2.1 录音原理 2.2 滤波器的设计原理及设计方法 2.3 IIR 数字滤波器设计原理 2.4 双线性变换法 三、GUI界面设计与实现 四、基于MATLAB仿真 4.1实验过程 4.2 结果分析 五、总结 5.1 函数用法总结 5.2 心得体会 六、参考文献 这个项目在我的B站上有专

    2024年01月18日
    浏览(57)
  • 现代信号处理-现代功率谱密度估计AR模型

    本栏前两节经典谱估计中提到: 经典谱估计下,方差和分辨率是一对矛盾 。这是因为经典谱估计将数据进行了加窗,自相关法还对自相关进行了加窗(二次加窗),这就让我们想到把 原始数据藏在一个系统H(Z)中 ,让这个系统包含这组数据的特性,这样一来,系统中的系数

    2024年02月07日
    浏览(66)
  • 雷达信号处理算法:静态杂波滤除(附MATLAB代码和数据)

    本文编辑:调皮哥的小助理 本期文章将介绍三种雷达信号处理常用的静态杂波滤方法的基本原理,分别是零速通道置零法、动目标显示(MTI)以及相量均值相消算法(平均相消算法),并分析了静态杂波的滤除效果,以及三种方法的优缺点和应用场景,最后提供了一个MATLA

    2024年02月15日
    浏览(176)
  • 数字信号处理实验:IIR数字滤波器设计及软件实现

    目录 一、实验目的 二、实验原理 三、实验设备 四、实验内容及步骤 五、实验结果及分析 六、实验主程序框图及程序清单 七、实验总结 熟悉用双线性变换法设计IIR数字滤波器的原理与方法; 学会调用MATLAB信号处理工具箱中滤波器设计函数(或滤波器设计分析工具FDATool)设

    2024年02月12日
    浏览(43)
  • 162基于matlab的多尺度和谱峭度算法对振动信号进行降噪处理

    基于matlab的多尺度和谱峭度算法对振动信号进行降噪处理,选择信号峭度最大的频段进行滤波,输出多尺度谱峭度及降噪结果。程序已调通,可直接运行。 162 matlab 信号处理 多尺度谱峭度 (xiaohongshu.com)

    2024年02月19日
    浏览(49)
  • 现代信号处理——自适应滤波器(匹配滤波器)

    信号处理的目的是从噪声中提取信号,得到不受干扰影响的真正信号。采用的处理系统称为滤波器。 实时信号处理中,希望滤波器的参数可以根据系统或环境的变化进行更新,称为自适应滤波器。 滤波器的分类: 线性滤波器、非线性滤波器; FIR滤波器、IIR滤波器; 时域滤

    2023年04月27日
    浏览(70)
  • 一、信号处理 ——impseq函数与stepseq函数(Matlab实现)

    在脚本中直接运行一次即可,在matlab左侧生成impseq.m文件与stepseq.m文件 1. 单位脉冲函数impseq. 2. 单位阶跃函数stepseq. 仅用于学习记录~

    2024年02月06日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包