MATLAB实现IIR与FIR低通滤波器设计与比较

需积分: 0 4 下载量 41 浏览量 更新于2024-08-04 收藏 1MB DOCX 举报
"本实验是关于数字信号处理的MATLAB实践,主要任务是设计IIR和FIR低通滤波器,然后将设计的滤波器应用于特定信号以观察其效果。实验要求包括:设计满足特定性能指标的滤波器(如通带边界归一化频率、阻带边界归一化频率、阻带衰减和通带波纹),并使用MATLAB编写代码来实现这两个滤波器。实验中还涉及到了信号采样、频率分析以及滤波后的信号比较。" 在这个实验中,我们首先会遇到两个关键概念:无限 impulse response (IIR) 滤波器和有限 impulse response (FIR) 滤波器。IIR滤波器通常使用递归结构,利用过去和当前的输入样本以及过去的输出样本来计算当前输出,这使得它们能够用较少的系数实现较陡峭的滚降率。FIR滤波器则仅依赖于过去的输入样本,具有线性相位特性,并且可以精确控制其频率响应。 设计IIR滤波器时,我们使用了`butter`函数,这是一个MATLAB中的滤波器设计工具,它可以根据指定的性能参数(如wp、ws、Rp和Rs)来生成巴特沃斯滤波器的系数。`buttord`函数用于确定满足这些参数所需的滤波器阶数。`freqz`函数则用来绘制滤波器的频率响应。 对于FIR滤波器,我们关注的是窗函数法,通常使用汉明窗(Hamming window)来设计滤波器。在MATLAB中,我们首先计算窗函数的长度,然后利用这个窗口来设计滤波器系数。这里使用了一个简单的公式来计算滤波器长度,即过渡带宽等于汉明窗主瓣宽度。`filter`函数或`fftfilt`函数用于应用FIR滤波器到信号上。 实验中,信号S包含8Hz和21Hz的成分,采样频率为50Hz。采样频率的选择至关重要,因为根据奈奎斯特定理,采样频率必须至少是信号最高频率的两倍,以避免混叠现象。通过滤波器后,我们将原始信号与滤波信号进行比较,观察滤波器的效果。 在MATLAB代码中,`subplot`函数用于创建多图布局,便于同时显示输入信号和输出信号的幅度和相位。`plot`函数用于绘制时间序列和频率响应,`xlabel`和`ylabel`设置坐标轴标签,`gridon`添加网格线,`title`设定图形标题,而`fftfilt`函数提供了一种无损滤波方法。 这个实验涵盖了数字信号处理的核心概念,包括滤波器设计、信号采样、频率响应分析以及信号处理的MATLAB实现,是理解和应用数字信号处理理论的重要实践环节。