matlab的cheblord函数,【安富莱DSP教程】第39章 IIR滤波器的Matlab设计

article/2025/10/7 12:45:07

第39章

IIR滤波器的Matlab设计

本章节讲解IIR滤波器的Matlab设计,主要包括巴特沃斯滤波器,切比雪夫I型和II型滤波器以及椭圆滤波器。

39.1 巴特沃斯滤波器的设计

39.2 切比雪夫滤波器的设计

39.3 椭圆滤波器的设计

39.4 总结

39.1

巴特沃斯滤波器的设计

39.1.1butter函数

功能:用于设计Butterworth(巴特沃斯)滤波器

语法:[b, a] = butter(n, Wn);

说明:butter函数可以设计低通、带通、高通和带阻数字滤波器,其特性可以使通带内的幅度响应最大限度地平坦,但会损失截止频率处的下降斜度,使幅度响应衰减较慢。

l[b,a] = butter(n,Wn)可以设计截止频率为Wn的n阶低通butterworth滤波器,其中截止频率Wn应满足0Wn1,Wn=1相当于0.5fs(采样频率)。当Wn= [W1W2]时,butter函数产生一个2n阶的数字带通滤波器,其通带为W1

l[b,a] = butter(n,Wn,'ftype')可以设计高通或带阻滤波器。当ftype=high时,可设计截止频率为Wn的高通滤波器;当ftype=stop时,可设计带阻滤波器,此时Wn= [W1W2],阻带为W1

使用butter函数设计滤波器,可以使通带内的幅度响应最大地平坦,但会损失截止频率处的下降斜度。因此,butter函数主要用于设计通带平坦的数字滤波器。

39.1.2buttord函数

功能:用来选择Butterworth滤波器的阶数。

语法:[n, Wn] = buttord(WP, WS, RP, Rs);

说明:buttord函数可以在给定滤波器性能的情况下,选择Butterworth数字滤波器的最小阶数,其中WP和WS分别是通带和阻带的截止频率,其值为0Wp(或Ws)1,当该值为1时表示0.5fs(采样率)。RP和 Rs分别是通带和阻带区的波纹系数和衰减系数。

[n, Wn] = buttord(WP, WS, RP, Rs)可以得到高通、带通和带阻滤波器的最小阶数n。

当WP>WS时,为高通滤波器;当WP, WS为二元矢量时,若WPS,则为带通和带阻滤波器,此时Wn也为二元矢量。

利用buttord函数可得到Butterworth数字滤波器的最小阶数n,并使通带(0,WP)内的波纹系数小于RP,阻带(WS, 1)内衰减系数大于Rs。buttord函数还可以得到截止频率Wn,再利用butter函数可产生满足指定性能的滤波器。

使用butter函数设计数字滤波器,可以使通带内的幅度响应最大限度地平坦,但在截止频率附件幅度响应衰减慢。如果期望幅度响应下降斜度大,衰减快,可使用Elliptic(椭圆)或Chebyshev(切比雪夫)滤波器。

39.1.3巴特沃斯低通滤波器设计

下面我们通过一个实例来讲解巴特沃斯低通滤波器的设计。原始信号是由50Hz正弦波和200Hz的正弦波组成,将200Hz的正弦波当做噪声滤掉,下面通过函数butter设计一组低通滤波器系数,其阶数是2,截止频率为0.25(也就是125Hz),采样率1Kbps。Matlab运行代码如下:

fs=1000; %设置采样频率 1k

N=1024; %采样点数

n=0:N-1;

t=0:1/fs:1-1/fs; %时间序列

f=n*fs/N; %频率序列

x1=sin(2*pi*50*t); %信号

x2=sin(2*pi*200*t); %噪声

x=x1+x2; %信号混合

subplot(221);

plot(t,x); %绘制原始信号

xlabel('时间');

ylabel('幅值');

title('原始信号');

grid on;

subplot(222);

y=fft(x,N); %绘制原始信号的幅频响应

plot(f,abs(y));

xlabel('频率/Hz');

ylabel('振幅');

title('原始信号FFT');

grid on;

subplot(223);

Wc=2*125/fs; %设置截止频率125Hz

[b,a]=butter(2,Wc); %获取2阶IIR滤波系数

% y2=filter(b,a,x);

y2=filtfilt(b,a,x); %计算滤波后的波形y2

y3=fft(y2,N); %滤波后波形的幅频响应

plot(f,abs(y3));

xlabel('频率/Hz');

ylabel('振幅');

title('滤波后信号FFT');

grid on;

[H,F]=freqz(b,a,512);

subplot(224);

plot(F/pi,abs(H));

xlabel('归一化频率'); %绘制绝对幅频响应

ylabel('幅度');

Ps=sum(x1.^2); %信号的总功率

Pu=sum((y2-x1).^2); %剩余噪声的功率

SNR=10*log10(Ps/Pu); %信噪比

title(['Order=',int2str(2), ' SNR=',num2str(SNR)]);

grid on;

运算Malab结果如下:

a4c26d1e5885305701be709a3d33442f.png

从滤波的效果来看,2阶的IIR滤波器能够达到将近20的信噪比,比使用FIR需要更少的阶数。

39.1.4巴特沃斯高通滤波器设计

下面我们通过一个实例来讲解巴特沃斯高通滤波器的设计。原始信号是由50Hz正弦波和200Hz的正弦波组成,将50Hz的正弦波当做噪声滤掉,下面通过函数butter设计一组高通滤波器系数,其阶数是2,截止频率为0.25(也就是125Hz),采样率1Kbps。Matlab运行代码如下:

fs=1000; %设置采样频率 1k

N=1024; %采样点数

n=0:N-1;

t=0:1/fs:1-1/fs; %时间序列

f=n*fs/N; %频率序列


http://chatgpt.dhexx.cn/article/3nDWtcWe.shtml

相关文章

【STM32H7的DSP教程】第48章 STM32H7的中值滤波器实现,适合噪声和脉冲过滤(支持逐个数据的实时滤波)

完整版教程下载地址:http://www.armbbs.cn/forum.php?modviewthread&tid94547 第48章 STM32H7的中值滤波器实现,适合噪声和脉冲过滤(支持逐个数据的实时滤波) 本章节讲解中值滤波器实现,适用于噪声和脉冲…

【STM32F429的DSP教程】第49章 STM32F429的自适应滤波器实现,无需Matlab生成系数(支持实时滤波)

完整版教程下载地址:事隔五年之后,开启第2版DSP数字信号处理和CMSIS-NN神经网络教程,同步开启三代示波器,更至49章(2021-09-20) - STM32H7 - 硬汉嵌入式论坛 - Powered by Discuz!http://www.armbbs.cn/for…

【STM32F429的DSP教程】第25章 DSP变换运算-快速傅里叶变换原理(FFT)

完整版教程下载地址:http://www.armbbs.cn/forum.php?modviewthread&tid94547 第25章 DSP变换运算-快速傅里叶变换原理(FFT) 在数字信号处理中常常需要用到离散傅立叶变换(DFT),以获取信号的频域特征。尽管传统的DFT…

【STM32F429的DSP教程】第33章 STM32F429不限制点数FFT实现

完整版教程下载地址:http://www.armbbs.cn/forum.php?modviewthread&tid94547 第33章 STM32F429不限制点数FFT实现 本章主要讲解不限制点数FFT的实现。 目录 33.1 初学者重要提示 33.2 不限制点数FFT移植 33.2.1 移植FFT相关文件 33.2.2 添加路径…

【STM32H7的DSP教程】第16章 DSP功能函数-数据拷贝,数据填充和浮点转定点

完整版教程下载地址:http://www.armbbs.cn/forum.php?modviewthread&tid94547 第16章 DSP功能函数-数据拷贝,数据填充和浮点转定点 本期教程主要讲解功能函数中的数据拷贝,数据填充和浮点数转换为定点数。 目录 第16章 …

【STM32F407的DSP教程】第33章 STM32F407不限制点数FFT实现

完整版教程下载地址:http://www.armbbs.cn/forum.php?modviewthread&tid94547 第33章 STM32F407不限制点数FFT实现 本章主要讲解不限制点数FFT的实现。 目录 33.1 初学者重要提示 33.2 不限制点数FFT移植 33.2.1 移植FFT相关文件 33.2.2 添加路径…

【STM32H7的DSP教程】第3章 Matlab简易使用之基础操作

完整版教程下载地址:http://www.armbbs.cn/forum.php?modviewthread&tid94547 第3章 Matlab简易使用之基础操作 本期教程开始讲解Matlab的简易使用之基础操作,作为学习DSP的必备软件,掌握简单的Matlab操作是必须的。 目录 第3章 …

[经验] 【安富莱——DSP教程】第7章 DSP定点数和浮点数(重要)

http://bbs.elecfans.com/jishu_486119_1_1.html 7.1 定点数和浮点数概念 如果小数点的位置事先已有约定,不再改变,此类数称为“定点数”。相比之下,如果小数点的位置可变,则称为“浮点数”(定点数的本质是小数…

【STM32F407的DSP教程】第21章 DSP矩阵运算-加法,减法和逆矩阵

完整版教程下载地址:http://www.armbbs.cn/forum.php?modviewthread&tid94547 第21章 DSP矩阵运算-加法,减法和逆矩阵 本期教程主要讲解矩阵运算中的初始化,加法,逆矩阵和减法。 目录 第21章 DSP矩阵运算-加…

【STM32H7的DSP教程】第17章 DSP功能函数-定点数互转

完整版教程下载地址:http://www.armbbs.cn/forum.php?modviewthread&tid94547 第17章 DSP功能函数-定点数互转 本期教程主要讲解功能函数中的Q7,Q15和Q31分别向其它类型数据转换。 目录 第17章 DSP功能函数-定点数互转 17.1 初学者…

【STM32F407的DSP教程】第19章 DSP复数运算-共轭,点乘和求模

完整版教程下载地址:http://www.armbbs.cn/forum.php?modviewthread&tid94547 第19章 DSP复数运算-共轭,点乘和求模 本期教程主要讲解复数运算中的共轭,点乘和模的求解。 目录 第19章 DSP复数运算-共轭,点乘…

【STM32F407的DSP教程】第1章 初学数字信号处理准备工作

完整版教程下载地址:http://www.armbbs.cn/forum.php?modviewthread&tid94547 第1章 初学数字信号处理准备工作 本期教程开始带领大家学习DSP教程,学习前首先要搞明白一个概念,DSP有两层含义,一个是DSP芯片也就是Digital…

【STM32H7的DSP教程】第11章 DSP基础函数-绝对值,求和,乘法和点乘

完整版教程下载地址:http://www.armbbs.cn/forum.php?modviewthread&tid94547 第11章 DSP基础函数-绝对值,求和,乘法和点乘 本期教程开始学习ARM官方的DSP库,这里我们先从基本数学函数开始。本期教程主要讲绝对值&am…

c++中ifstream和ofstream的详细用法

TITLE:因为不经常用这两个操作,每次用都得找,网上的文章良莠不齐,有时候不容易找到合适的,故将其记录下来,供以后使用方便。 1. fstream fstream提供了三个类,用来实现c对文件的操作。&#x…

C++文件读取ifstream

使用ifstream流来读取文件 说明: 1.ifstream类的对象创建成功的时候会返回非空值,借此判断是否创建文件对象成功 2.ifstream有个函数eof()用来判断文件是否读到尾部,没读到尾部返回false,否则返回true。 若尾部有回车,那么最后一…

C++中读取文件ifstream、ofstream

现在&#xff0c;我想对一个utf-8的json文件进行读写操作。在此过程中&#xff0c;遇到了一些问题。 头文件的添加&#xff1a; #include <iostream> #include <cstring> #include <fstream> #include <sstream> &#xff08;一&#xff09;ifstrea…

C++ 文件读写操作std::ofstream和std::ifstream

文章目录 前言一、文件操作的介绍二、使用步骤1.读文件操作&#xff08;std::ifstream&#xff09;2.写文件操作&#xff08;std::ofstream&#xff09; 前言 例如&#xff1a;随着人工智能的不断发展&#xff0c;机器学习这门技术也越来越重要&#xff0c;很多人都开启了学习…

C++ 中 ifstream读取txt文件内容

文章目录 头文件把txt文件放在当前目录下1、逐行读入文件2、逐个字符读入&#xff08;忽略空格与回车&#xff09;3、逐个字符读入&#xff08;包括空格与回车&#xff09;示例代码 头文件 #include <iostream> #include <fstream> #include <cassert> #inc…

【C++11】文件操作ifstreamofstream

文章目录 文件输入流创建ifstream对象读取文件数据 文件输出流文件流的打开模式创建ofstream对象写入文件数据 文件输入输出示例 文件输入流 创建ifstream对象 使用ifstream类创建ifstream对象&#xff0c;所获取的对象能够像cin一样使用>>运算符从所绑定文件中读取数据…

C++ ifstream eof()的使用

C ifstream eof() 的使用 eof() 的使用方法1 ifstream.eof() 读到文件结束符时返回true。 大家可能有一个误区&#xff0c;认为读到文件结束符就是读到文件的最后一个字符。 其实不然&#xff0c;文件结束符是文件最后一个字符的下一个字符0xFF&#xff0c;eof() 读到文件结束…