Fir带通滤波器:
计算带通滤波器阶数: wp1=0.3;wp2=0.4; ws1=0.15;ws2=0.55;
wp=[wp1,wp2];ws=[ws1,ws2]; deltaw=wp1-ws1;
16
N0=ceil(6.6*pi/deltaw); N=N0+mod(N0+1,2)
wc1=(ws1+wp1)/2;wc2=(ws2+wp2)/2; wc=[wc1,wc2];
b=fir1(N-1,wp,hamming(N)); fvtool(b,1)
h=buffer(round(b*32768),14)' csvwrite('table.txt',h) 主函数:
//***************************************************************************** // Filename: fir2_t.c // Version: 0.01
// Description: test for fir2 routine
//***************************************************************************** #include \#include \#include \#include \short i;
short eflag1= PASS; short eflag2= PASS; DATA r[NX];
DATA *dbptr = &db[0]; void main() {
int i;
short x[NX];
for(i=0;i { x[i]=(short)(((1+sin(PI*3000*i/12000))*sin(PI*4000*i/12000)*32768/3)) ; } // clear for (i=0; i fir2(x, h, r, dbptr, NX, NH);//双MAC运算,速度快 // fir(x, h, r, dbptr, NX, NH);//单MAC运算,速度相对双MAC要慢一些 while(1); } Test.h: /*#define NX 300 #define NH 90 #define FNAME \ 17 #define MAXERROR 10 DATA x[NX] ;*/ // #define NX 320 #define NH 140 //#define FNAME \#define MAXERROR 10 #define PI 3.1415926 // #pragma DATA_SECTION(h,\DATA h[NH]={ -21,-19,4,21,14,-5,-14,-6,3,0,-3,9,24,11, -32,-54,-11,65,81,0,-97,-92,18,108,76,-30,-80,-35, 15,0,-17,47,123,54,-158,-260,-50,297,363,0,-414,-387, 75,441,306,-119,-313,-136,57,0,-65,180,478,209,-624,-1044, -206,1249,1576,0,-1963,-1947,406,2631,2062,-941,-3106,-1892,1482,3279, 1482,-1892,-3106,-941,2062,2631,406,-1947,-1963,0,1576,1249,-206,-1044, -624,209,478,180,-65,0,57,-136,-313,-119,306,441,75,-387, -414,0,363,297,-50,-260,-158,54,123,47,-17,0,15,-35, -80,-30,76,108,18,-92,-97,0,81,65,-11,-54,-32,11, 24,9,-3,0,3,-6,-14,-5,14,21,4,-19,-21,0 }; #pragma DATA_SECTION(db,\DATA db[NH+2] ; DATA rtest[NX]; DATA r[NX]; 18 Fir带阻滤波器: 计算带通滤波器阶数: ws1=0.3;ws2=0.4; wp1=0.15;wp2=0.55; deltaw=ws1-wp1; N0=ceil(6.6*pi/deltaw); N=N0+mod(N0+1,2) wc1=(ws1+wp1)/2;wc2=(ws2+wp2)/2; wc=[wc1,wc2]; b=fir1(N-1,[ws1,ws2],'stop'); fvtool(b,1) h=buffer(round(b*32768),14)' csvwrite('table.txt',h) 主函数: //***************************************************************************** // Filename: fir2_t.c // Version: 0.01 // Description: test for fir2 routine //***************************************************************************** #include \#include \#include \#include \short i; short eflag1= PASS; short eflag2= PASS; DATA r[NX]; DATA *dbptr = &db[0]; 19 void main() { int i; short x[NX]; for(i=0;i { x[i]=(short)(((1+sin(PI*3000*i/12000))*sin(PI*4000*i/12000)*32768/3)) ; } // clear for (i=0; i // compute fir2(x, h, r, dbptr, NX, NH);//双MAC运算,速度快 // fir(x, h, r, dbptr, NX, NH);//单MAC运算,速度相对双MAC要慢一些 while(1); } Test.h: /*#define NX 300 #define NH 90 #define FNAME \#define MAXERROR 10 DATA x[NX] ;*/ // #define NX 320 #define NH 140 //#define FNAME \#define MAXERROR 10 #define PI 3.1415926 // #pragma DATA_SECTION(h,\DATA h[NH]={ 21,19,-4,-20,-14,5,14,6,-3,0,3,-9,-24,-11, 32,54,11,-65,-81,0,97,92,-18,-108,-76,30,80,35, -15,0,17,-47,-123,-53,158,260,50,-297,-363,0,414,386, -75,-440,-305,119,313,136,-57,0,65,-180,-478,-209,623,1042, 206,-1246,-1573,0,1960,1943,-405,-2626,-2059,939,3101,1889,-1479,29456, -1479,1889,3101,939,-2059,-2626,-405,1943,1960,0,-1573,-1246,206,1042, 623,-209,-478,-180,65,0,-57,136,313,119,-305,-440,-75,386, 414,0,-363,-297,50,260,158,-53,-123,-47,17,0,-15,35, 80,30,-76,-108,-18,92,97,0,-81,-65,11,54,32,-11, -24,-9,3,0,-3,6,14,5,-14,-20,-4,19,21,0}; #pragma DATA_SECTION(db,\DATA db[NH+2] ; 20