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個月之久,如今終究可以了卻本身的慚愧了。從第三部門開端,寫的有寫焦急,由於沒有足夠的時光來寫,還想把剩下的寫完,只能這麼處理了。我想,文章只是給出學者一個思緒,假如本身今後碰到了如許的成績,還須要本身去摸索的,沒有與日俱增的文章,究竟成績都各個分歧嗎。
文章中不免有不當的地方,迎接年夜家批駁斧正!
以上就是本文的全體內容,願望能給年夜家一個參考,也願望年夜家多多支撐。