程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> DSP中浮點轉定點運算--舉例及編程中的心得

DSP中浮點轉定點運算--舉例及編程中的心得

編輯:關於C++

DSP中浮點轉定點運算--舉例及編程中的心得。本站提示廣大學習愛好者:(DSP中浮點轉定點運算--舉例及編程中的心得)文章只能為提供參考,不一定能成為您想要的結果。以下是DSP中浮點轉定點運算--舉例及編程中的心得正文


5.舉例及編程中的心得

5.1舉例

  “第3章  DSP芯片的定點運算.doc”這篇文章中給了一個很簡略有能解釋成績的例子,不想動年夜腦了,直接援用過去以下。

  這是一個對語音旌旗燈號(0.3kHz~3.4kHz)停止低通濾波的C說話法式,低通濾波的截止頻率為800Hz,濾波器采取19點的無限沖擊呼應FIR濾波。語音旌旗燈號的采樣頻率為8kHz,每一個語音樣值按16位整型數寄存在insp.dat文件中。

例3.7  語音旌旗燈號800Hz 19點FIR低通濾波C說話浮點法式

#include <stdio.h>
const  int length = 180 /*語音幀長為180點=22.5ms@8kHz采樣*/
void  filter(int xin[ ],int xout[ ],int n,float h[ ]); /*濾波子法式解釋*/
/*19點濾波器系數*/
static  float h[19]=
    {0.01218354,-0.009012882,-0.02881839,-0.04743239,-0.04584568,
-0.008692503,0.06446265,0.1544655,0.2289794,0.257883,
0.2289794,0.1544655,0.06446265,-0.008692503,-0.04584568,
-0.04743239,-0.02881839,-0.009012882,0.01218354};
static  int x1[length+20];
/*低通濾波浮點子法式*/
void  filter(int xin[ ],int xout[ ],int n,float h[ ])
{
    int i,j;
    float sum;
    for(i=0;i<length;i++) x1[n+i-1]=xin[i];
    for (i=0;i<length;i++)
    {
        sum=0.0;
        for(j=0;j<n;j++) sum+=h[j]*x1[i-j+n-1];
        xout[i]=(int)sum;
    }
    for(i=0;i<(n-1);i++) x1[n-i-2]=xin[length-1-i];
}
 
/*主法式*/
void  main( )
{
    FILE    *fp1,*fp2;
    int     frame,indata[length],outdata[length];
    fp1=fopen(insp.dat,"rb");              /*輸出語音文件*/
    fp2=fopen(outsp.dat,"wb");           /*濾波後語音文件*/
 
    frame=0;
    while(feof(fp1)==0)
    {
        frame++;
        printf("frame=%d/n",frame);
        for(i=0;i<length;i++)  indata[i]=getw(fp1);        /*取一幀語音數據*/
        filter(indata,outdata,19,h);            /*挪用低通濾波子法式*/
        for(i=0;i<length;i++)  putw(outdata[i],fp2);     /*將濾波後的樣值寫入文件*/
    }
    fcloseall( );                   /*封閉文件*/
    return(0);
}

例3.8  語音旌旗燈號800Hz 19點FIR低通濾波C說話定點法式

#include <stdio.h>
const int length=180;
void  filter(int xin[ ],int xout[ ],int n,int h[ ]);
static int  h[19]={399,-296,-945,-1555,-1503,-285,2112,5061,7503,8450,
    7503,5061,2112,-285,-1503,-1555,-945,-296,399};           /*Q15*/
static int  x1[length+20];
/*低通濾波定點子法式*/
void  filter(int xin[ ],int xout[ ],int n,int h[ ])
{
    int i,j;
    long sum;
    for(i=0;i<length;i++) x1[n+i-1]=xin[i];
    for (i=0;i<length;i++)
    {
        sum=0;
        for(j=0;j<n;j++)  sum+=(long)h[j]*x1[i-j+n-1];
        xout[i]=sum>>15;
    }
    for(i=0;i<(n-1);i++) x1[n-i-2]=xin[length-i-1];
}

主法式與浮點的完整一樣。

5.2編程中的心得

  經由過程上邊的例子,信任年夜家都年夜致明確了轉換的進程。一個函數模塊如斯,一個年夜的軟件項目標轉換也不過如斯。所分歧的是,關於一個項目,很少有一個個零丁的模塊,普通都是幾個或數個模塊都有接洽,千一發而動全身,所以,再停止轉換之前,最好理清各個軟件模塊之間的關系。

  調和,調和,再調和。

  寫到這裡, 與afreez一路進修DSP中浮點轉定點運算這個成績的評論辯論終究可以收筆了。拖拖沓拉,拉了有3個月之久,如今終究可以了卻本身的慚愧了。從第三部門開端,寫的有寫焦急,由於沒有足夠的時光來寫,還想把剩下的寫完,只能這麼處理了。我想,文章只是給出學者一個思緒,假如本身今後碰到了如許的成績,還須要本身去摸索的,沒有與日俱增的文章,究竟成績都各個分歧嗎。

  文章中不免有不當的地方,迎接年夜家批駁斧正!

以上就是本文的全體內容,願望能給年夜家一個參考,也願望年夜家多多支撐。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved