1.巴特沃斯模拟滤波器(低通,高通,带通,带阻)设计-MATLAB实现

article/2025/10/22 18:21:36

本文是模拟滤波器设计,如果需要了解数字滤波器的内容,可以按顺序看我写的另外两篇博客,如下:

2.MATLAB实现无限脉冲响应数字滤波器(IIR)

3.MATLAB实现有限脉冲响应数字滤波器(FIR)

目录

  • 1. 基础知识介绍
  • 2. 函数介绍
      • 2.1 buttord - 求解滤波器的阶数N和3dB截止频率wc
      • 2.2 butter - 求解N阶滤波器的具体参数B和A,求解完B和A后滤波器就设计完成了。
      • 2.3 filter - 滤波函数
  • 3. 代码实现:
      • (1)低通滤波器:
      • (2)高通滤波器:
      • (3)带通滤波器:
      • (4)带阻滤波器:

1. 基础知识介绍

我们首先明确一个知识(这个非常重要):

某正弦信号,频率为50Hz
这意味着 信号的模拟频率 f f f= 50 (Hz),注意它的单位是Hz

信号的表达式为
y = s i n ( 2 π f t ) = s i n ( 2 π ∗ 50 t ) = s i n ( 100 π t ) y = sin(2\pi ft)=sin(2\pi *50 t)=sin(100\pi t) y=sin(2πft)=sin(2π50t)=sin(100πt)

由于信号也可以表示为 y = s i n ( Ω t ) y = sin(\Omega t) y=sin(Ωt)的形式,所以这里
Ω = 2 π f = 100 π \Omega=2\pi f=100\pi Ω=2πf=100π

这里的 Ω \Omega Ω模拟角频率它的单位是rad/s

注意模拟角频率 Ω \Omega Ω模拟频率 f f f的关系 Ω = 2 π f \Omega=2\pi f Ω=2πf

2. 函数介绍

首先介绍一些用到的MATLAB函数

2.1 buttord - 求解滤波器的阶数N和3dB截止频率wc

[N,wc] = buttord(wp, ws, Rp, As, ‘s’)  

输入参数如下:

通带边界模拟频率wp、阻带边界模拟频率ws模拟角频率单位是rad/s

通带最大衰减Rp、阻带最小衰减As单位是dB

‘s’指的就是模拟滤波器,设计数字滤波器时就没有’s’这个参数了。

2.2 butter - 求解N阶滤波器的具体参数B和A,求解完B和A后滤波器就设计完成了。

[B,A] = butter(N, wc, ‘ftype’, ‘s’)  - 模拟滤波器设计

输入参数如下:

N - 滤波器阶数

wc - 3dB截止模拟频率(单位rad/s,N和wc都是用buttord函数计算出来的)

ftype - 滤波器类型‘’:
(1)当输入wc为一维向量时:
默认情况下设计的低通滤波器,设计高通滤波器的话令ftype=high

(2)当输入wc为二维向量[wcl,wcu]时:
默认情况下设计的带通滤波器,设计带阻滤波器的话令ftype=stop

2.3 filter - 滤波函数

y = filter(B,A,x)

这个就是滤波函数了,

x是输入的有噪声的信号,

B,A就是设计好的滤波器参数

得到的输出y就是滤波后的信号了。

3. 代码实现:

(1)低通滤波器:

例: 设计通带截止频率5kHz,通带衰减2dB,阻带截止频率12kHz,阻带衰减30dB的巴特沃斯低通滤波器

由题可知,设计的是模拟滤波器,所以用到下面三个函数:

[N,wc] = buttord(wp, ws, Rp, As, ‘s’)
[B,A] = butter(N, wc, ‘ftype’, ‘s’)
y = filter(B,A,x)

划重点 ! ! !

模拟滤波器的频率都是模拟角频率 Ω \Omega Ω ,它和频率 f f f 的关系
Ω = 2 π f \Omega = 2\pi f Ω=2πf

所以这里

wp = 2 ∗ p i ∗ 5000 2*pi*5000 2pi5000,ws = 2 ∗ p i ∗ 12000 2*pi*12000 2pi12000,Rp = 2, As = 30

代码如下:


wp = 2 * pi * 5000;
ws = 2 * pi * 12000;
Rp = 2;
As = 30;[N, wc] = buttord(wp, ws, Rp, As, 's');
[B, A] = butter(N, wc, 's');

