|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
iir 濾波數(shù)據(jù)有問題 |
| 作者:ronghua_su 欄目:DSP技術(shù) |
我設(shè)計一個iir濾波器如下 f1=13; %起始頻率 f2=21; %終止頻率 df=1; %31,21邊緣之外都小于 50db rp=0.5; %通帶起伏 0.5db rs=50; %邊緣之外衰減達50db fs=1000; %采樣率 fn=fs/2; %采樣數(shù)據(jù)最高頻率 [nb,wn]=buttord( [f1 f2]/fn, [f1-df,f2+df]/fn,rp,rs); [b,a]=butter(nb,wn); C程序如下: const double coeff_13to21_a[N]={1,-19.827,186.85,-1112.8,4697.1,-14938,37135,-73901,119570,-158820,174160,-157920,118210,72652,36301,-14519,4539.5,-1069.4,178.54,-18.838,0.94474}; const double coeff_13to21_b[N]={0.0030995,-0.061523,0.58052,-3.4623,14.639,-46.64,116.18,-231.72,375.79,-500.46,550.28,-500.46,375.79,-231.72,116.18,-46.64,14.639,-3.4623,0.58052,-0.061523,0.0030995}; SHORT iir_bandpass_13to21(SHORT SHORT_IN) { static INT x[N]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; static INT y[N]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //static INT x[N]={0,0,0,0,0,0}; //static INT y[N]={0,0,0,0,0,0}; INT rt=0; x[0]=(INT)SHORT_IN; int i; for(i=0;i<N;i++) { //rt+=(INT)(coeff_13to21_b[i]/coeff_13to21_a[0])*x[i]; rt+=(INT)(coeff_13to21_b[i])*x[N-i-1]; TRACE3("%d,%f,%d\n",x[N-i-1],coeff_13to21_b[i],(INT)(coeff_13to21_b[i])*x[i]); } for(i=1;i<N;i++) { //rt-=(INT)(coeff_13to21_a[i]/coeff_13to21_a[0])*y[i]; rt-=(INT)coeff_13to21_a[i]*y[i]; } y[0]=rt; for(i=N-1;i>0;i--) { x[i]=x[i-1]; y[i]=y[i-1]; } if( rt>32767) rt=32767; if( rt<-32768) rt=-32768; return SHORT(rt); } 但是結(jié)果老不多,我輸入18Hz的信號,還是輸出不對啊。 為什么呢?急用,請高手幫忙,搞定請客。 |
| 2樓: | >>參與討論 |
| 作者: doalone 于 2006/4/3 9:30:00 發(fā)布:
你是在哪個平臺上做的? 你是在哪個平臺上做的?或許我可以和你探討!doalone@126.com |
|
| 3樓: | >>參與討論 |
| 作者: ronghua_su 于 2006/4/3 9:49:00 發(fā)布:
iir 濾波數(shù)據(jù)有問題 我的實現(xiàn)目標: 有個信號:采樣率是1000,想設(shè)計一個帶通濾波器,頻段為13Hz~21Hz。 用iir實現(xiàn)。 在mathlab6.5上設(shè)計iir濾波器,代碼如下面; 具體濾波在VC6.0 C語言實現(xiàn),實現(xiàn)也在下面代碼。 但是最終使用實時濾波,就出現(xiàn)了下面問題,請指教? 下面在mathlab里頭用ellip設(shè)計濾波器: f1=13; %起始頻率 f2=21; %終止頻率 rp=0.5; %通帶起伏 0.5db rs=50; %邊緣之外衰減達50db fs=1000; %采樣率 fn=fs/2; %采樣數(shù)據(jù)最高頻率 [b,a]=ellip(10,0.5,50,[f1/fn,f2/fn],'bandpass'); [h,f]=freqz(b,a,80,fs); PLOT(f,abs(h)); 從上面mathlab程序得到a和b的系數(shù)如下: #define N 21 const double coeff_13to21_a[N]={1,-19.827,186.85,-1112.8,4697.1,-14938,37135,-73901,119570,-158820,174160,-157920,118210,72652,36301,-14519,4539.5,-1069.4,178.54,-18.838,0.94474}; const double coeff_13to21_b[N]={0.0030995,-0.061523,0.58052,-3.4623,14.639,-46.64,116.18,-231.72,375.79,-500.46,550.28,-500.46,375.79,-231.72,116.18,-46.64,14.639,-3.4623,0.58052,-0.061523,0.0030995}; 實現(xiàn)濾波的C語言程序如下: SHORT iir_bandpass_13to21(SHORT SHORT_IN) { static INT x[N]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; static INT y[N]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //static INT x[N]={0,0,0,0,0,0}; //static INT y[N]={0,0,0,0,0,0}; INT rt=0; x[0]=(INT)SHORT_IN; int i; for(i=0;i<N;i++) { //rt+=(INT)(coeff_13to21_b[i]/coeff_13to21_a[0])*x[i]; rt+=(INT)(coeff_13to21_b[i])*x[N-i-1]; TRACE3("%d,%f,%d\n",x[N-i-1],coeff_13to21_b[i],(INT)(coeff_13to21_b[i])*x[i]); } for(i=1;i<N;i++) { //rt-=(INT)(coeff_13to21_a[i]/coeff_13to21_a[0])*y[i]; rt-=(INT)coeff_13to21_a[i]*y[i]; } y[0]=rt; for(i=N-1;i>0;i--) { x[i]=x[i-1]; y[i]=y[i-1]; } if( rt>32767) rt=32767; if( rt<-32768) rt=-32768; return SHORT(rt); } /////////////////w問題如下: 由于coeff_13to21_b[i]的值太小了,每執(zhí)行一次rt+=(INT)(coeff_13to21_b[i])*x[N-i-1];都為零,這樣就造成了最后rt小于-32768。請問是不是我的mathlab程序有問題,造成了a和b的系數(shù)有問題。 但是應(yīng)該不對啊,我在一本mathlab書上看到下面代碼例子 fc=10;fs=100; n=5;[b,a]=butter(n,fc/(fs/2)); 上面代碼是設(shè)計一個10Hz的截止頻率,5階,但是結(jié)果的b系數(shù)出現(xiàn) 的值也很小,請問為什么呢? 是不是我C程序有問題啊?但好像也對啊?請高手指點迷津。。。。。。。。。。。。。。。。。。。。「兄x。。。。。。。。。。。。。。。。。! |
|
| 4樓: | >>參與討論 |
| 作者: ronghua_su 于 2006/4/3 12:14:00 發(fā)布:
iir 濾波數(shù)據(jù)有問題 doalone 老大哥,我的設(shè)計和程序具體出什么問題呢?請幫忙? 謝謝。我已經(jīng)把內(nèi)容發(fā)到你郵箱了,有空幫我看看,先謝謝了 |
|
| 5樓: | >>參與討論 |
| 作者: ronghua_su 于 2006/4/3 16:10:00 發(fā)布:
iir 濾波數(shù)據(jù)有問題 各位大哥,幫幫忙,小弟實在搞不定啊。 |
|
| 6樓: | >>參與討論 |
| 作者: ronghua_su 于 2006/4/4 12:56:00 發(fā)布:
iir 濾波數(shù)據(jù)有問題 各位大哥,幫幫忙 |
|
| 7樓: | >>參與討論 |
| 作者: ronghua_su 于 2006/4/8 7:59:00 發(fā)布:
iir 濾波數(shù)據(jù)有問題 up |
|
| 8樓: | >>參與討論 |
| 作者: chasea 于 2006/4/12 19:03:00 發(fā)布:
是不是這個原因呢? static INT x[N]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; static INT y[N]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; 和兩個數(shù)組初始化后,沒有看到其他賦值的語句呀,那么,x[] y[],不一直都是零嗎? |
|
| 9樓: | >>參與討論 |
| 作者: ronghua_su 于 2006/10/29 22:45:00 發(fā)布:
iir 濾波數(shù)據(jù)有問題 把下面 INT x[N]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; INT y[N]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; 改公共變量還是不行,請專家指正,寫信 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |