免费高清特黄a大片,九一h片在线免费看,a免费国产一级特黄aa大,国产精品国产主播在线观看,成人精品一区久久久久,一级特黄aa大片,俄罗斯无遮挡一级毛片

分享

IIR數(shù)字濾波器的實(shí)現(xiàn)(C語言)

 XeonGate 2022-12-07 發(fā)布于江蘇

 一般濾波器可以分為經(jīng)典濾波器和數(shù)字濾波器。

  1. 經(jīng)典濾波器:假定輸入信號(hào)中的有用成分和希望去除的成分各自占有不同的頻帶。如果信號(hào)和噪聲的頻譜相互重迭,經(jīng)典濾波器無能為力。比如 FIR 和 IIR 濾波器等。  
  2. 現(xiàn)代濾波器:從含有噪聲的時(shí)間序列中估計(jì)出信號(hào)的某些特征或信號(hào)本身?,F(xiàn)代濾波器將信號(hào)和噪聲都視為隨機(jī)信號(hào)。包括 Wiener Filter、Kalman Filter、線性預(yù)測器、自適應(yīng)濾波器等
  • Z變換和差分方程

  在連續(xù)系統(tǒng)中采用拉普拉斯變換求解微分方程,并直接定義了傳遞函數(shù),成為研究系統(tǒng)的基本工具。在采樣系統(tǒng)中,連續(xù)變量變成了離散量,將Laplace變換用于離散量中,就得到了Z變換。和拉氏變換一樣,Z變換可用來求解差分方程,定義Z傳遞函數(shù)成為分析研究采樣系統(tǒng)的基本工具。

  對(duì)于一般常用的信號(hào)序列,可以直接查表找出其Z變換。相應(yīng)地,也可由信號(hào)序列的Z變換查出原信號(hào)序列,從而使求取信號(hào)序列的Z變換較為簡便易行。

  Z變換有許多重要的性質(zhì)和定理:

  • 線性定理

  設(shè)a,a1,a2為任意常數(shù),連續(xù)時(shí)間函數(shù)f(t),f1(t),f2(t)的Z變換分別為F(z),F(xiàn)1(z),F(xiàn)2(z),則有

Z[af(t)]=aF(z)
Z[a1f1(t)+a2f2(t)]=a1F1(z)+a2F2(z)
  • 滯后定理

  設(shè)連續(xù)時(shí)間函數(shù)在t<0時(shí),f(t)=0,且f(t)的Z變換為F(z),則有

Z[f(t?kT)]=z?kF(z)

  應(yīng)用Z變換求解差分方程的一個(gè)例子:已知系統(tǒng)的差分方程表達(dá)式為$y(n)-0.9y(n-1)=0.05u(n)$,若邊界條件$y(-1)=1$,求系統(tǒng)的完全響應(yīng)。

  解:方程兩端取z變換

Y(z)?0.9[z?1Y(z)+y(?1)]=0.05zz?1Y(z)=0.05z2(z?1)(z?0.9)+0.9y(?1)zz?0.9

  可得

Y(z)z=A1zz?1+A2zz?0.9

  其中A1=0.5,A2=0.45,于是$y(n)=0.5+0.45 \times(0.9)^n \quad(n\geq0)$

  •  IIR數(shù)字濾波器的差分方程和系統(tǒng)函數(shù)

   IIR數(shù)字濾波器是一類遞歸型的線性時(shí)不變因果系統(tǒng),其差分方程可以寫為:

y(n)=i=0Maix(n?i)+i=1Nbiy(n?i)

  進(jìn)行Z變換,可得:

Y(z)=i=0Maiz?iX(z)+i=1Nbiz?iY(z)

  于是得到IIR數(shù)字濾波器的系統(tǒng)函數(shù):

H(z)=Y(z)X(z)=i=0Maiz?i1?i=1Nbiz?i=a0i=1M(1?ciz?1)i=1N(1?diz?1)

  其中ci為零點(diǎn)而di為極點(diǎn)。H(z)的設(shè)計(jì)就是要確定系數(shù)、或者零極點(diǎn),以使濾波器滿足給定的性能指標(biāo)。

  •  IIR數(shù)字濾波器結(jié)構(gòu)

   數(shù)字濾波器的功能本質(zhì)上是將一組輸入數(shù)字序列通過一定的運(yùn)算后轉(zhuǎn)變?yōu)榱硪唤M輸出數(shù)字序列。濾波器系統(tǒng)函數(shù)可以表達(dá)為多種不同的形式,每一種對(duì)應(yīng)著不同的算法,也就對(duì)應(yīng)著不同的實(shí)現(xiàn)結(jié)構(gòu)。例如:

H(z)=11?0.3z?1?0.4z?2

  可以分解為:

H(z)=11?0.8z?1?11+0.5z?1

  或

H(z)=0.61541?0.8z?1+0.38461+0.5z?1

  上述同一系統(tǒng)的三種不同描述形式就對(duì)應(yīng)了不同的實(shí)現(xiàn)結(jié)構(gòu),或者說不同的濾波器結(jié)構(gòu)可以實(shí)現(xiàn)相同的傳遞函數(shù)。IIR濾波器常見的結(jié)構(gòu)形式有直接Ⅰ型、直接Ⅱ型(典范型)、級(jí)聯(lián)型、并聯(lián)型。通過差分方程能夠畫出包含反饋結(jié)構(gòu)的數(shù)字網(wǎng)絡(luò)稱為直接型。

  直接Ⅰ型濾波器的網(wǎng)絡(luò)結(jié)構(gòu)可以根據(jù)差分方程很直觀地畫出(The Direct-Form I structure implements the feed-forward terms first followed by the feedback terms):

   可以看出直接Ⅰ型濾波器需要N+M個(gè)延時(shí)單元(N≥M)。直接Ⅱ型結(jié)構(gòu)是對(duì)直接Ⅰ型的變型,將上面網(wǎng)絡(luò)的零點(diǎn)與極點(diǎn)的級(jí)聯(lián)次序互換,并將延時(shí)單元合并。實(shí)現(xiàn)N階濾波器只需要N個(gè)延時(shí)單元(The Direct-Form II structure uses fewer delay blocks than Direct-Form I),故稱為典范型。

  直接Ⅱ型看上去不那么直觀,可以通過下圖進(jìn)行理解。我們可以將整個(gè)濾波器系統(tǒng)看成A、B兩個(gè)子系統(tǒng)串聯(lián)而成,由于為線性系統(tǒng)因此交換順序不影響最終輸出結(jié)果,傳遞函數(shù)可寫為:

H(z)=B(z)?1A(z)=1A(z)?B(z)

  直接型優(yōu)點(diǎn):直接型結(jié)構(gòu)簡單,用的延遲器較少(N和M中較大者的個(gè)數(shù));缺點(diǎn):系數(shù)ak,bk對(duì)濾波器性能的控制關(guān)系不直接,因此調(diào)整不方便;具體實(shí)現(xiàn)濾波器時(shí)ak,bk的量化誤差將使濾波器的頻率響應(yīng)產(chǎn)生很大的改變,甚至影響系統(tǒng)的穩(wěn)定性。直接型結(jié)構(gòu)一般用于實(shí)現(xiàn)低階系統(tǒng)。

  級(jí)聯(lián)型:將系統(tǒng)傳遞函數(shù)H(z)因式分解為多個(gè)二階子系統(tǒng),系統(tǒng)函數(shù)就可以表示為這些二階子系統(tǒng)傳遞函數(shù)的乘積。實(shí)現(xiàn)時(shí)將每個(gè)二階子系統(tǒng)用直接型實(shí)現(xiàn),整個(gè)系統(tǒng)函數(shù)用二階環(huán)節(jié)的級(jí)聯(lián)實(shí)現(xiàn)。
   并聯(lián)型:與級(jí)聯(lián)型類似,用部分分式展開法將系統(tǒng)函數(shù)表示為二階子系統(tǒng)傳遞函數(shù)的和。每個(gè)二階子系統(tǒng)仍然用直接型實(shí)現(xiàn),整個(gè)系統(tǒng)函數(shù)用二階環(huán)節(jié)的并聯(lián)實(shí)現(xiàn)。
 
  在IIR濾波器設(shè)計(jì)過程中,通常利用模擬濾波器來設(shè)計(jì)數(shù)字濾波器,要先根據(jù)濾波器的性能指標(biāo)設(shè)計(jì)出相應(yīng)的模擬濾波器的系統(tǒng)函數(shù)H(s),然后由H(s)經(jīng)變換得到所需要的數(shù)字濾波器的系統(tǒng)函數(shù)H(z)。常用的變換方法有沖激響應(yīng)不變法和雙線性變換法。下面使用MATLAB等工具直接生成數(shù)字濾波器系數(shù):
  在MATLAB命令行中輸入fdatool打開濾波器設(shè)計(jì)工具箱,為了便于分析,我們先從設(shè)計(jì)一個(gè)簡單的2階低通濾波器。Design Method用于選擇IIR濾波器還是FIR濾波器,這里我們選擇IIR濾波器,類型選擇Butterworth,當(dāng)然也可以選擇其他類型,不同類型的頻率響應(yīng)不同,選擇后默認(rèn)的濾波器結(jié)構(gòu)是直接II型。ResponseType用于選擇低通、高通、帶通、帶阻等類型,選擇低通濾波“Lowpass”。Frequency Specifications用于設(shè)置采樣頻率以及截止頻率,這里填入200以及20,即采樣率為200Hz,20Hz以上的頻率將被濾除掉。Fiter Order 選擇濾波器階數(shù),為了簡單起見,先選擇一個(gè)2階濾波器做實(shí)驗(yàn)。
   參數(shù)設(shè)置好后點(diǎn)擊Design filter按鈕,將按要求設(shè)計(jì)濾波器。默認(rèn)生成的IIR濾波器類型是Direct-Form II,Second-Order Sections(直接Ⅱ型,每個(gè)Section是一個(gè)二階濾波器),在工具欄上點(diǎn)擊Filter Coefficients圖標(biāo)或菜單欄上選擇Analysis→Filter Coefficients可以查看生成的濾波器系數(shù)。

  MATLAB中二階濾波器差分方程公式如下(注意反饋項(xiàng)符號(hào)為負(fù)號(hào)):

