FIR濾波器,低通 高通 帶通 帶阻VC實現

2021-06-27 15:54:56 字數 1709 閱讀 4456

通常來說,一種理想濾波器的頻率響應是很容易理解的,如圖所示。

圖1 濾波器頻響

以低通為例,濾波器頻率響應函式為

所謂濾波器處理的過程,簡單來說,可以用公式

來表示,由卷積的性質可以知道,該公式的另一種形式為

其中x(n)為要處理的資料序列,h(n)為逼近濾波器的時域響應

其中,hd(n)為對應不同型別濾波器的單位衝擊響應,比如說低通的hd(n)為sinc函式。

我們知道,高通可以有全通減低通得到,帶通可由兩個低通相減得到,帶阻可由低通加高通得到。

有了上面簡單的回顧之後,我們就可以進行vc上濾波器的實現了。首先是hd(n)的實現,具體**如下:

標頭檔案宣告部分

#pragma once

class cfirwin

;

原始檔實現部分

#include "stdafx.h"

#include "firwin.h"

#include cfirwin::cfirwin(void)

cfirwin::~cfirwin(void)

void cfirwin::firwin(int n,int band,int wn,double h,double kaiser,double fln,double fhn)

else

delay=n/2.0;

wc1=pi*fln;//

if(band>=3) wc2=pi*fhn;/*先判斷使用者輸入的資料,如果band引數大於3*/

switch(band)

if(mid==1) h[n/2]=wc1/pi;//n為偶數時,修正中間值係數

break;

}case 2:

//法2,傅利葉變換相乘後,做反傅利葉變換

/* int npower=(int)(log(n)/log(2))+1;

int nlen=1

pb->myfft(b,nlen);

for(int _i=0;_imyfft(c,nlen,true);//然後再在頻域反變換回時域,就是卷積

for(j=0;j

實際對比兩種方法,發現通過fft演算法來濾波可提高速度。下面貼出fft演算法實現過程,基本思路是,逆序,蝶形計算,利用三重迴圈控制實現。

void cfft::myfft(complex *a, int n, bool ifft)//當給ifft賦真值的話進行反變換

j+=k; }

for(l=1;l<=m;l++)//fft實現(核心演算法時域抽取法)

{ b=1<

for(j=0;j<=b-1;j++)

{ p=(1<

if(ifft==false)//預設演算法為傅利葉正變換

{for(k=j;k<=n-1;k+=1<

進行數字訊號處理可利用的工具有很多,比如matlab,labview等,這些工具都很強大,使用起來也特別方便。通常c語言要用大量**實現的過程,matlab一句**,labview乙個圖形就可以代替,因為已經做好了封裝,方便使用。但是用c語言的好處就是,能對底層進行修改,使程式設計更加靈活。同時,進行底層語言的編寫,可以深入理解原理,加深對數字訊號處理這門課程基礎知識的掌握。

C FIR濾波器(含低通 高通 帶通 帶阻)

最近需要用到fir濾波器,在網上也看了不少資料,發現乙個稍微能用的 主要 也是直接copy的,但是在使用過程中發現,三角窗的實現好像不對,而且只實現了低通的,根據該文章內容,我自己重寫了乙個,包括三角窗函式的實現,新增了高通 帶通 帶阻的實現。環境visual studio2015,c 1 如下圖 ...

低通,高通,帶通,帶阻濾波器的定義

1 低通 low pass filter 是容許低於截止頻率的訊號通過,但高於截止頻率的訊號不能通過的電子濾波裝置。2 高通 是一種讓某一頻率以上的訊號分量通過,而對該頻率以下的訊號分量大大抑制的電容 電感與電阻等器件的組合裝置。其特性在時域及頻域中可分別用衝激響應及頻率響應描述。3 帶通 是指能通...

空間低通高通濾波 濾波器和中值濾波

即使資料含有nan值,也可以直接處理 法一 空間中值高通低通濾波 空間濾波lon6 x lat6 高通 lon filt 6 lat filt 6 濾波的經緯度 mm lon lon filt 4 mm lat lat filt 4 mid sla ngrid1 nan size mid ngrid...