MATLAB中進行軟件濾波仿真 我身邊有些朋友說現在在學校學習什么拉氏變換,Z變換,傅立葉變換沒有用,傳遞函數沒有用,差分方程沒有用,只是紙上談兵。我這里先就傳遞函數和拉氏變換和差分方程介紹幾點不自量力的看法。我們學習拉氏變換主要是為了從脫離時域,因為時域分析有它的難度指數,我們從時域映射到S域,目的只有一個,那就是簡化計算。正如我們在時域要計算卷積過來,卷積過去,我們把它映射到S域過后,就是乘積過來積乘過去。相對來說,乘積要比卷積的積分要溫柔得多。然后我們在S域里面得到結論過后,再將其反映射回到時域,然后自然地在時域使用其所得的結論了。 以下僅舉兩個例子,就一階慣性濾波器和二階濾波器的算法實現做簡要介紹。如下,我們很容易寫出其傳遞函數,G(s)=.../...,在G(s)中,S項即為微分項,計算機中,微分即為差分,因為我們是因果系統,即使用后項差分代替微分,例如:sU(t)轉化為U(K)-U(K-1)。如此一來,代入傳遞函數簡將傳遞函數化后,再將其寫編成軟件仿真。相對于我自己,覺得最快的方式就是MATLAB算法仿真,如下即為仿真結果,二階濾波器仿真同理。在調整相應參數的時候,即可看成在硬件電路中調整R、C的參數一樣。 一、一階慣性濾波器軟件實現 clear,clc Data = load('usefuldata.txt'); plot(Data); title('original data'); T = 5;%電路綜合參數(融合了電容電阻和微分時間參數) Data2 = zeros(size(Data)); Data2(1) = Data(1); [H V] = size(Data); for i = 2:V Data2(i) = (Data(i) + T * Data2(i-1)) / (T+1); end figure plot(Data2); title('handled data'); 以下是仿真結果: 1、原始數據的波形: 2、濾波過后的數據的波形: 二、二階慣性濾波器軟件實現 MATLAB代碼如下: %LRC濾波器軟件實現 clear,clc Data = load('usefuldata.txt'); plot(Data); title('original data'); T = 0.001;%微分時間 R = 100000;%電路電阻 C = 0.1;%濾波電容 L = 0.02;%濾波電感 Data2 = zeros(size(Data)); Data2(1) = Data(1); Data2(2) = Data(2); [H V] = size(Data); for i = 3:V Data2(i) = (Data(i) + (T * R * C + 2 * T * L * C)... %表明本行還沒有結束 * Data2(i - 1) - T * L * C * Data2(i - 2)) / (T * L * C + 1 + T * R * C); end figure plot(Data2); title('handled data'); 以下是仿真結果: 1、原始數據的波形: 2、濾波過后的數據的波形: 以上程序中,只是用了MATLAB的仿真功能,沒有調用MATLAB的濾波函數,所以完全可以將MATLAB程序翻譯成C語言后嵌入下位機軟件中使用。 雖然上述兩類濾波算法并沒有FFT和小波分析進行濾波來的高大上,更沒有后兩者來的直接,但在一些簡單數據處理中有它獨特的優勢。建議AD采樣進來的數據進行簡單濾波,因為一般應用都不會在AD上面做很精確的基準電壓。 |