通常來說,一種理想濾波器的頻率響應是很容易理解的,如圖所示。
圖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...