Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >1.巴特沃斯模拟滤波器(低通,高通,带通,带阻)设计-MATLAB实现

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

作者头像
全栈程序员站长
发布于 2022-08-29 02:17:29
发布于 2022-08-29 02:17:29
8K02
代码可运行
举报
运行总次数:2
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

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

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

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

目录

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[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后滤波器就设计完成了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[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 – 滤波函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
y = filter(B,A,x)

这个就是滤波函数了,

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

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

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

3. 代码实现:

(1)低通滤波器:

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[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 2∗pi∗5000,ws = 2 ∗ p i ∗ 12000 2*pi*12000 2∗pi∗12000,Rp = 2, As = 30

代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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这个函数,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
h = freqs(B,A,wk)

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

绘图代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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的巴特沃斯高通滤波器

代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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就是滤波后的信号了。

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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。

滤波器设计代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%带通
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就是滤波后的信号了。

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%带阻
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就是滤波后的信号了。

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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]);

结果如下:

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/145891.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
呜呜祖啦滤波器FPGA实现
大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分。大侠可以关注FPGA技术江湖,在“闯荡江湖”、"行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢。
FPGA技术江湖
2020/12/29
7540
呜呜祖啦滤波器FPGA实现
【DSP教程】第43章 IIR滤波器的Matlab设计
完整版教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=94547 第43章 IIR滤波器的Matlab设计 本章节讲解II
Simon223
2021/08/18
2.1K0
【DSP教程】第43章       IIR滤波器的Matlab设计
matlab设计模拟带通滤波器
简单记录下在matlab上如何设计出模拟的带通滤波器,包括:巴特沃斯滤波器、切比雪夫I型滤波器、切比雪夫II型滤波器、椭圆型滤波器。 代码如下:
全栈程序员站长
2022/08/19
1.2K0
matlab设计模拟带通滤波器
IIR数字滤波器设计(数字信号处理)
2.掌握IIR数字滤波器的MATLAB实现方法,会调用ellipord()和ellip() 
Fivecc
2022/11/21
1.6K0
IIR数字滤波器设计(数字信号处理)
基于MATLAB的数字信号处理(4) IIR数字滤波器设计及软件实现
设计IIR数字滤波器一般采用间接法(脉冲响应不变法和双线性变换法),应用最广泛的是双线性变换法。
叶庭云
2021/12/01
8.4K0
基于MATLAB的数字信号处理(4)    IIR数字滤波器设计及软件实现
MATLAB实现数字滤波器的直接设计
一、实验目的 1. 熟悉并会使用实验中用到的MATLAB 函数 2. 掌握用MATLAB 函数直接设计数字滤波器的编程方法 二、实验原理 设计IIR 滤波器的基本方法有两种途径: 途经1:首先设计模拟低通滤波器,再在时域实现滤波器的变换得到我们期望的类型,最后 再转换到相应类型的数字滤波器。 途经2:首先设计模拟低通滤波器,再转换为数字低通滤波器,最后实行频带变换将滤波器 转换到我们期望的类型的数字滤波器。
timerring
2022/07/20
4750
MATLAB实现数字滤波器的直接设计
基于Matlab的FIR滤波器设计与实现
前面一篇文章介绍了通过FDATool工具箱实现滤波器的设计,见“基于Matlab中FDATool工具箱的滤波器设计及相关文件的生成”,这里通过几个例子说明采用Matlab语言设计FIR滤波器的过程。
AIHGF
2019/02/18
2.2K0
带通滤波器电路图大全(三款带通滤波器电路设计原理图详解)「建议收藏」
传统的带通滤波器设计方法中涉及了很多复杂的理论分析和计算。针对上述缺点,介绍一种使用EDA软件进行带通滤波器的设计方案,详细阐述了使用FilterPro软件进行有源带通滤波器电路的设计步骤,然后给出了在Proteus中对所设计的滤波器进行仿真分析和测试的方法。测试结果表明,使用该方法设计的带通滤波器具有性能稳定。设计难度小等优点,也为滤波器的设计提供了一个新的思路。
全栈程序员站长
2022/06/26
13.3K0
带通滤波器电路图大全(三款带通滤波器电路设计原理图详解)「建议收藏」
常用滤波器设计之低通滤波器、高通滤波器、带通滤波器、带阻滤波器
使用说明:将下列代码幅值然后以m文件保存,文件名要与函数名相同,这里函数名:lowp。
全栈程序员站长
2022/09/05
2K0
常用滤波器设计之低通滤波器、高通滤波器、带通滤波器、带阻滤波器
二阶带通滤波器电路设计
(2)结合所设计的电路图说明该电路的设计思路和过程,通过计算得到该电路的理论截至频率值,计算误差。 设计思路: 需要满足题目要求的通带增益0dB,3dB截至频率20Hz~20kHz,则需要构造二阶带通滤波器。二阶带通滤波器由一个VCVS式二阶低通滤波器和一个VCVS式二阶高通滤波器构成,二阶低通滤波器确定上限3dB截止频率为20kHz,二阶高通滤波器决定下限3dB截止频率为20Hz。 设计过程: 由查表法可以分别确定出低通滤波器和高通滤波器的各元器件值如下图: 二阶低通滤波器查表:
全栈程序员站长
2022/08/15
2.7K0
二阶带通滤波器电路设计
matlab实现不同窗滤波器示例
在Matlab中使用汉明窗设计低通滤波器可以通过fir1函数实现。汉明窗通常用于设计滤波器,可以提供更突出的频率特性。
FPGA开源工作室
2024/03/02
4040
matlab实现不同窗滤波器示例
【DSP教程】第36章 FIR滤波器的Matlab设计(含低通,高通,带通和带阻)
完整版教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=94547 第36章 FIR滤波器的Matlab设计(含低通,高通,
Simon223
2021/07/19
3.9K0
【DSP教程】第36章       FIR滤波器的Matlab设计(含低通,高通,带通和带阻)
基于MATLAB的数字信号处理(5) FIR数字滤波器设计及软件实现
MATLAB函数 fir1 和 fftfilt 的功能及其调用格式可以用 help 命令查阅;
叶庭云
2021/12/01
8.9K0
基于MATLAB的数字信号处理(5)    FIR数字滤波器设计及软件实现
带通滤波器幅频特性曲线图_滤波器和对讲机技术解析!「建议收藏」
滤波器是一种选频装置,可以使对讲机信号中特定的频率成分通过,而极大地衰减其它频率成分。但是关于滤波器是什么,估计非专业人士肯定是一头雾水,今天小编就整理了一些滤波器的知识,供大家参考:
全栈程序员站长
2022/09/02
2K0
带通滤波器幅频特性曲线图_滤波器和对讲机技术解析!「建议收藏」
Matlab数字滤波器设计实践—FIR
在理想情况下,低通滤波器使信号中低于指定截止频率 ωc 的所有频率分量保持不变,并拒绝高于 ωc 的所有分量。由于实现理想低通滤波器所需的脉冲响应是无限长的,因此无法设计出理想的 FIR 低通滤波器。理想脉冲响应的有限长度逼近会导致滤波器的通带 (ω<ωc) 和阻带 (ω>ωc) 中都出现波纹,并导致通带和阻带之间的过渡带宽度非零。 当用有限脉冲响应逼近时,通带/阻带波纹和过渡带宽度都是不希望出现的,且不可避免地与理想低通滤波器存在偏差。下图说明了这些偏差:
FPGA开源工作室
2021/08/26
1.7K0
matlab理想低通滤波器代码_matlab简单低通滤波器
设低通滤波器通带截止频率为ωp=0.2π,阻带截止频率为ωs=0.4π,通带波纹Ag=0.5dB,最小阻带衰减Ar=50dB。
全栈程序员站长
2022/11/02
1K0
方程推导:二阶有源带通滤波器设计!(下载:教程+原理图+视频+代码)
对于微弱的信号的处理方式一般是:放大和滤波,这个过程中就涉及到放大电路的选取、滤波器的选择以及偏置电路的设计。本例以实例的方式讲解并附带参数计算、仿真、实物测试三个环节。
全栈程序员站长
2022/06/26
4.7K0
方程推导:二阶有源带通滤波器设计!(下载:教程+原理图+视频+代码)
MATLAB函数fir1「建议收藏」
数字角频率w、模拟角频率Ω之间的关系为 w=Ω/Fs,所以 w = 2*pi*f/Fs ,f为模拟频率;
全栈程序员站长
2022/09/13
2K0
MATLAB函数fir1「建议收藏」
带通滤波器幅频特性曲线图_滤波器知识,你所要的,都在这里
凡是可以使信号中特定的频率成分通过,而极大地衰减或抑制其他频率成分的装置或系统都称之为滤波器,相当于频率“筛子”。
全栈程序员站长
2022/09/05
5.1K0
MATLAB语音信号处理「建议收藏」
数字信号处理课设,我们使用MATLAB对语音信号进行了一系列处理,并将其所有功能集中于下图界面中:
全栈程序员站长
2022/09/01
4.1K0
MATLAB语音信号处理「建议收藏」
推荐阅读
相关推荐
呜呜祖啦滤波器FPGA实现
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验