謝海霞,孫志雄
(瓊州學(xué)院電子信息工程學(xué)院,海南 三亞572022)
從20 世紀(jì)60 年代以來,隨著信息技術(shù)、計算機和半導(dǎo)體集成電路的飛速發(fā)展,數(shù)字信號處理DSP(Digital Signal Processing)技術(shù)應(yīng)運而生并得到迅速發(fā)展。在數(shù)字信號處理中,濾波占有極其重要的地位。數(shù)字濾波器可分為無限脈沖響應(yīng)(IIR)數(shù)字濾波器和有限脈沖響應(yīng)(FIR)數(shù)字濾波器。IIR 濾波器的最大缺點就是不容易實現(xiàn)線性相位,而在語音、圖像、數(shù)據(jù)通信等系統(tǒng)普遍都要求數(shù)字濾波器具有線性相位特性,F(xiàn)IR 濾波器正是因為具有線性相位特性而獲得了廣泛的應(yīng)用。用DSP 芯片實現(xiàn)數(shù)字濾波除了具有穩(wěn)定性好、精確度高、不受環(huán)境影響等優(yōu)點外,還具有靈活性好的特點。用可編程DSP 芯片實現(xiàn)數(shù)字濾波可通過修改濾波器的參數(shù)十分方便地改變?yōu)V波器的特性[1-4]。
FIR 濾波器只存在N 個抽頭h(n),N 也稱為濾波器的階數(shù),單位脈沖響應(yīng)h(n)是有限長序列,則濾波器的輸出是每一分節(jié)的輸出加權(quán)累加,其數(shù)學(xué)表達(dá)式為:
很明顯,這就是線性時不變系統(tǒng)的卷積和公式,也就是輸入信號x(n)的延時級聯(lián)的橫向結(jié)構(gòu)。根據(jù)式(1)可得FIR 濾波器的橫向結(jié)構(gòu),如圖1 所示[5-6]。
圖1 FIR 濾波器的橫向結(jié)構(gòu)示意圖
因此,要設(shè)計一個FIR 濾波器關(guān)鍵是從所需的FIR 濾波器性能指標(biāo)來確定單位脈沖響應(yīng)h(n)。下面以設(shè)計一個FIR 低通濾波器為例,說明采用MALTAB 和DSP 相結(jié)合來設(shè)計FIR 濾波器的實現(xiàn)方法。其設(shè)計的流程如圖2 所示。
圖2 用MATLB 和CCS 實現(xiàn)FIR 濾波器的流程圖
本文設(shè)計的FIR 數(shù)字濾波器是低通濾波器,其設(shè)計指標(biāo)為:采樣頻率是100 kHz,通帶截止頻率5 kHz,阻帶截止頻率10 kHz,通帶最大衰減0.1 dB,阻帶最小衰減65 dB。
FDATool 是MATLAB 信號處理工具箱里專用的濾波器設(shè)計分析工具。FDATool 中可以靈活地采用不同方法設(shè)計幾乎所有的經(jīng)典濾波器,查看濾波器的各種指標(biāo),并得到所設(shè)計濾波器的系數(shù)[7-9]。圖3是FDATool 操作界面,圖中下半部分是用來設(shè)置濾波器的設(shè)計參數(shù),根據(jù)設(shè)計指標(biāo),選擇Kaiser 窗設(shè)計方法,填寫數(shù)據(jù),F(xiàn)s=100 kHz,F(xiàn)pss=5 kHz,F(xiàn)stop=10 kHz,Ap=0.1 dB,Astop=65 dB,上半部分是顯示濾波器各種特性,其中包括設(shè)計濾波器所需最少的階數(shù)是80、直接型結(jié)構(gòu)及良好的幅頻響應(yīng)特性。
圖3 FIR 數(shù)字低通濾波器頻域特性圖
最后導(dǎo)出C header file 類型文件,得到設(shè)計的濾波器的參數(shù),其長度和抽頭系數(shù)如下:
const int BL=81;
const int16_T B[81]={0,-2,-6,-10,-13,-13,-7,5,21,39,53,57,44,14,-32,-86,-134,-161,-152,-97,0,127,256,355,387,325,161,-92,-394,-679,-871,-893,-683,-214,504,1411,2410,3380,4189,4727,4915,4727,4189,3380,2410,1411,504,-214,-683,-893,-871,-679,-394,-92,161,325,387,355,256,127,0,-97,-152,-161,-134,-86,-32,14,44,57,53,39,21,5,-7,-13,-13,-10,-6,-2,0};
用MALTAB 產(chǎn)生該濾波器的待測信號,該信號包含輸入信號頻率fa為3 kHz、fb為5 kHz 和fc為12 kHz 3 種合成信號,用于濾波器濾波效果測試,采樣頻率Fs為100 kHz,通過設(shè)計的低通濾波器將12 kHz 信號濾除。下面是MALTB 輸入信號程序,導(dǎo)出名為input.dat 文件,方便導(dǎo)入CCS 環(huán)境。
fa=3000; % /Hz
fb=5000;
fc=12000;
fs=100000; % /采樣頻率100 kHz
N=1200 %數(shù)據(jù)個數(shù)
T=1/fs; %采樣周期
n=0:N;
xa=cos(2* pi* fa* n* T);
xb=sin(2* pi* fb* n* T);
xc=0.5* cos(2* pi* fc* n* T);
x_lubo=(xa+xb+xc);
figure(1)
plot(x_lubo) %待濾波信號波形
figure(2)
yff=abs(fftshift(fft(x_lubo)));
df=n* (fs/N)-fs/2
plot(df,yff) %待濾波信號頻譜
xout=x_lubo/max(x_lubo); %歸一化
x_ccs=round(32768* xout); %采用定點Q15 表示,然后四舍五入取整
fid=fopen('input.dat','w'); %打開文件,將此文件定義為可寫,fid 是此文件的整數(shù)標(biāo)示
fprintf(fid,'1651 1 0 0 0 '); %輸出文件頭,只有此文件頭DSP 芯片才能識別
fprintf(fid,'%d ',x_ccs); %輸出x_ccs,并寫到input.
dat 文件里
fclose(fid);
運行以上的程序,可得到三種合成信號如圖4所示,利用MATLAB 中的fftshift(x)函數(shù)該信號的頻譜重排,其頻譜圖如圖5 所示,在3 kHz、5 kHz 和12 kHz 處有譜線。
圖4 待濾波信號波形
圖5 待濾波信號頻譜
TI 公司推出可視化的CCS 集成開發(fā)工具,它集代碼生成軟件和代碼調(diào)試工具于一體,具有強大的應(yīng)用開發(fā)功能,為DSP 用戶提供了十分便利的開發(fā)環(huán)境[10-12]。
在CCS 上建立FIRfilter 工程,編寫實現(xiàn)FIR 低通濾波器的FIRfilter.c 程序:
#include "stdio.h"
#include "coef.h"
//coef.h 為Matlab 生成的系數(shù)表頭文件
#define N 81 //FIR 濾波器的級數(shù)+1,本例中濾波器級數(shù)為80
#define LEN 200 //待濾波的數(shù)據(jù)長度
long yn;
int input[LEN]; //輸入緩沖,在仿真時將從內(nèi)存載入
int output[LEN]; //輸出緩沖,直接存放在內(nèi)存中
void main()
{
int i,j;
int * x;
for(j=0;j<LEN-1;j++)
{
x=&input[j];
yn=0;
for(i=0;i<N-1;i++)
yn+=B[i]* (* x++);
output[j]=yn?15;
}
while(1);
}
最后將MATLAB 導(dǎo)出的頭文件coef. h 和鏈接文件FIRfilter.cmd 添加到工程中,對程序進(jìn)行調(diào)試、鏈接;調(diào)試無誤后生成FIRfilter. out 程序,將該文件裝載入內(nèi)存,然后進(jìn)行仿真。仿真時用MATLAB 生成的input.dat 作為仿真測試文件。
采用CCS 圖形顯示功能,圖6 和圖7 左邊是觀察到的輸入信號時域波形,而右邊對應(yīng)的是頻域波形。和圖6 的仿真波形相比較可知,圖7 中12 kHz信號被濾掉,仿真結(jié)果與輸出信號理論吻合,仿真結(jié)果正確。
圖6 輸入信號時域和頻域波形圖
圖7 輸出信號時域和頻域波形圖
采用MATLAB 軟件來輔助DSP 平臺實現(xiàn)FIR低通濾波器,大大簡化了數(shù)字濾波器的設(shè)計,并且通過CCS 仿真圖形說明了該設(shè)計、驗證的方法都是可行的,而且根據(jù)不同實際應(yīng)用來改變?yōu)V波器參數(shù)即可實現(xiàn)各種類型的濾波器,靈活性好,具有很高的實用性。
[1] 張雄偉,曹鐵勇,陳亮,等. DSP 芯片的原理與開發(fā)應(yīng)用[M].北京:電子工業(yè)出版社,2008.
[2] 劉悅.FIR 數(shù)字濾波器的設(shè)計與實現(xiàn)[J]. 信息技術(shù),2009(2):8-9.
[3] 史明泉.基于DSP 的FIR 濾波器的C 語言算法實現(xiàn)[J]. 無線電工程,2011,41(1):13-14.
[4] 趙順珍,馬英.基于DSP 的FIR 數(shù)字濾波器設(shè)計與實現(xiàn)[J].微計算機信息,2009,25(2):162-163.
[5] 謝海霞,孫志雄.可編程FIR 濾波器的FPGA 實現(xiàn)[J]. 電子器件,2012,35(2):232-235.
[6] 陳后金,薛健,胡健.數(shù)字信號處理[M].2 版. 北京:高等教育出版社,2008.
[7] 鄭爭兵.基于MATLAB 和DSP 的數(shù)字濾波器設(shè)計[J]. 電子質(zhì)量,2011(10):30-31.
[8] 李娟. MATLAB 平臺下的FIR 數(shù)字濾波器設(shè)計與分析[J].Journal of Science of Teachers’College and University,2010,30(3):64-67.
[9] 彭啟琮.DSP 集成開發(fā)環(huán)境:CCS 及DSP/BIOS 的原理與應(yīng)用[M].北京:電子工業(yè)出版社,2004.
[10] 萬永革.數(shù)字信號處理的MATLAB 實現(xiàn)[M]. 北京:科學(xué)出版社,2007.
[11] 趙紅怡. DSP 技術(shù)與應(yīng)用實例[M]. 北京:電子工業(yè)出版社,2003.
[12] 戴明楨,周建江. TMS320C54xDSP 結(jié)構(gòu)、原理及應(yīng)用[M]. 4版.北京:北京航空航天大學(xué)出版社,2008.