一阶低通滤波器的作用 一阶数字低通滤波器原理及公式推导

我们我以前基本上是带着感情介绍FOC的。接下来,我打算深入研究一下没有感情的FOC控制。但是,对于我的导师来说,项目太多太杂。...会总结分享自己在这期间学到的东西。在查阅了大量无感FOC控制的相关资料后,我逐渐了解了基本原理和过程(I 稍后我会详细介绍),并发现一阶低通数字滤波器(相电流滤波器、反电动势滤波器、角度和速度滤波器、修正系数滤波器)会用到很多环节。虽然代码只是一个简单的公式,但是为了设计控制系统的参数,我还是浅尝辄止的摸索了一下它的基本原理,有任何错误都返回。

一开始就直接给出公式:

其中:x(k)为当前输入,y(k-1)为最后输出,y(k)为当前计算输出;a为滤波系数,取值范围为0~1。A值越小,电流输入权重越小,输出波形越平滑,但响应灵敏度越低。

如果只是套用公式写代码,这里就可以结束了。如果你想了解原理,以及采样频率、截止频率和参数的计算,请继续阅读。

1.原理和公式推导

对应于一阶低通数字滤波器是一阶RC低通滤波器电路&quot,电路如下图所示。

电容阻抗表示为1/Jc,对于上述电路,输入-输出电压关系如下:

式是以传递函数的形式写成的:

,

在《自动控制原理》中称为一阶惯性环节。

Y(s)=G(s)。F(s)给出了时域中的微分方程:

使用一阶向后差分方法,上述微分方程离散化如下:

其中t是采样周期,上述公式可以写成:

设一般表达式:A称为滤波系数。

2.截止频率和参数计算

对于电路模型,有一个截止频率(截止频率定义为幅频响应曲线衰减-3db,即1/sqrt(2)处的原始频率,这里不详述模拟电学的基础知识)。

有可能是常数

代入滤波系数A的表达式,得到:

其中f=1/T是采样频率。

在实际应用中,采样频率一般远大于截止频率,即有,所以近似在那里。因此,知道了截止频率和采样频率,就可以计算出滤波系数a的值。

如何确定截止频率和采样频率?不同的值会对计算输出产生什么影响?这里这是给你的简单介绍。

3.频率的选择

3.1采样频率的选择

一般人都是主观选择的,在不影响其他功能的情况下尽量大。

以我之前做的电机控制为例。在程序中,PWM定时器启动中断,ADC用于收集中断服务函数中的相电流,因此采样频率等于PWM定时器频率。我在控制代码中用的是20kHz,也就是采样频率f=20kHz。

3.2截止频率的选择

根据采样信号的频率,一般以略大于采样信号的最大基频为好。

以我做的电机控制为例。我使用的永磁同步电机额定转速为3000rpm,极数为4,采样对象为相电流。在额定条件下,相电流的频率为f_current=3000*4/60=200Hz。考虑电机过载运行,瞬时转速可以大于3000,并留有一定余量。我取截止频率f_H=500Hz。如此计算的滤波器系数。

电机运行前,在校准放大器时,只考虑DC偏置输入,即采样信号的频率趋近于0Hz,主要滤除电路中的高频干扰和噪声,所以截止频率可以做得很小。我这里取f_H=5Hz,算出滤波系数a=0.00157。

04频率选择对输出的影响(带模拟分析)

当采样频率一定时,截止频率越大,滤波系数A的值越大,当前输入的权重越大,计算输出和实际输出的跟踪效果越好,即越好

截止频率降低时,滤波系数A的值越小,电流输入的权重越小,因此计算出的输出信号更平滑,对噪声干扰和谐波的滤波效果更好,但动态响应变差,会出现一定程度的幅度衰减。

以下是matlab代码分析和仿真结果:

模拟结果:

图中,绿色为带噪声的采样信号,蓝色为标准正弦信号,红色为采样信号通过一阶低通滤波器的计算输出。

可以发现,截止频率较小时,输出信号的幅度衰减明显,有一定的滞后;截止频率越高,标准正弦信号的跟踪效果越好。当截止频率过大时,采样信号几乎可以完全再现,但滤噪效果变差。

让让我们来看看DC信号的测试。

可以看到,随着截止频率的降低,计算出的输出信号变得越来越平滑,接近DC信号,但同时调整时间也增加了,这对应了我前面电机控制中需要延长放大器的校准时间。在实际应用中,对于DC信号滤波,我觉得截止频率一般在1~50Hz就不错了(当然也可能有其他情况我没有期待)。

最后附上matlab的仿真源代码。

代码源程序:

交流信号部分:

