admin管理员组

文章数量:1794759

一阶低通滤波器(C&Matlab)

一阶低通滤波器(C&Matlab)

传感器返回的数据里面有用数据的频率都比较滴,而噪声信号的频率普遍都 比较高。所以可以通过设计一个低通滤波器来对数据进行滤波。

以一阶 RC 滤波器为例,

由电路理论知识可以知道 u_o=u_i\\frac{\\frac{1}{j\\omega C}}{R+\\frac{1}{j\\omega C}}=u_i\\frac{1}{j\\omega RC+1} ,故:

H(j\\omega)=\\frac{u_o}{u_i}=\\frac{1}{j\\omega RC+1}

令s = jw, RC一阶低通滤波器的传递函数为:

H(s) = \\frac{1}{RCs+1}

可知一阶 RC 滤波器的截至频率为 f_c = \\frac{1}{2\\pi RC} ,为了实现数字滤波器,将上面传递函数离散化,这里采用一阶后向差分方法进行人力资源规划 z 变换,其中 s=\\frac{1-z^{-1}}{T} ,T 为 采样周期。变换后得到

H(z)=\\frac{T}{RC(1-z^{-1})+T}

结合前面 \\frac{u_o}{u_i} 可知:

u_i(z)=u_o(z)(1+\\frac{RC}{T})-u_o(z)\\frac{RC}{T}z^{-1}

可以得出:

u_o(z)=\\frac{T}{T+RC}u_i(z)+\\frac{RC}{T+RC}u_o(z)z^{-1}

转化为差分方父母对孩子的爱程:

u_o(k)=\\frac{T}{T+RC}u_i(k)+(1-\\frac{T}{T+RC})u_o(k-1)

令滤波系数 \\alpha=\\frac{T}{T+RC} ,得到一阶低通滤波器的数学模型:

u_o(k)=\\alpha u_i(k)+(1-\\alpha)u_o(k-1)

滤波器的截至频率 f_c=\\frac{\\alpha}{2\\pi T(1-\\alpha)} ,一阶滤波器结构简单,能够通过调整滤波系数灵活地调整滤波器的截至频率。 滤波系数可以通过实验测得.

算法验证:

假设目标值为幅值为 1、频率为 1Hz 的正弦信号,并在信号上加上白噪声作 为传感器观测噪声。分别作出滤波器截止频率为 100Hz、10Hz、1Hz 和 0.1Hz 的 响应曲线。(Matlab仿真)

C语言仿真:(源码地址)或(github)

h文件/* * @Author: luoqi * @Dat丝光棉面料e: 2022-03-16 09:26:1缘之空穹妹5 * @Last Modified by: luoqi * @Last Modifie家庭理财培训d time: 2022-03-16 09:34:06 */#ifndef _LPF_FIRST_ORDER_H#define牛仔铅笔裤 _LPF_FIRST_ORDER_Htypedef struct _lpf_first_order{ float fc; // 数据之巅cut-off frequency float uk; float alpha; // filter coefficient float T; // samping period}LpfFirstOderObj;void lpf_first_order_init(LpfFirstOderObj *filter, float alpha);float lpf_first_order(LpfFirstOderObj *filter, float k);void lpf_first_order_fc_set(LpfFirstOderObj *filter, float 四驱兄弟游戏fc, float T);#endifC文件/* * @Author: luoqi * @Date: 2022-03-16 09:27:04 * @Last Modified 气压带和风带by: luoqi * @Last Modified time: 2022-03-16 09:27:33 */#include看上去很美 "lpf_first_order.h"#define LPF_PI 3.1415926void lpf_first_ord耐克dunker_init(LpfFirstOderObj *filter, float alpha){ filter->alpha = alpha; filter->fc = 0; 包子脸猫filter->T = 0; filter->uk = 0;}float lpf_first_order(LpfFirstOderObj *filter, float k){ float uo; uo = filter->alpha * k + (1 - filter->alpha) * filter->uk; f冷却水系统ilter->uk = uo; return uo;}void lpf_first_order_fc_set(LpfFirstOderObj *filter, float fc, float T){ filter文玩核桃保养->fc = fc; filter->T = T; filter->alpha = (2 * LPF_PI * fc * T) / (1 + 2 * LPF_PI * fc * T);}

matlab仿真代码Ts = 0.01; %采样时间fs = 1减肥药哪个好/Ts; %采样频率t = 0:Ts:10;fc = 1; %截止频率target = ones(size(t));uo = zeros(size(t));steps = size(t); alpha = 2*pi*fc*Ts/(1+2*pi*fc*Ts); %滤波系数v1 = 0.1*randn(size(t));%白噪声v2=0.1*(sin(1e6*t)+sin(1e5*t)+sin(1e4*t)+sin(1e3*t)+sin(1e2*t))/5; %高频干扰v3=0.1*(sin(10*t)+sin(t)+sin(0.1百度业务*t)+sin(0.01*t)+sin(0.001*t))/5; %低频干扰ui =target + v1+v2金古黄梁温+v3;uo(1) = ui(1);fo地藏菩萨本愿经r k=2:steps(2) uo(k) = alpha*ui(k)+(1-alpha)*uo(k-1);endfigure(溢价1)plot(t,ui,'r-.',t,uo,'b',t,target,'k--');title(湖南娱乐频道9;一阶低通滤波')legend('原始数据','滤波数据','目标值')xlabel('时间');ylabel('幅度')grid on

本文标签: 通滤波器一阶低MATLABamp