上面这些代码就设计好了滤波器

如果有输入噪声信号x的话,调用y = filter(B,A,x),得到的y就是滤波后的信号了。

下面是绘图部分

为了让滤波器的结果得到更形象的表示,我们可以画出来它的幅频特性曲线,代码如下:
其中,我们使用了freqs这个函数,

h = freqs(B,A,wk)

它是用来计算当频率为wk时,对应的频率响应h的大小,主要是用来画图的。

绘图代码如下:


f = 0 : 10 : 14000;%取点,从0-14000,每隔10取一个点
w = 2 * pi * f;%注意模拟滤波器用的频率都是模拟角频率,要乘上2pi的Hk = freqs(B,A,w);%对于取的每个点,求该处的频率响应大小%画图
figure
plot(f/1000, 20 * log10(abs(Hk)));%横坐标单位是kHz,纵坐标单位是dB,
grid on;
%设置横纵坐标标签
xlabel('f/kHz');
ylabel('-A(f)/dB');
%设置横纵坐标轴范围
axis([0, 14, -40, 5]);

绘图结果如下:

在这里插入图片描述

(2)高通滤波器:

高通滤波器与低通几乎完全一样,只要注意
[B,A] = butter(N, wc, ‘ftype’, ‘s’)中的 ftype=high

例: 设计通带截止频率4kHz,通带衰减0.1dB,阻带截止频率1kHz,阻带衰减40dB的巴特沃斯高通滤波器

代码如下:


wp = 2 * pi * 4000;
ws = 2 * pi * 1000;
Rp = 0.1;
As = 40;[N, wc] = buttord(wp, ws, Rp, As, 's');
[B, A] = butter(N, wc,'high', 's');%注意这个'high'

高通滤波器设计完成了

如果有输入噪声信号x的话,调用 y = filter(B,A,x),得到的y就是滤波后的信号了。

接着我们画出高通滤波器的幅频特性曲线


f = 0 : 10 : 14000;%取点,从0-14000,每隔10取一个点
w = 2 * pi * f;%注意模拟滤波器用的频率都是模拟角频率,要乘上2pi的Hk = freqs(B,A,w);%对于取的每个点,求该处的频率响应大小%画图
figure
plot(f/1000, 20 * log10(abs(Hk)));%横坐标单位是kHz,纵坐标单位是dB,
grid on;
%设置横纵坐标标签
xlabel('f/kHz');
ylabel('-A(f)/dB');
%设置横纵坐标轴范围
axis([0, 14, -60, 5]);

曲线图如下:

在这里插入图片描述

(3)带通滤波器:

例: 设计巴特沃斯带通滤波器,通带上下边界频率分别为4kHz和7kHz,通带衰减1dB,阻带上下边界频率2kHz和9kHz,阻带衰减20dB。

滤波器设计代码如下:

%带通
wp = 2 * pi * [4000, 7000];
ws = 2 * pi * [2000,9000];
Rp = 1;
As = 20;[N, wc] = buttord(wp, ws, Rp, As, 's');%此时输入wp和ws都是二维的,输出wc也是两维的
[B, A] = butter(N, wc,'s');

带通模拟滤波器设计完成了

如果有输入噪声信号x的话,调用y = filter(B,A,x),得到的y就是滤波后的信号了。

接着我们画出带通滤波器的幅频特性曲线,如下:


f = 0 : 10 : 14000;%取点,从0-14000,每隔10取一个点
w = 2 * pi * f;%注意模拟滤波器用的频率都是模拟角频率,要乘上2pi的Hk = freqs(B,A,w);%对于取的每个点,求该处的频率响应大小%画图
figure
plot(f/1000, 20 * log10(abs(Hk)));%横坐标单位是kHz,纵坐标单位是dB,
grid on;
%设置横纵坐标标签
xlabel('f/kHz');
ylabel('-A(f)/dB');
%设置横纵坐标轴范围
axis([0, 14, -60, 5]);

曲线图如下:
在这里插入图片描述

(4)带阻滤波器:

例: 设计巴特沃斯带阻滤波器,通带上下边界频率分别为2kHz和9kHz,通带衰减1dB,阻带上下边界频率4kHz和7kHz,阻带衰减20dB。