f _ basic=200%原信号频率为200Hzw _ basic=2 * pi * f _ basicf _ H=1;%截止频率500Hzf _ simple=20000%采样频率20kHzPointNumber=100000%坐标点数x=点数-1;标准=2 sin(w _ basic * x * 0.0000005);%原始标准信号噪声=0.0.1 * randn (1,点数);AddNoise=标准噪声;a=2 * pi * f _ H/f _ simple;y _ last=0;y _ now=0;for I=0 point number-1 x _ now=add noise(I 1);y _ now=(1-a)* y _ last a * x _ now;output(I 1)=y _ now;y _ last=y _ now端图(1);X=点数-1;plot(X,AddNoise,-.g );坚持住;plot(X,标准,-.b );坚持住;plot(X,输出,-.r );坚持住;图例(有噪音'标准'输出)xlabel(时间);y label(价值);标题(一阶低通滤波器(fH=1Hz));f _ basic=200%原信号频率为200Hzw _ basic=2 * pi * f _ basicf _ H=5;%截止频率500Hzf _ simple=20000%采样频率20kHzPointNumber=100000%坐标点数x=点数-1;标准=2 sin(w _ basic * x * 0.0000005);%原始标准信号噪声=0.0.1 * randn (1,点数);AddNoise=标准噪声;a=2 * pi * f _ H/f _ simple;y _ last=0;y _ now=0;for I=0 point number-1 x _ now=add noise(I 1);y _ now=(1-a)* y _ last a * x _ now;output(I 1)=y _ now;y _ last=y _ nowend figure(2);X=点数-1;plot(X,AddNoise,-.g );坚持住;plot(X,标准,-.b );坚持住;plot(X,输出,-.r );坚持住;图例(有噪音'标准'输出)xlabel(时间);y label(价值);标题(一阶低通滤波器(fH=5Hz));f _ basic=200%原信号频率为200Hzw _ basic=2 * pi * f _ basicf _ H=50%截止频率500Hzf _ simple=20000%采样频率20kHzPointNumber=100000%坐标点数x=点数-1;标准=2 sin(w _ basic * x * 0.0000005);%原始标准信号噪声=0.0.1 * randn (1,点数);AddNoise=标准噪声;a=2 * pi * f _ H/f _ simple;y _ last=0;y _ now=0;for I=0 point number-1 x _ now=add noise(I 1);y _ now=(1-a)* y _ last a * x _ now;output(I 1)=y _ now;y _ last=y _ nowend figure(3);X=点数-1;plot(X,AddNoise,-.g );坚持住;plot(X,标准,-.b );坚持住;plot(X,输出,-.r );坚持住;图例(有噪音'标准'输出)xlabel(时间);y label(价值);标题(一阶低通滤波器(fH=50Hz));f _ basic=200%原信号频率为200Hzw _ basic=2 * pi * f _ basicf _ H=500%截止频率500Hzf _ simple=20000%采样频率20kHzPointNumber=100000%坐标点数x=点数-1;标准=2 sin(w _ basic * x * 0.0000005);%原始标准信号噪声=0.0.1 * randn (1,点数);AddNoise=标准噪声;a=2 * pi * f _ H/f _ simple;y _ last=0;y _ now=0;for I=0 point number-1 x _ now=add noise(I 1);y _ now=(1-a)* y _ last a * x _ now;output(I 1)=y _ now;y _ last=y _ nowend figure(4);X=点数-1;plot(X,AddNoise,-.g );坚持住;plot(X,标准,-.b );坚持住;plot(X,输出,-.r );坚持住;图例(有噪音'标准'输出)xlabel(时间);y label(价值);标题(冷杉

f _ basic=1;%原信号频率为200 hzw _ basic=2 * pi * f _ basicf _ H=500%截止频率500Hzf _ simple=20000%采样频率20kHzPointNumber=100000%坐标点数量x=点数-1;标准=2 0.05 * sin(w _ basic * x * 0.00005);%原始标准信号噪声=0 0.05*randn(1,点数);AddNoise=标准噪声;a=2 * pi * f _ H/f _ simple;y _ last=0;y _ now=0;对于I=0点数-1 x _ now=加噪声(I 1);y _ now=(1-a)* y _ last a * x _ now;output(I 1)=y _ now;最近=现在端图(1);X=点数-1;plot(X,AddNoise,-。g’);坚持住;绘图(X,输出,'-.r’);坚持住;xlabel(时间);y标签(价值);标题('一阶低通滤波器(直流信号测试)');f _ H=1;%截止频率500 hza=2 * pi * f _ H/f _ simple;y _ last=0;y _ now=0;对于I=0点数-1 x _ now=加噪声(I 1);y _ now=(1-a)* y _ last a * x _ now;output(I 1)=y _ now;y _ last=y _ nowendplot(X,输出,'-.c’);坚持住;f _ H=0.5%截止频率500 hza=2 * pi * f _ H/f _ simple;y _ last=0;y _ now=0;对于I=0点数-1 x _ now=加噪声(I 1);y _ now=(1-a)* y _ last a * x _ now;output(I 1)=y _ now;y _ last=y _ nowendplot(X,输出,'-.m’);坚持住;f _ H=0.2%截止频率500 hza=2 * pi * f _ H/f _ simple;y _ last=0;y _ now=0;对于I=0点数-1 x _ now=加噪声(I 1);y _ now=(1-a)* y _ last a * x _ now;output(I 1)=y _ now;y _ last=y _ nowendplot(X,输出,'-.k’);坚持住;f _ H=0.1%截止频率500 hza=2 * pi * f _ H/f _ simple;y _ last=0;y _ now=0;对于I=0点数-1 x _ now=加噪声(I 1);y _ now=(1-a)* y _ last a * x _ now;output(I 1)=y _ now;y _ last=y _ nowendplot(X,输出,'-.r’);坚持住;绘图(X,标准,'-.b’);坚持住;图例('有噪声''输出-500赫兹''输出-1赫兹''输出-0.5赫兹''输出-0.2赫兹''输出-0.1赫兹''标准')审核汤梓红