基于AR/MA/ARMA模型的功率谱估计与仿真系统
项目简介
本项目是一个基于MATLAB开发的综合性功率谱仿真平台,专门用于研究和验证现代谱估计技术中的参数模型法。系统完整实现了三种核心随机过程模型:自回归模型(AR)、移动平均模型(MA)以及自回归移动平均模型(ARMA)。
通过该系统,用户可以从底层的信号生成开始,经历参数估计算法,最终完成功率谱密度(PSD)的计算与对比。项目代码完全基于MATLAB原生语言编写,不依赖复杂的第三方工具箱,通过手动实现Levinson-Durbin递归、扩展Yule-Walker方程等核心算法,极其适合用于数字信号处理的算法研究、教学演示及工程验证。
功能特性
1. 随机信号生成
系统能够根据预设的阶数和系数,通过线性时不变系统(LTI)滤波器模型,利用高斯白噪声驱动生成具有特定统计特性的时间序列数据。
- 支持 AR (Auto-Regressive) 过程生成
- 支持 MA (Moving Average) 过程生成
- 支持 ARMA (Auto-Regressive Moving Average) 过程生成
2. 参数估计算法实现
项目手动实现了多种经典的现代谱估计算法,而非简单调用MATLAB库函数:
- AR模型估计:基于自相关序列,采用 Yule-Walker方程 结合 Levinson-Durbin递归算法 快速求解模型参数。
- MA模型估计:采用 Durbin法,通过高阶AR模型近似逼近,再对AR系数进行二次拟合来估计MA参数。
- ARMA模型估计:采用分步估计策略。首先利用 扩展(修正)Yule-Walker方程 估计AR部分参数,通过构建Toeplitz矩阵求解线性方程组;随后利用逆滤波技术分离残差,再对残差进行MA参数估计。
3. 功率谱密度分析
- 参数模型谱:基于估计出的AR/MA/ARMA系数和噪声方差,利用Z变换传递函数公式计算功率谱密度。
- 理论真值谱:根据设定的真实模型参数计算理论谱,作为算法性能评估的基准(Ground Truth)。
- 对比验证:支持将估计谱与理论谱在同一坐标系(dB/Hz)下叠加显示,直观评估估计的准确性。
系统逻辑与算法细节
本项目的核心逻辑封装在入口脚本中,依次执行以下三个主要仿真模块:
模块一:AR模型仿真
- 参数设定:定义二阶AR模型的真实系数与白噪声方差。
- 信号生成:调用信号生成函数,通过全极点滤波器产生AR仿真信号。
- 参数估计:计算信号的偏自相关函数,在内部通过Levinson-Durbin迭代算法求解Yule-Walker方程,得到估计系数与噪声方差。
- 结果分析:计算并对比理论PSD与估计PSD。
模块二:MA模型仿真
- 参数设定:定义二阶MA模型的真实系数。
- 信号生成:通过全零点滤波器产生MA仿真信号。
- 参数估计:使用Durbin两步法。首先拟合一个高阶AR模型(长自回归模型)来捕捉信号主要特征,然后将得到的高阶AR系数作为“观测数据”,再次进行模型拟合以提取MA参数。
- 结果分析:生成MA模型的谱估计结果并绘图。
模块三:ARMA模型仿真
- 参数设定:定义混合模型的AR部分系数(极点)和MA部分系数(零点)。
- 信号生成:使用极点-零点滤波器生成ARMA信号,并截取稳态数据。
- 参数估计:
-
AR部分:计算高阶自相关序列,构建修正的Yule-Walker矩阵方程(从滞后阶数 q+1 开始),通过矩阵除法求解AR系数。
-
MA部分:利用估计出的AR系数对原信号进行逆滤波,得到近似的纯MA过程,再重用Durbin法估计MA系数。
- 多维可视化:
-
时域波形:展示原始生成信号的一段样本。
-
自相关函数:绘制样本的自相关序列,观察信号统计特性。
-
频域对比:在对数坐标下绘制理论功率谱与估计功率谱,验证算法对混合模型的拟合能力。
关键函数说明
以下描述对应代码中实际实现的各个子函数逻辑:
- main:主程序入口,负责参数初始化、三个子模块的流程控制以及绘图窗口的创建。
- generate_process:通用的随机过程生成器。根据输入的模型类型(AR/MA/ARMA),构造对应的差分方程系数向量(a和b),通过滤波白噪声序列生成观测数据。
- estimate_ar_yw:AR参数估计器。核心包含一个显式的Levinson-Durbin递归循环,利用反射系数逐步更新预测误差能量和模型参数。
- estimate_ma_durbin:MA参数估计器。实现了Durbin算法逻辑,内部包含两次模型拟合过程:先拟合长AR,再由长AR拟合MA。
- estimate_arma:ARMA参数估计器。构建包含特定滞后自相关值的Toeplitz矩阵,解决ARMA模型中AR参数估计的非线性问题(利用高阶Yule-Walker方程),并结合逆滤波技术解耦AR和MA分量。
- calc_parametric_psd:功率谱计算引擎。接收模型系数(AR和MA部分),在单位圆上($z = e^{jomega}$)计算系统传递函数的模平方,结合噪声方差得到最终的功率谱密度数值。
- calc_theoretical_psd:理论谱计算接口。本质是对上述PSD计算引擎的封装,输入源为真实的预设参数。
使用方法
- 确保安装有MATLAB软件(代码仅依赖基础数学功能,无需特定工具箱)。
- 打开MATLAB,将工作路径切换至项目所在文件夹。
- 直接运行脚本文件。
- 程序将自动弹出三个图形窗口,分别展示AR、MA和ARMA模型的仿真结果,并在命令行窗口输出当前仿真进度的提示信息。
运行环境
- 软件版本:MATLAB R2016a及以上版本(建议)。
- 工具箱:无强制要求(代码内部实现了核心算法,不依赖Signal Processing Toolbox的高级函数,仅使用了基础的
filter、xcorr、randn 等函数)。