www.pudn.com > DSP6711filter.rar > main.c
//FIR 150阶Equiripple低通滤波器 //采样频率fs=9600,带通fpass=1000,带阻fstop=1500 //吴臻志作于2006/12/8 #include#include "math.h" float input[1000],output[1000]; const float hn[151] = { -6.821143740954e-007,-8.231525454932e-007,-1.108515771199e-007,1.769728583639e-006, 3.753287040544e-006,3.607900917028e-006,-4.7239123945e-007,-7.51758657807e-006, -1.271595790846e-005,-9.632331361307e-006,4.462181284995e-006,2.358438435872e-005, 3.34393517595e-005,1.98858732021e-005,-1.812057573614e-005,-6.070789594826e-005, -7.400941691258e-005,-3.273273723983e-005,5.422780913429e-005, 0.000135971097565, 0.000143919775049,4.108727354119e-005,-0.0001349276815218,-0.0002733053634464, -0.0002513733097153,-2.802956630823e-005,0.0002947805781212,0.0005028052058228, 0.0003989811579797,-3.826670801028e-005,-0.0005828692740218, -0.00085794955583, -0.0005775977384193,0.0002099591904858, 0.001063525476571, 0.001370713219496, 0.0007588097755802,-0.0005646503323556,-0.001815400887812,-0.002064867329854, -0.0008865502682663, 0.001210225925973, 0.002929702838291, 0.002948505083607, 0.0008679687376017,-0.002290900672422, -0.00451007810814,-0.004007304978016, -0.0005620019874984, 0.003999424555613, 0.00667986825819, 0.005200291549417, -0.0002403921506735,-0.006608527518153,-0.009609688242407,-0.006459649192111, 0.001862778436419, 0.01055735399654, 0.01359928445527, 0.007695483864648, -0.004875312327758, -0.01670713271109, -0.01932575537974, -0.00880541816368, 0.01053989202493, 0.02723886866414, 0.02876171468146, 0.009687768039416, -0.02282788241895, -0.05017447068234, -0.05048285471445, -0.01025608656381, 0.06667769300826, 0.1581747530314, 0.2321139939642, 0.260452339752, 0.2321139939642, 0.1581747530314, 0.06667769300826, -0.01025608656381, -0.05048285471445, -0.05017447068234, -0.02282788241895, 0.009687768039416, 0.02876171468146, 0.02723886866414, 0.01053989202493, -0.00880541816368, -0.01932575537974, -0.01670713271109,-0.004875312327758, 0.007695483864648, 0.01359928445527, 0.01055735399654, 0.001862778436419,-0.006459649192111, -0.009609688242407,-0.006608527518153,-0.0002403921506735, 0.005200291549417, 0.00667986825819, 0.003999424555613,-0.0005620019874984,-0.004007304978016, -0.00451007810814,-0.002290900672422,0.0008679687376017, 0.002948505083607, 0.002929702838291, 0.001210225925973,-0.0008865502682663,-0.002064867329854, -0.001815400887812,-0.0005646503323556,0.0007588097755802, 0.001370713219496, 0.001063525476571,0.0002099591904858,-0.0005775977384193, -0.00085794955583, -0.0005828692740218,-3.826670801028e-005,0.0003989811579797,0.0005028052058228, 0.0002947805781212,-2.802956630823e-005,-0.0002513733097153,-0.0002733053634464, -0.0001349276815218,4.108727354119e-005, 0.000143919775049, 0.000135971097565, 5.422780913429e-005,-3.273273723983e-005,-7.400941691258e-005,-6.070789594826e-005, -1.812057573614e-005,1.98858732021e-005,3.34393517595e-005,2.358438435872e-005, 4.462181284995e-006,-9.632331361307e-006,-1.271595790846e-005,-7.51758657807e-006, -4.7239123945e-007,3.607900917028e-006,3.753287040544e-006,1.769728583639e-006, -1.108515771199e-007,-8.231525454932e-007,-6.821143740954e-007 }; void filter(){ int n,i; float y; for (i=0;i<500;i++){ input[i]=sin(2*3.1415926*900*i/9600)+sin(2*3.1415926*1200*i/9600)+sin(2*3.1415926*1500*i/9600); } //input[250]=1e37; for (i=0;i<500;i++){ y=0; for(n=0;n<=150;n++){ if (i-n>=0) y=y+input[i-n]*hn[n]; } output[i]=y; } while(1); } void main(){ filter(); }