傅立葉變換,拉普拉斯變換和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變換