音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(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ù)
iir 濾波數(shù)據(jù)有問題

我設(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
你是在哪個平臺上做的?
你是在哪個平臺上做的?或許我可以和你探討!doalone@126.com

3樓: >>參與討論
ronghua_su
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
iir 濾波數(shù)據(jù)有問題
doalone 老大哥,我的設(shè)計和程序具體出什么問題呢?請幫忙?
謝謝。我已經(jīng)把內(nèi)容發(fā)到你郵箱了,有空幫我看看,先謝謝了

5樓: >>參與討論
ronghua_su
iir 濾波數(shù)據(jù)有問題
各位大哥,幫幫忙,小弟實在搞不定啊。

6樓: >>參與討論
ronghua_su
iir 濾波數(shù)據(jù)有問題
各位大哥,幫幫忙

7樓: >>參與討論
ronghua_su
iir 濾波數(shù)據(jù)有問題
up

8樓: >>參與討論
chasea
是不是這個原因呢?
 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
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};

改公共變量還是不行,請專家指正,寫信


參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
關(guān)于6713的燒寫問題
調(diào)試LF2407時運用const關(guān)鍵字出現(xiàn)了奇怪的問題,大家聊聊
請教一下有關(guān)語音識別的問題
關(guān)于2812的ADC的問題
DSP初級問題
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號