傅立叶变换,拉普拉斯变换和Z变换
对于信号分析而言,傅立叶变换是必不可少的,我们都知道傅立叶变换是把系统从时域变换到频域进行分析,那么拉普拉斯变换和Z变换是干什么的?简单的来说,由于傅里叶变换的收敛有一个狄利克雷条件,要求信号绝对可积/绝对可和。对于那些不符合狄利克雷条件的信号该怎么办呢,我们将频域的概念扩展到复频域.首先要说明的是傅立叶变换大致有两种,连续时间的傅立叶变换(CTFT)和离散的傅立叶变换(DTFT).而对于CTFT而言,拉普拉斯变换就是将连续时间系统的傅立叶变换扩展了;而对于DTFT而言,Z变换就是将离散时间系统的傅立叶变换扩展了.知乎上有一个很好的对三种变换的解释:傅立叶变换、拉普拉斯变换、Z变换的联系
RC一阶低通滤波器的算法推导
一阶的RC电路如下:
这里直接给出其s域的传递函数:
对其进行z变换(一阶后差分):
则传递函数变为:
又因为 , ,代入到上式的传递函数得:
其中:
令
则滤波公式为:
这与px4代码的lib库中低通滤波是一样的:
float BlockLowPass::update(float input)
{
if (!PX4_ISFINITE(getState())) {
setState(input);
}
float b = 2 * float(M_PI) * getFCut() * getDt();
float a = b / (1 + b);
setState(a * input + (1 - a)*getState());//input:本次采样值 getState():上次滤波值
return getState();
}
一阶RC高通滤波器
RC高通滤波器原理图如下,它和低通相反,电阻两端的电压作为输出,则其s域的传递函数为:
变换(一阶后向差分):
得到 域的传递函数为:
同样的, , ,则有:
其中:
我们令令 ,
则高通滤波的算法公式为:
这与px4中的高通滤波是一样的:
float BlockHighPass::update(float input)
{
float b = 2 * float(M_PI) * getFCut() * getDt();
float a = 1 / (1 + b);
setY(a * (getY() + input - getU()));//getY():上次滤波器输出值;getU():上次滤波器输入值
setU(input);
return getY();
}
总结
关于低通滤波和高通滤波,最关键的是学到了三类变换的关系以及离散化的方法,留下各位大佬的博客链接在此:
【滤波器学习笔记】一阶RC低通滤波
傅立叶变换、拉普拉斯变换、Z变换的联系
基础电路—RC组成的低通、高通滤波器
双线性变换
z变换