嵌入式设计 低通滤波器 高通滤波器

低通滤波器

1.硬件设计

2.公式

Vo=\frac{1}{RCs+1}Vi

离散后得到:(具体的推导可看一阶RC低通滤波器的数学模型及算法实现_rc低通滤波器传递函数-CSDN博客

Vo(n)=\tfrac{T}{T+RC}*Vi(n)+\tfrac{RC}{T+RC}*Vo(n-1)

3.软件绘制

在Matlab线上(官方的账户注册可免费线上使用20小时,具体路径可看图1)按照以下代码绘制。

图1  可线上使用matlab

RC=0.984375;

y1 = tf(1,[RC,1]); 

bode(y1);

其中y1是低通滤波器的传递函数,bode(y1)是绘制波特图。

结果如图所示:

然后输入以下代码

f_rad=2*π*f=314;

[mag,phase] = bode(y1,f_rad);

结果mag可以得到当前频率50Hz的增益值。 phase指当前频率50Hz的相位。

4.C语言设计

void LowPass(int32_t Xn,int32_t* Yn_1,int32_t* Yn)
{
    cof1=T/(RC+T);
	cof2=1-cof1;
	*Yn = *Yn_1*cof2+Xn*cof1;
	*Yn_1 = *Yn;
}

高通滤波器

1.硬件设计

2.公式

Vo=\frac{s}{s+1/RC}*Vi

离散后可得:

一阶RC滤波器的算法实现(低通和高通)_rc滤波算法-CSDN博客

Vo(n)=\frac{RC}{RC+T}*(Vo(n-1)+Vi(n)-Vi(n-1))

3.软件绘制

matlab最终输入代码为:

RC=0.984375;

s = tf([RC, 0],[RC, 1]);

bode(s);

具体的波特图如下所示。

freq_radpersec=2*π*f=314;

[mag,phase] = bode(s,freq_radpersec);    -----mag为当前freq_radpersec对应的增益值(输出电压比输入电压),phase为当前freq_radpersec对应的相位值。

4.语言设计

void HighpassFilter(int32_t Xn,int32_t *Xn_1,int32_t *Yn_1,int32_t *Yn)
{
	cof3=RC/(RC+T);
	*Yn = cof3*( *Yn_1 +Xn- *Xn_1);
    *Xn_1 = Xn;
	*Yn_1 = *Yn;
}

注意:

1.截止频率为fc=\frac{1}{2*pi*RC} 

语言设计内T为采样频率。它要大于截止频率的2倍以上。

2.算法处理时有一定的响应时间(\tau =RC)。

3.若处理直流成分响应时间跟不上,可以初始时扔掉部分采样值(语言设计的Xn)或者算法从几个数值以后才处理。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值