y[n]=b0?x[n]+b1?x[n?1]+b2?x[n?2]?a1?y[n?1]?a2?y[n?2]

  高階IIR濾波器的實(shí)現(xiàn)是采用二階濾波器級(jí)聯(lián)的方式來實(shí)現(xiàn)的。默認(rèn)情況下,F(xiàn)ilter Coefficients把結(jié)果分成多個(gè)2階Section顯示,其中還有增益。增益的目的是為了保證計(jì)算的精度和系統(tǒng)的穩(wěn)定性。選擇[edit]→[Convert to Single Section],這時(shí)候系數(shù)變成我們熟悉的形式:

  按照上面的公式,濾波器差分方程為:y[n] = 0.06745527*x[n] + 0.134910547*x[n-1] + 0.06745527*x[n-2] - (-1.1429805025)*y[n-1] - (0.412801596)*y[n-2]

  濾波器設(shè)計(jì)完成后還可以生成Simulink模型進(jìn)行仿真:按照下圖中數(shù)字標(biāo)號(hào)進(jìn)行,第一步點(diǎn)擊左邊Realize Model圖標(biāo),第二步勾選“Build model using basic elements”這一項(xiàng),右邊四個(gè)灰色的項(xiàng)將自動(dòng)打鉤,最后點(diǎn)擊“Realize Model”,matlab將自動(dòng)生成濾波器模型,在彈出的窗口中雙擊模型可以觀察該模型的內(nèi)部結(jié)構(gòu)。

  下面是按照設(shè)計(jì)要求生成的2階濾波器直接Ⅰ型的結(jié)構(gòu):

  Direct-Form I

  下面是直接Ⅱ型的內(nèi)部結(jié)構(gòu):

Direct-Form II

  使用生成的濾波器搭建一個(gè)簡答的測試模型:將兩個(gè)幅值為1,頻率分別為10Hz、50Hz的正弦波疊加,輸入濾波器后觀察濾波前后的波形。仿真時(shí)間設(shè)為1s,仿真參數(shù)中求解器類型設(shè)為固定步長,求解器選擇discrete(它適用于離散無連續(xù)狀態(tài)的系統(tǒng)),步長設(shè)為0.005s(200Hz)

  點(diǎn)擊Run按鈕開始進(jìn)行仿真:

   打開示波器結(jié)果如下圖所示:上面一欄是不同頻率疊加的波形,下面是10Hz正弦波和濾波后得到的波形的對(duì)比。由于50Hz正弦波頻率高于濾波器截止頻率20Hz,因此被濾除,同時(shí)濾波也產(chǎn)生了一定的滯后和失真。

  知道了差分方程的形式并通過MATLAB得到濾波器系數(shù)后很容易寫出相應(yīng)的代碼來實(shí)現(xiàn)數(shù)字濾波,另外還有一個(gè)網(wǎng)站能根據(jù)設(shè)計(jì)指標(biāo)直接生成C代碼:http://www-users.cs./~fisher/mkfilter/

  根據(jù)前面的設(shè)計(jì)指標(biāo),在網(wǎng)頁上填入相應(yīng)參數(shù)后提交,會(huì)得到下面的C語言代碼。簡單修改后就可以使用:

#define NZEROS 2
#define NPOLES 2
#define GAIN   1.482463775e+01

static float xv[NZEROS+1], yv[NPOLES+1];

static void filterloop()
{ 
  for (;;) {
     xv[
0] = xv[1]; xv[1] = xv[2]; xv[2] = next input value / GAIN; yv[0] = yv[1]; yv[1] = yv[2]; yv[2] = (xv[0] + xv[2]) + 2 * xv[1] + ( -0.4128015981 * yv[0]) + ( 1.1429805025 * yv[1]); next output value = yv[2]; } }

  

  在LabVIEW中為了自己實(shí)現(xiàn)IIR濾波器可以使用反饋結(jié)點(diǎn)來存儲(chǔ)數(shù)據(jù),下面的程序框圖實(shí)現(xiàn)了與MATLAB模型相同的功能:

  前面板波形圖如下圖所示:

參考:

Butterworth / Bessel / Chebyshev Filters

ARM官方DSP庫IIR濾波器的實(shí)現(xiàn)(STM32)

ARM官方DSP庫濾波器基礎(chǔ)知識(shí)

手把手教你用matlab生成STM32官方IIR濾波器的系數(shù)(二)

手把手教你用matlab生成STM32官方IIR濾波器的系數(shù)(三)

A Collection of Useful C++ Classes for Digital Signal Processing

數(shù)字濾波器

IIR Filters

簡單常用濾波算法C語言實(shí)現(xiàn)

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多