matlab設定fir低通濾波器;型別為equiripple;minimun order;density factor:20;fs:48000;fpass:2000;fstop:3000
截圖如下:
matlab生成的檔案:
/*
* filter coefficients (c source) generated by the filter design and analysis tool
* generated by matlab(r) 8.3 and the signal processing toolbox 6.21.
* generated on: 09-apr-2019 19:12:44
*//*
* discrete-time fir filter (real)
* -------------------------------
* filter structure : direct-form fir
* filter length : 123
* stable : yes
* linear phase : yes (type 1)
*//* general type conversion for matlab generated c-code */
#include "tmwtypes.h"
/* * expected path to tmwtypes.h
* c:\program files\matlab\r2014a\extern\include\tmwtypes.h
*/const int bl = 123;
const real64_t b[123] = ;
void process(float *x,float *y,int n)
}
我的專案是用乙個123階的fir低通濾波器濾除4k以後的訊號,所以我的測試檔案含有500hz,1000hz,2000hz,4000hz訊號疊加。測試檔案為48k取樣率,32位float,小端模式,單聲道。
#include #include #define frame_read_length (256)
#define factor 2.0*3.1415926/48000.0
#define fir_filter_length 123
float fir_coffes[fir_filter_length]=
;float state[fir_filter_length+1]=;
void process(float *x,float *y,int n)
}int main()
; float pwritedata[frame_read_length] = ;
#if 0//統計fir引數之和 1.01
int i = 0,k = 0;
float temp;
for (i = 0, temp = 0; i < fir_filter_length; i++)
temp += fir_coffes[i];
printf("%lf\n",temp);
#endif
if ((psrcfile == null)||(pdstfile == null))
nreadlen = fread(preaddata,sizeof(float),frame_read_length,psrcfile);
while(nreadlen==frame_read_length)
fclose(psrcfile);
fclose(pdstfile);
printf("----------finished!--------\n");
return 0;
}
濾波前:
濾波後:
數字濾波器 FIR和IIR
傳統的線性數字濾波器一般有兩種型別,有限衝激響應 fir 濾波器和無限衝激響應 iir 濾波器。fir數字濾波器只用當前和過去的輸入樣點值來得到當前的輸出樣點值,過去的輸出樣點值乙個也未用到。給定乙個有限持續時間的非0輸入值,fir濾波器給出乙個有限持續時間的非0輸出值。給定乙個全為0的輸入,fir...
FIR數字濾波器設計 窗函式法 C語言實現
理想濾波器在物理上是不可實現的,其單位脈衝響應是無限長 非因果的。窗函式法,就是從時域出發,用有限長 因果的單位脈衝響應h n 去逼近理想濾波器的無限長 非因果的單位脈衝響應的方法。窗函式法又叫傅利葉級數法。更多背景資料,請看數字訊號處理 李永全 p175。設n 1階fir數字濾波器的單位衝擊響應為...
數字濾波器
數字濾波器,可以分為兩大類 一類為經典濾波器,輸入訊號中的有用成分和希望濾除的成分頻率不同.一類為現代濾波器,其輸入訊號中有用訊號和希望濾除的訊號頻帶交疊.經典濾波器,從頻域上可以分為低通 高通 帶通 帶阻濾波器 從時域特性上來看,數字濾波器可以分為fir 有限衝激響應數字濾波器 和iir 無限衝激...