传递函数的离散化(以一阶低通RC滤波器为例)
目錄
- 寫在前面
- RC低通濾波器
- 離散方法
- 脈沖響應不變法
- 一階向后差分
- 雙線性變換法
- 驗證
- 驗證方法與工具
- 實施
- matlab代碼
寫在前面
在學習過程中,接觸到的都是連續系統,而計算機是離散的,因此對于連續系統進行離散處理是很有必要的。描述連續系統使用的是微分方程,而描述離散系統采用差分方程,因此將系統離散化的一般流程為
本文以一階低通RC濾波器為例,實現從傳遞函數到差分方程的轉化。
RC低通濾波器
濾波器的結構如圖所示
濾波器的微分方程與傳遞函數如下
離散方法
離散化方法有很多,比如一階向后差法、雙線性變換法、零極點匹配法、保持器等價法、脈沖響應不變法、階躍響應不變法。各個方法的特點的與優勢不盡相同,下面將使用脈沖響應不變法、向后差分、雙線性變換法進行系統的離散化。
離散方法的詳細內容可以參考這篇文章: https://www.docin.com/p-540901626.html
脈沖響應不變法
根據脈沖響應不變法公式
可以得到系統傳遞函數的z變換如下:
進而得到差分方程:
一階向后差分
一階向后差分使用兩次的差值除去采樣時間T近似作為微分,其從s域到z域的變換算子如下
變換結果如下
進行z反變換求得差分方程
雙線性變換法
雙線性變換法變換算子:
變換結果:
解得
驗證
驗證方法與工具
完成了對系統的離散化并且得到了差分方程之后,需要對結果進行驗證,驗證的方式為使用matlab,將連續系統的時域輸出與差分方程的輸出進行對比。以此驗證離散結果是否正確。使用 lsim 函數輸出連續系統的輸入與響應,使用 filter 函數來求取差分方程的結果。
lsim函數:lsim函數是針對線性時不變模型,給定任意輸入,得到任意輸出。lsim(sys,u,t)繪制傳遞函數為sys的系統對輸入u的模擬時間響應。 t是仿真時間。
filter 函數:filter函數可以實現差分方程的遞規求解。
設差分方程的形式為
a0y[n] + a1y[n?1] + ? + amy[n?m] = b0x[n] + b1x[n?1] + ? + bsx[n?s]
在零初始情況下(t<0,y[n] = 0,x[n] = 0)
使用方法為:yn = filter(B, A, xn)。其中 B=[b0,?,bs],A=[a0,?,am];xn是輸入信號;yn是零狀態響應。
實施
為了方便起見。設采樣時間T=1,a = 0.3;
則根據上述式子,可得:
寫入matlab程序中
以xt = 1cos(0.3t)為函數,t = 0:0.01:90;為連續時間,使用lsim(sys,xt,t)打映時域響應yt(灰色是xn,藍色是響應yn)。結果如下:
以T為采樣時間,采樣次數為n(90/T 次),則采樣點的函數值 xn = 1cos(0.3nT);使用filter函數計算輸出值yn。結果如下:
將連續輸出與離散輸出相對比,可得各個方法之間的差異:
將xt 改為 1cos(0.1t)+cos(2t);則xn 變為 1cos(0.1nT)+1cos(2nT);離散輸出與時域響應符合
將采樣時間T縮短 T=0.1,查看結果,離散結果與時域響應基本重合,符合現實情況。
matlab代碼
附上整體代碼:
clc;clear;close all;%建立幕布 figure;%1/RC 與采樣時間T a = 0.3; T = 0.1;%生成傳遞函數 sys = tf(a,[1,a]); sys % 輸入序列 為 連續 t = 0:0.01:90; xt = 1*cos(0.1*t)+cos(2*t); %打映時域輸入與響應 lsim(sys,xt,t); hold on% 輸入序列 為 任意的離散 n = 0:(90/T); xn = 1*cos(0.1*n*T)+1*cos(2*n*T); %一階向后差分 % 線性常系數差分方程 中的 x(n) 項系數 B=(a*T)/(1+a*T); % 線性常系數差分方程 中的 y(n) 項系數 A=[1, -1/(1+a*T)]; % 輸出序列 yn=filter(B,A,xn); %繪制 "輸出序列" 圖像 plot(n*T,yn, 'cs');hold on; %脈沖響應不變法 % 線性常系數差分方程 中的 x(n) 項系數 B=a*T; % 線性常系數差分方程 中的 y(n) 項系數 A=[1, -exp(-a*T)]; % 輸出序列 yn2=filter(B,A,xn); plot(n*T,yn2, 'b+');hold on; %雙線性不變法 % 線性常系數差分方程 中的 x(n) 項系數 B=[(a*T)/(2+a*T),(a*T)/(2+a*T)]; % 線性常系數差分方程 中的 y(n) 項系數 A=[1, (a*T-2)/(a*T+2)]; % 輸出序列 yn3=filter(B,A,xn); plot(n*T,yn3, 'r*');hold on;%標注 legend('tout','(y[n]-y[n-1])/T','imp','tustin')% 打開網格 grid on;總結
以上是生活随笔為你收集整理的传递函数的离散化(以一阶低通RC滤波器为例)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NIOS_II填坑之路——EPCS出现“
- 下一篇: 邮件发送中Virtual domains