数字 一阶低通滤波器 详细分析

article/2025/10/19 6:44:44

事件的起因是下图1,朋友偶然说到一阶低通滤波器,借此来详细介绍一阶低通滤波器的原理,并附上matlab仿真程序代码。图1中的一阶低通数字滤波器的公式为Eq(1):

y(n) = q*x(n) + (1-q)*y(n-1)    Eq(1)

其中,y(n)表示当前的输出,x(n)表示当前的输入,y(n-1)表示上一次的输出(图1中的符号不标准,因为一般时域用小写,频域或Z域用大写)。Eq(1)为差分方程,在分析离散系统时常用差分方程,而求解差分方程通常在z域实现,z变换使问题分析变得简单。这是一个IIR滤波器,那什么是FIR滤波器?什么是IIR滤波器呢?FIR滤波器是有限输入有限输出,换句话说当输入为0时输出也为0,系统无反馈;而IIR滤波器在输入为0时也可以有输出,由于增加了反馈回路,系统有不稳定发散的可能,因此IIR的分析要比FIR复杂一点。

                                                                            图1

我们将公式Eq(1)进行z变换得到z域传递函数。见Eq(2),注意其中z域的大写,我们要符合规范。根据Eq(2),系统具有一个极点z=1-q和一个零点z=0,我们这里关心的是极点。当极点处于z域单位圆内时,系统是稳定的,否则系统为不稳定系统会发散。单位圆是个重要的概念,z域的单位圆等同于s域的虚轴向左卷绕成z域的单位圆(s域中极点处于虚轴左边系统稳定)。分析z域的幅频响应(IIR的相位非线性这里不表)是在单位圆上进行的,z=r*exp(jw),单位圆上模值为1,所以z=exp(jw)(e的j*w次幂),根据欧拉公式exp(jw) = cos(w)+j*sin(w),我们得到Eq(3)。我们可以借助matlab来方便的求出H(w)的幅频响应,后面会给出代码,我们先来看结果见图2.

 

当q和采样时间的参数和图1保持一致时(q=0.0565 fs=3.333k即300us),幅频响应见图2,在横坐标为30hz时的幅值为0.708约等于0.707(-3dB点),我们简单分析一下图2,一阶低通滤波器的通带。。。。额。。图中看着比较窄,而且不平坦和理想一阶低通滤波器相比差距明显,但是对于高频干扰抑制效果明显,而且简单易实现,很多单片机应用中就会使用此滤波器。

                                                                图2 

 图5是仿真的时域结果,其中黑色线是理想信号,红色线是带躁信号,蓝色线是去噪后的信号,由于使用一阶低通滤波器后的信号波形和理想波形比较接近,所以图3中识别的不是很清晰。图4是结果局部示意图,这样可以清晰地看到理想信号、滤波前的带躁信号和滤波后的“干净”信号的时域波形情况。

                                                                                 图3 

                                                                                      图4 

代码:

%名称:数字一阶低通滤波器clc;
clear;
close all;t=0.0003;               %采样周期为300us
fs = 1/t;               %采样频率
w = -3.14:0.001:3.14;   %横坐标分辨率,z域单位圆中w为+-pi
q=0.0565;               %系数
f = (q*cos(w)+q*1i*sin(w))./(cos(w)-(1-q)+1i*sin(w));%传递函数
am=abs(f);              %求幅值
w=w*(fs/2/pi);          %z域w和采样频率之间的换算
plot(w,am);             %答应幅频响应曲线
xlabel('Frequency(Hz)','fontsize',17);
ylabel('Amplitude','fontsize',17);%%%%%%%%信号处理
tt = 0:0.0003:25;
y_ideal = sin(0.5*tt);          %理想信号
y_noise = awgn(y_ideal,35);     %带噪信号
y_proce = y_noise;               %去燥后的信号n=length(y_proce);
for i=2:ny_proce(i) = q *y_noise(i) + (1-q)*y_proce(i-1);
end
figure(2);
plot(tt,y_noise,'r');hold on;
plot(tt,y_ideal,'k','lineWidth',2); hold on;
plot(tt,y_proce,'b'); hold on;
xlabel('Time(s)');
ylabel('Amp(v)');

 


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

相关文章

【滤波器学习笔记】一阶RC低通滤波

一阶RC低通滤波 从模拟到数字 本文整理自网络、《匠人手记》等书籍文章 模拟电路低通滤波时域、频域软件低通滤波 典型电路 图1 典型RC电路 直流、交流、脉冲信号都可以用它 时域 电容电流: Icdqdtd(C∙Uo)dtCdUodt 基尔霍夫电压定律得: UiRCdUo…

一阶低通数字滤波

一阶低通滤波算法: 3、 一阶低通滤波优缺点 一阶低通滤波数学意义:一阶低通滤波法采用本次采样值与上次滤波输出值进行加权,得到有效滤波值,使得输出对输入有反馈作用。 优缺点:滤波系数越小,滤波结果越平稳…

MATLAB—FIR数字滤波器设计

目录: 1 FIR滤波器的原理2 FIR滤波器的特点2.1 相位特性2.1.1 偶对称2.1.2 奇对称 2.2 幅度特性 3 几种滤波器函数3.1 fir1()3.2 fir2()3.3 kaiserord()3.4 firpm() 4 仿真实例4.1 代码4.2 仿真分析 本文是基于MATLAB的数字滤波器设计,所有数据基于计算机…