%带阻
wp = 2 * pi * [2000, 9000];
ws = 2 * pi * [4000,7000];
Rp = 1;
As = 20;[N, wc] = buttord(wp, ws, Rp, As, 's');%此时输入wp和ws都是二维的,输出wc也是两维的
[B, A] = butter(N, wc,'stop','s');带阻模拟滤波器设计完成了,如果有输入噪声信号x的话,调用
y = filter(B,A,x),得到的y就是滤波后的信号了。

接着我们画出带阻滤波器的幅频特性曲线,代码如下:


f = 0 : 10 : 14000;%取点,从0-14000,每隔10取一个点
w = 2 * pi * f;%注意模拟滤波器用的频率都是模拟角频率,要乘上2pi的Hk = freqs(B,A,w);%对于取的每个点,求该处的频率响应得下%画图
figure
plot(f/1000, 20 * log10(abs(Hk)));%横坐标单位是kHz,纵坐标单位是dB,
grid on;
%设置横纵坐标标签
xlabel('f/kHz');
ylabel('-A(f)/dB');
%设置横纵坐标轴范围
axis([0, 14, -100, 5]);

结果如下:

在这里插入图片描述


http://chatgpt.dhexx.cn/article/UUiPXxmt.shtml

相关文章

matlab设计模拟带通滤波器

简单记录下在matlab上如何设计出模拟的带通滤波器,包括:巴特沃斯滤波器、切比雪夫I型滤波器、切比雪夫II型滤波器、椭圆型滤波器。 代码如下: %设计带通滤波器 %巴特沃斯、切比雪夫I型、切比雪夫II型、椭圆型滤波器clear all;%wp和ws分别是通…

学习如何在matlab用带通滤波器进行滤波

如何在matlab用带通滤波器进行滤波? 主要内容是在知乎上看到的一篇文章 链接: https://zhuanlan.zhihu.com/p/152647067?from_voters_pagetrue.可以直接看这篇文章。 以带通滤波器——巴特沃斯滤波器为例 matlab给出的代码如下:[n,Wn] buttord(Wp,W…

matlab设计低通滤波器

matlab设计低通滤波器 文章目录 matlab设计低通滤波器 前言一、什么是滤波器?二、滤波器的技术指标三、滤波器的分类四、巴特沃斯低通滤波器设计1.输入信号设置2.设计滤波器3.滤波器输出信号 五、采用ADI公司的滤波器向导设计滤波器 前言 例如:随着人工…

matlab实现低通、高通、带通、带阻滤波

MATLAB滤波常用函数 模拟滤波器阶数选择函数 buttord 功能:计算butterworth模拟滤波器的阶数 调用格式: [n,Wn]buttord(Wp,Ws,Rp,Rs,s); % 参数中的n是求出模拟滤波器最小的阶数,Wn是等效低通滤波器的截止频率;Wp和Ws分别是通…

matlab制作数字滤波器(带通滤波器)

一、目的 使用matlab中自带的工具fdatool制作带通滤波器,对数据进行滤波。 二、过程 如图,使用该工具制作了一个带通滤波器,频率为130-180Hz,使用汉明窗截短,滤波器的阶数为250。 滤波器的冲击响应如下图 将生成的滤…

matlab实现带通滤波

以带通滤波器——巴特沃斯滤波器为例 matlab给出的代码如下:[n,Wn] buttord(Wp,Ws,Rp,Rs) 首先要先理解一个带通滤波器的幅频特性图中,分为通带、阻带、过渡带三大部分。 通带截止频率和阻带截止频率对这三部分进行划分,二者之间的部分即…

PTAM算法流程介绍

