一阶低通模拟滤波器
图中ui为输入电压,uo为输出电压。
基础方法推导公式
设流过电阻的电流为i(t),因此我们有以下公式:
q(t)=Cuo(t)
i(t)=ddtq(t)
ui(t)=Ri(t)+uo(t)
式中q(t)为电容存储的电荷。
由以上三个式子得出:
ui(t)=RCdtduo(t)+uo(t)
若输入电压为角频率为ω的正弦波,即ui(t)=Asin(ωt+φ),带入上式得到
RCdtduo(t)+uo(t)=Asin(ωt+φ)
上式是一个一阶微分方程,下面求其次方程的通解:
RCdtduo(t)+uo(t)=0
⇒uo(t)1duo(t)=−RC1dt
⇒ln∣uo(t)∣=−RCt+C0
⇒uo(t)=C1e−RCt
下面求解微分方程的特解:
很容易知道微分方程的一个特解形式为uo(t)=Bsin(ωt+θ),代入方程式有
BωRCcos(ωt+θ)+Bsin(ωt+θ)=Asin(ωt+φ)
⇒B(ωRC)2+1sin(ωt+θ+α)=Asin(ωt+φ)其中tanα=ωRC
从上式可以得出:
B=(ωRC)2+1A、θ=φ−α
故此,微分方程的特解为:
uo(t)=(ωRC)2+1Asin(ωt+φ−α),其中tanα=ωRC
从而我们有微分方程的通解为:
uo(t)=C1e−RCt+(ωRC)2+1Asin(ωt+φ−α),其中tanα=ωRC
当时间趋向于无穷大时,上式中第一项趋于0。在研究滤波算法时,一般研究上式得第二项(ωRC)2+1Asin(ωt+φ−α)。我们先看幅值变化,当角频率变大时,第二项的幅值(ωRC)2+1A变小,也就是说它具有通低频阻高频的效果。再来看看角度的变化,第二项的初始相位比输入延后了α角度,因此该电路的低通滤波具有延迟的效果。
截至频率fc的定义:滤波器的输出幅值变为输入幅值的22时的频率即为截至频率,即(ωRC)2+1A=22A,因此有截至频率:fc=2πω=2πRC1
相位法推导
由一阶低通滤波器电路可以得出:
U˙o=1+jωRC1U˙i=(ωRC)2+1U˙i∠−α
其中ω为输入正弦电压ui(t)的角频率、tanα=ωRC。设输入正弦电压ui(t)=Asin(ωt+φ),则输出也为正弦波,且表达式为:
uo(t)=(ωRC)2+1Asin(ωt+φ−α),此式与基础方式推导出的公式是一模一样。
一阶低通数字滤波器
滤波器公式推导
在模拟滤波器的基础方法中,有这样的式子:
ui(t)=RCdtduo(t)+uo(t)
我们需要对上式进行离散化,假设采样频率为fs,则采样周期为T=fs1。设ui(n)、uo(n)为当前采样时刻的值,uo(n−1)为上一次采样时刻的值。则对上式离散化后有:
ui(n)=RCfs[uo(n)−uo(n−1)]+uo(n)
整理后得到:
uo(n)=RCfs+1RCfsuo(n−1)+RCfs+11ui(n)
上式右边的两个系数之和为1,故此一阶低通滤波器公式也可写成:
uo(n)=aui(n)+(1−a)uo(n−1),其中0<a<1。
下面我们来研究a与截止频率和延迟的关系。
根据上节及本节我们有公式:
a=RCfs+11
fc=2πRC1
α=arctan(ωRC)
由此我们可以导出:
a=2πfc+fs2πfc或
fc=2π(1−a)afs
如果输入的频率为f,则输出的延迟时间为:
Tdelay=2πfα=2πfarctan(afs2π(1−a)f)
滤波器实例
数据准备
unsigned short DataIn[82] =
{391,420,442,465,466,472,478,485,491,495,
498,488,480,479,480,482,481,480,476,468,
451,444,442,441,441,437,433,429,427,410,
399,393,389,388,388,384,379,369,360,351,
341,331,327,323,320,318,317,315,311,305,
298,288,274,265,260,255,252,250,249,247,
246,245,244,241,236,229,222,216,210,204,
200,197,193,190,186,181,178,177,175,173,
171,169}
以上数据是通过5k采样频率得到的一个直流有刷电机停止时候的电流采样数据。我们需要根据以上数据来估计电机的位置。下图是根据采样数据画出来的。
由于电机在旋转过程中会有换相,因此上图的波形出现了一定的波动。我们目标是根据数据来估计上图波动的次数。
设计方案
如上图所示,输入数据x通过一阶低通滤波器后得到低频的数据,然后原始数据与低通数据相减后得到高频数据(从图中可以看出波动频率在300~800Hz),由于一阶低通滤波器有延时效应,故此得到如上图所示的高通滤波器。因此我们还需要计算一阶低通滤波器的延迟时间。
对于上图设置一阶低通滤波器的截止频率为110Hz。即fc=110,而fs=5000。故而:
a=2πfc+fs2πfc=0.1214
由于我们是利用单片机计算的,故此可以取a=81。验算一下截止频率:
fc=2π(1−a)afs=113.7Hz
下面来计算低频段的延迟时间:
频率(Hz) |
延迟时间(ms) |
延迟采样周期数 |
10 |
1.40 |
6.98 |
20 |
1.39 |
6.93 |
40 |
1.35 |
6.73 |
60 |
1.29 |
6.44 |
80 |
1.22 |
6.10 |
100 |
1.15 |
5.74 |
110 |
1.11 |
5.56 |
从表中可以看出该一阶低通滤波器对于低频段的延迟周期数大概为5~7。因此我们取6。
从而我们得到数字滤波器模型为:
u(n)=81x(n)+87u(n−1)
y(n)=u(n)−x(n−6)
C语言代码如下:
#define DELAY_CNT 6
unsigned short Filter(unsigned short input,unsigned char startFlag)
{
static unsigned short temp[DELAY_CNT];
static filterHis = 0;
unsigned short filterTemp = 0;
unsigned short output;
static unsigned char saveCnt = 0;
if(startFlag == 1)
{
int i;
for(i=0; i<DELAY_CNT ; i++)
{
temp[i] = input;
filterHis = input;
}
}
else
{
filterTemp = input + filterHis * 7;
temp[saveCnt++] = input;
if(saveCnt == DELAY_CNT )
{
output = 1000 + (temp[0]<<3) - filterTemp;
saveCnt = 0;
}
else
{
output = 2000 + (temp[saveCnt]<<3) - filterTemp;
}
filterHis = filterTemp>>3;
}
return output;
}
结果
得到的滤波后的数据如上图所示,单片机可以通过直接比大小的方式,就可以数清电机换相的次数。