窗函数法设计FIR中,如何选择窗函数和阶数N

在用窗函数法设计FIR滤波器时,给出了滤波器要求的具体指标,包括通带频率fp、阻带频率fs、通带波纹Rp和阻带衰减As等,有了这些指标后,是否什么窗函数都可以选择呢?答案是否定的。那么怎么选择窗函数呢?在本小…

一阶RC低通滤波器(二)

这篇文章补充下前面讲的一阶低通滤波器。在母线电压采样或是在电机的三相端电压采样时,往往是先分压,再经过RC低通滤波器。电路图如下: 1:先求输出和输入的关系(Uao/Ua) 从上式可以看出系统相当于一个典…

二阶有源滤波器设计

1引入 为什么要用有源二阶滤波器? (1)从有源来说 对于无源二阶低通滤波器: 其幅頻方程为: 我们从中可以看出其通带截止频率为 有其品质因子为0.372。 我们根据上图得到二阶无源低通滤波器的品质因子只有0.372,如果希望Q大于0.5…

滤波算法——均值滤波,中值滤波,一阶(αβ)滤波,卡尔曼滤波

滤波算法——均值滤波,中值滤波,一阶(αβ)滤波,卡尔曼滤波 因工作涉及到数据滤波(滤噪)处理,汇总了一些网上简单的滤波算法,方便日后查看。 滤波算法包括:均值滤波,中值滤波,一阶…

一阶滤波器

1. 一阶滤波算法的原理 一阶滤波,又叫一阶惯性滤波,或一阶低通滤波。是使用软件编程实现普通硬件RC低通滤波器的功能。 一阶低通滤波的算法公式为: Y(n)αX(n) (1-α)Y(n-1) 式中:α滤波系数;X(n)本次采样值&…

FIR数字滤波器设计

今天给大侠带来FIR数字滤波器设计,由于篇幅较长,分三篇。今天带来第三篇,FIR数字滤波器设计,包括窗函数法设计FIR滤波器、频率采样法设计FIR滤波器以及基于firls函数和remez函数的最优化方法设计FIR滤波器。话不多说,上…

一阶二阶数字滤波器笔记

数字滤波器 一阶数字滤波器时域分析频域分析数字化代码示例 二阶巴特沃斯低通滤波器S域和Z域的频率关系分析巴特沃斯滤波器举例说明代码示例 声明:感谢知乎大佬的文章,原文链接 数字滤波器实现方法是把滤波器所要完成的运算编成程序并让计算机执行,也就…

简单二阶滤波器截止频率的计算

最近刚好学习到这了,而我在网上查资料的时候却非常难找,不少资料讲解不够详细,所以经过我努力也为了为大家做点贡献的想法,以自己的见解写下这篇文章。废话不多说,先从一阶滤波器讲起。 一阶低通滤波器: …

如何确定插值滤波器的阶数

在信号处理中,滤波器的系数我们往往都是通过MATLAB来设计,只要我们知道滤波器的通带截止频率和阻带起始频率,就可以通过MATLAB中的fdatool(在MATLAB2020中使用filterDesigner)来设计滤波器了。 我们使用归一化的参数来…

标识符无效

表中存在该列,插入的时候却显示 标识符无效,使用dbsql插入报错,自己写入数据没有问题! 查资料发现可能和列的大小写有关。这里强调sql一定用全大写来写避免不必要的麻烦!但是我改过后发现并不是这个问题…… 问题已解…

ORA-00904 ID 标识符无效 解决方案

msg:"数据访问异常" dev:"ORA-00904:"ID":标识符无效 ORA:即 Oracle 报错。 标识符无效是因为:SQL语句中,列名(ID)不在表中。解决方案&#x…

PLSQL ORA-00904 标识符无效

问题在于“COMPONET_ID” 是字符串,无法识别,如果不是字符串,就可以识别

Oracle标识符无效

Oracle在创建表的时候提示“ORA-00904:标识符无效” 原因为最后一行列定义多了一个逗号,去掉即可。

【Oracle相关】坑!使用oracle时,发生标识符无效解决办法

–真是个大坑 使用oracle时,发生标识符无效解决办法 一般出现该错误的原因: 1、列名写错导致 2、使用了关键字作为了列名 但是这次遇到的情况有点奇葩 通过dblink直接查询该表,并没有报出问题,但在存储过程中通过dblink访问就一直报标识符…

ORA-00904 标识符无效 解决方案

ORA:即Oracle报错。 标识符无效:SQL语句中,这个字段名不在表中。 解决方案:修改SQL语句中对应的字段或者修改表里面对应的列名。 在这里我想说一下,因为我用的是hibernate内部封装好的save方法,咱也不能去改…

HQL 标识符无效

这是报错 因为刚学HIbernate,很多小问题其实挺折磨人的 这是代码(我根据网上搜索的答案还有自己的判断测试,感觉应该可能是字段没有" "的问题) Configuration configuration new Configuration().configure();Session…

ORA-00904:标识符无效(太坑了!!)

ORA-00904:标识符无效 解决办法(Oracle字段名区分大小写的坑) 问题描述 我在使用jpa或者mybatis集成Oracle进行where查询的时候发现一直出现: java.sql.SQLSyntaxErrorException: ORA-00904: “USER0_”.“PWD”: 标识符无效 下面是问题代码: Testvoid…