相关工作:1、摄像机校正 2、特征提取(FAST角点特征、扭曲图像的直线特征优化) 3、极线几何与极线搜索 4、RANSAC(随机采样一致)及N点算法(主要围绕5点算法) 5、Bundle Adjustment(光…

智能优化算法、智能控制算法、多目标优化、MPPT、无功优化

一、主题 matlab,python等智能优化算法、智能控制算法、多目标优化、MPPT、无功优化、机器学习类程序,可提供指导。 二、主要领域 开关电源、最大功率点跟踪(恒电压法、电导增量法、爬山法、智能算法等)、并网逆变器控制、多目…

【图】普利姆算法(prim算法)基本思想

一、prim算法基本思想: 假设G=(V,E)是连通的,TE是G上最小生成树中边的集合。算法从U={u0}(u0∈V)、TE={}开始。重复执行下列操作: 在所有u∈U,v∈V&#xf…

MP算法与OMP算法讲解一

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/ice110956/article/details/18403789 稀疏编码的一般最优化公式为: 其中的零范数为非…

MP算法和OMP算法介绍

正交匹配追踪算法是90年代初提出来的,主要目的是将信号在完备的字典库上进行稀疏分解。 1. 信号的稀疏表示(sparse representation of signals) 预设一个过完备字典矩阵,矩阵每列表示一种原型信号的原子。可将一个信号y表示成这些原子的稀疏线性组合。即 y = Dx ,或者…

单相/三相光伏发电并网/离网simlink仿真(MPPT)或是大功率VSC 最大功率点追踪算法(MPPT)仿真模型

单相/三相光伏发电并网/离网simlink仿真(MPPT)或是大功率VSC 最大功率点追踪算法(MPPT)仿真模型, 有基于扰动观察法(P&O),恒压算法,电导增量法,变步长扰动…

光伏逆变simlink仿真(MPPT) 最大功率点追踪算法(MPPT)仿真模型,本设计基于扰动观察法

光伏逆变simlink仿真(MPPT) 最大功率点追踪算法(MPPT)仿真模型,本设计基于扰动观察法(P&O)最大功率点跟踪算法追踪光伏电池的发电曲线,实现最大功率点追踪输出的仿真模型。 目前…

Matlab|基于粒子群优化算法及鲁棒MPPT控制器提高光伏并网的效率

📋📋📋本文目录如下:⛳️⛳️⛳️ 目录 1 光伏特性 2 动机 3 基于粒子群优化的MPPT算法 4 运行结果 5 结论 6 Simulink&Matlab代码实现 1 光伏特性 光伏电池特性是非线性的,其输出功率随辐照度和温度的变化而变化。…

OMP与MP算法流程与代码

目录 1. 算法描述2. 部分公式推导3. 算法代码3.1 OMP算法代码3.2 MP算法代码 4. 例子 本文算法描述主要来自下面书籍的3.1节。 [1] 【以色列】Michael Elad著. 曹铁勇等翻.《稀疏与冗余表示–理论及其在信号与图像处理中的应用》.国防工业出版社. 2015. 1. 算法描述 (1) 任务&a…

并行计算(MPI + OpenMP)

文章目录 并行计算MPI(进程级并行)基本结构数据类型点对点通信阻塞非阻塞非连续数据打包 聚合通信Communicator & Cartisen Grid OpenMP(线程级并行)简介基本制导语句worksharing constructSectionsSingleFor 临界区 & 原…

算法5:普里姆算法

目录 1. 应用场景-修路问题2. 最小生成树3. 普里姆算法介绍4. 代码实现 1. 应用场景-修路问题 有7个村庄(A, B, C, D, E, F, G) ,现在需要修路把7个村庄连通各个村庄的距离用边线表示(权) ,比如 A – B 距离 5公里问:如何修路保证各个村庄都能…

使用粒子群PSO算法实现MPPT-M语言仿真

在Octave以及Matlab上,仿真了使用粒子群PSO实现MPPT的过程。粒子数为4。太阳能电池为4个串联。 2019年4月24日更新matlab代码。 目录 1.1 先绘制出PV曲线(Octave) 1.2 PSO算法(Octave) 2.1 绘制PV曲线&#xff08…

MPP概述

什么是MPP MPP (Massively Parallel Processing),即大规模并行处理,在数据库非共享集群(传统的单节点不属于集群,双机热备或Oracle RAC等,均是基于共享存储的)中,每个节点都有独立的磁盘存储系…

粒子群算法(PSO)光伏发电 MPPT实现多峰值寻优,阴影遮蔽光伏发电算法 使用s函数编写粒子群算法,阴影遮蔽,实现多峰值寻优

粒子群算法(PSO)光伏发电 MPPT实现多峰值寻优,阴影遮蔽光伏发电算法 使用s函数编写粒子群算法,阴影遮蔽,实现多峰值寻优,解决经典mppt算法会形成局部最优的问题,追踪到最大峰值功率输出。 粒子群…