[開發記錄] 函式庫調用 - 使用C6accel 資料庫進行FIR函式調用 之其一

来源:互联网 发布:linux切割图片 编辑:程序博客网 时间:2024/05/17 05:15

先前測試了FFT的使用,接下來進行FIR的測試,

目前已將C6accel程式清空,主程式只保留DSP調用需要的部分,

將測試碼獨立為一個副程式,才不會不小心把主程式搞壞,


測試代碼如下所示:

int c6accel_test_FIR(C6accel_Handle hC6accel,unsigned int nr,unsigned int nh){float fc=(float)8000.0/16000.0;short *xArray16, *hArray16, *yArray16;int i;float j,k,l;unsigned int nx = nr+nh-1;float nWaves=3.5;    // C6accel_DSP_fir_gen() test     xArray16 = (short *)pSrcBuf_16bpp;    hArray16 = (short *)pWorkingBuf_16bpp;yArray16 = (short *)pOutBuf_16bpp;//create nWaves cosine wave with Q.15format in nx point    for (i = 0; i < nx; i++ ){xArray16[i] = (short) (cos(2.0*PI*nWaves*i/nx)*32767);}printf("\t%f cosine wave in 120 data are : \n ",nWaves);showData(xArray16,nx);    for (i = 0; i < nh; i++ ){l=i;if ( nh%2 != 0){l = l-(nh-1)/2.0;}//addelse{l = l-(nh   /2.0)+0.5 ;}//evenj = sin(l*2.0*PI*fc)/(float)(l*PI);// ideal coefficientsk = 0.54+0.46*cos(2.0*PI*l/(float)nh);//Hamming windowprintf("ideal coeff = %1.4f ,\t Hamming = %1.4f,\t d=%1.4f\n",j,k,j*k);j=j*k*32767;// transfor to Q.15hArray16[i] = (short) j;}printf("\tideal coefficients * Hamming windows parameter are : \n ");showData(hArray16,nh);    // Clear output arrays before tests begins    memset (pOutBuf_16bpp,0x0000, nr);        // Call the DSP_fir_gen function in C6AccelC6accel_DSP_fir_gen(hC6accel,xArray16, hArray16, yArray16, nh, nr );    if (C6Accel_readCallType(hC6accel) == ASYNC){C6accel_waitAsyncCall(hC6accel);}// Now wait for the callbackprintf("\tData after hamming window are : \n ");showData(yArray16,nr);    // Clear output arrays memset (pOutBuf_16bpp,0x0000, nr);C6accel_DSP_fir_r4(hC6accel,xArray16, hArray16, yArray16, nh, nr );        if (C6Accel_readCallType(hC6accel) == ASYNC){C6accel_waitAsyncCall(hC6accel);}// Now wait for the callbackprintf("\tData after hamming window are : \n ");showData(yArray16,nr);    // Clear output arrays     memset (pOutBuf_16bpp,0x00, nr*sizeof(short));    C6accel_DSP_fir_r8(hC6accel,xArray16, hArray16, yArray16,nh,nr);    if (C6Accel_readCallType(hC6accel) == ASYNC){C6accel_waitAsyncCall(hC6accel);}// Now wait for the callbackprintf("\tData after hamming window are : \n ");showData(yArray16,nr);       printf(" END of FIR Filtering functions test\n");    return (1);}

產生 3.5 個cosine 波型 並且加入 8位的Hamming Windows 的FIR濾波器,此方式可使用較少位數的窗函數進行連續移動的濾波轉換,

或是可改用其他濾波器(高通或低通效果),使用DSP進行(半?)即時的濾波轉換。



原创粉丝点击