魏少明,林應斌,王 俊
(北京航空航天大學 電子信息工程學院,北京 100191)
數字信號處理是20 世紀中葉發展起來的一門以微積分、差分方程等數學知識為基礎的工程科學技術。智能制造、人工智能和航空航天等新產業、新經濟的快速發展對數字信號處理教學培養提出了新的要求[1]。
在數字信號處理的實際應用中,通常會面臨改變一個離散時間信號采樣率的問題,要么將它增加某個量,要么將它減少某個量。通過升降采樣處理,以不同的采樣率得到以同一個連續時間信號為基礎的新的離散時間序列,該過程稱為采樣率轉換[2-5]。
為實現對干擾信號的濾除,可以采用無限沖激響應(IIR)濾波器和有限沖激響應(FIR)濾波器兩種離散時間濾波器[6-8]。
FIR 濾波器有精確的線性相移,在設計上比IIR 有更多的可控之處,適用于各種實際情況[9]。FIR 濾波器的設計采用多項式逼近,具體方法包括窗函數法、頻率抽樣法和最佳逼近法。窗函數法比較簡單,它的頻率特性是理想頻率響應與窗函數傅里葉變換的周期卷積,因此,頻率特性主要取決于窗函數的類型和長度。頻率抽樣法比較直觀,但由于頻域采樣會造成時域混疊,為提高濾波器性能,可以在過渡帶加上0~1 之間的過渡點[10]。本實驗主要采用窗函數設計法[11]。FIR 濾波器的實現,可以采用兩種方式實現:時域卷積和差分方程[12]。
采樣是將一個信號(即時間或空間上的連續函數)轉換成一個數值序列(即時間或空間上的離散函數)。采樣定理指出,如果信號是帶限的,并且采樣頻率大于信號頻率的兩倍,即fs≥2fm,那么,原來的連續信號可以從采樣樣本x[n]中通過重構公式完全恢復出來其中,采樣周期為T=1/fs[13]。在MATLAB 中提供了理想內插器函數interp(x,I),調用方法是[y,h]=interp(x,I),該函數用于將數組x 中的信號以I 倍原采樣率重新采樣,所得重采樣數組y 是原數組的I倍長。其中,輸入參數:x 為有限長離散信號序列,可以是實數也可以是復數;I 為增采樣倍數,要求為整數。輸出參數:y 為重采樣數組,是原數組x 的I 倍長;h 為用于插值的濾波器系數。
濾波器是一種能夠讓某些頻率分量通過而拒絕其他頻率成分或對某些頻率成分進行修正的系統。窗函數法設計FIR 濾波器時,在MATLAB 中提供的濾波設計函數有fir1(),此函數可以設計低通、高通、帶通和帶阻濾波器[14]。設計低通或帶通濾波器時,調用方法是b=fir1(N,Wn),其中,N 是濾波器的階數;Wn 是歸一化截止頻率,對于低通濾波器,它是0 和1 之間的一個數,對于帶通濾波器,它是包含通帶邊界的向量[Wn1,Wn2],其中0<Wn1<Wn2<1;向量b 是濾波器的脈沖響應序列。設計高通濾波器時,調用方法是b=fir1(N,Wn,’high’),其中N 為偶數。設計帶阻濾波器時,調用方法是b=fir1(N,Wn,’stop’),其中Wn 是一個雙元素向量。對于窗函數類型的選擇,調用方法是b=fir1(N,Wn,taper),其中taper 是長度為N+1 的窗函數序列,可以采用不同的MATLAB 函數來產生對應的窗函數序列taper=blackman(N),taper=hamming(N),taper=hanning(N),taper=chebwin(N),taper=kaiser(N,beta)。
MATLAB 中同時提供了另一種FIR 濾波器設計函數fir2,可以設計任意形狀幅度響應的FIR 濾波器。調用方法是b=fir2(N,fpts,mval),其中,fpts 是頻率點向量,在0 到1 范圍內以遞增順序排列,其中采樣頻率被假定為2 Hz;mval 是對應頻率點的幅度值向量,和fpts的長度一樣;b 是長度為N+1 的脈沖響應序列。為使用不同的窗函數序列,調用方法是b=fir2(N,fpts,mval,taper),其中taper 為窗函數序列。
FIR 濾波器的實現,可以采用兩種方式實現:時域卷積和差分方程。FIR 濾波器是一個線性時不變系統,其時域輸入和輸出關系可用卷積的方法描述,y[n]=x[n]×h[n]。對于FIR 濾波器,濾波器的脈沖響應h[n]為有限項,范圍從0 到M,信號x[n]通過濾波器的輸出為y[n]=x[n]×h[n]。通過卷積運算,可實現對輸入信號的濾波處理[15-16]。MATLAB 提供了計算線性卷積的函數conv,調用方法是w=conv(u,v),其中u 和v 是有限長度序列,w 是卷積結果序列。如果u 和v 的長度分別為N 和M,則w 的長度為N+M-1。FIR 濾波器的差分方程實現,MATLAB 提供了濾波函數filter,調用方法是y=filter(b,a,x)。其中b為FIR 濾波器的脈沖響應序列,a 設置為1,x 為濾波器輸入信號,y 為濾波輸出信號。
信號的頻譜分析,通過快速傅里葉變換實現。MATLAB 提供了快速傅里葉變換函數fft(x,N),調用方法是X=fft(x,N),該函數用于實現離散信號序列x 的N點FFT 計算。輸入參數:x 為有限長離散信號序列,可以是實數也可以是復數;N 是FFT 變換的長度。當缺N時,就以x 序列的長度作為FFT 變換的長度。設置N后,當x 序列的長度大于N 時,取x 序列N 長作FFT 變換(即對x 序列進行截斷);當x 序列的長度小于N 時,在x 后補零至N 長再作FFT 變換。輸出參數:X 為x 的N 點FFT 結果。MATLAB 同時提供了頻譜居中搬移函數fftshift(x),調用方法是y=fftshift(x),該函數用于將fft 函數結果的零頻率點移至頻譜中心。輸入參數:x 為fft 函數計算結果。輸出參數:y 為頻譜居中后的FFT 結果。
實驗要求學生能夠掌握實驗所涉及的增降采樣和濾波器設計與實現的原理,并能夠實際應用。學生需要編寫實驗程序,對不同的正弦信號進行增降采樣、濾波和頻譜分析。其中,信號的重采樣、濾波器設計、濾波器實現部分,有不同的MATLAB 實現方法,學生需要對不同的方法進行嘗試和分析,從而尋找綜合性能和效率最優的方法。
結合實驗的數據運用MATLAB 繪制出實驗程序的曲線,提高學生對MATLAB 的編程能力及知識運用能力。結合曲線分析實驗中的問題,得出實驗結論,提高學生對采樣定理,增降采樣方法,濾波器設計與實現,以及傅里葉變換的理解。
對不同頻率的正弦信號進行增降采樣、濾波和頻譜分析,繪制信號的時域波形和頻譜圖。
1.對模擬頻率為f0=3.5 kHz 的單頻正弦信號x(t)=cos(2πf0t)進行采樣,采樣率為fs=8 125 Hz,得到原始采樣信號x[n]=x(t)|nT,n=0,1,…,7 999。對采樣信號隔點抽取,形成2 倍降采樣信號y[n]=x[2n]。以采樣率2fs對x(t)進行采樣,得到2 倍采樣信號x0[n]=x(t)|nT0,n=0,1,…,通過重構公式將原始連續信號重構出來,以采樣率2fs對xr(t)進行采樣,獲得2 倍內插信號z[n],n=0,1,…,15 999;通過理想內插器函數interp 對x[n]進行2 倍重采樣,獲得2 倍內插信號z1[n],n=0,1,…,15 999。
分析z[n]和z1[n]之間的差異,從中選擇最優的2 倍內插信號,并分析選擇的原因。繪制2 倍采樣信號與2倍內插信號的時域波形以及波形差;繪制原始采樣信號、2 倍降采樣信號、2 倍采樣信號和2 倍內插信號的頻譜圖。
2.對模擬頻率為f0=3.5 kHz 和f1=0.5 kHz 的雙頻正弦信號x(t)=cos(2πf0t)+cos(2πf1t)進行采樣,采樣率為fs=8 000 Hz,得到原始采樣信號x[n]=x(t)|nT,n=0,1,…,7 999。對采樣信號隔點抽取,形成2 倍降采樣信號y[n]=x[2n]。通過重構連續信號,,以采樣率fs對y(rt)進行采樣,獲得內插信號z[n],n=0,1,…,7 999。通過理想內插器函數interp 對y[n]進行2 倍重采樣,獲得內插信號z1[n],n=0,1,…,7 999。
分析z[n]和z1[n]之間的差異,從中選擇最優的內插信號,并分析選擇的原因。繪制原始采樣信號與內插信號的時域波形以及波形差;繪制原始采樣信號、2 倍降采樣信號和內插信號的頻譜圖。
3.模擬頻率為f0=3.5 kHz 的正弦原始信號,以及模擬頻率為f1=3.8 kHz 的正弦干擾信號,兩個信號在時域的混合信號為x(t)=cos(2πf0t)+cos(2πf1t),以采樣率fs=8 125 Hz 分別對正弦原始信號和混合信號進行采樣,得到原始采樣信號x0[n]=cos(2πf0t)|nT,混合采樣信號x[n]=x(t)|nT,n=0,1,…,7 999。設計一個FIR 濾波器,讓f0=3.5 kHz 的正弦信號通過,對f1=3.8 kHz 的正弦信號具有不低于50 dB 的抑制,混合采樣信號通過濾波器的輸出為y[n]。
采用fir1 和fir2 進行濾波器設計,采用時域卷積和差分方程進行濾波器實現。從中選擇最優的濾波器設計和實現方法,并分析選擇的原因。繪制原始采樣信號與濾波信號的時域波形及波形差;繪制原始采樣信號、混合采樣信號和濾波信號的頻譜圖,分析在濾波信號中,對干擾信號的抑制是否不低于50 dB;分別調整兩個正弦信號的頻率,重復上述過程,并分析濾波器長度的變化規律。
根據實驗流程進行MATLAB 仿真,對三種情況下的信號進行時域增降采樣、濾波和頻譜分析。
單頻正弦信號的時域增采樣和頻譜分析,結果如圖1 所示。
從圖1 可以看出,2 倍采樣信號與2 倍內插信號在時域和頻域上基本一致,表明在滿足采樣定理的條件下,信號的增采樣可以得到比較理想的結果。

圖1 單頻正弦信號的時域增采樣和頻譜分析結果
雙頻正弦信號的時域降采樣、增采樣和頻譜分析,結果如圖2 所示。
從圖2 可以看出,原始采樣信號與內插信號在時域和頻域上差異很大,其中對滿足采樣定理的信號分量,信號的增采樣效果比較理想,但是對不滿足采樣定理的信號分量,無法進行有效的信號增采樣。

圖2 雙頻正弦信號的時域降采樣、增采樣和頻譜分析結果
混合信號的時域濾波和頻譜分析,結果如圖3 所示。
從圖3 可以看出,通過對比混合采樣信號和濾波信號的頻譜,可以看出濾波器對正弦干擾信號的抑制可以達到50 dB,滿足濾波器的實驗設計要求。不過由于濾波器的群延遲,導致濾波信號與原始采樣信號在時域上無法完全一致。通過該實驗可以讓學生加深對濾波器設計和濾波效果的理解。

圖3 混合信號的時域濾波和頻譜分析結果
本實驗的過程是一個比較完整的仿真設計實驗,需要經歷學習研究、方案論證、實驗調試和設計總結等過程。鼓勵學生針對實驗需要解決的問題,嘗試不同的解決思路,結合實驗所得曲線、圖表分析不同思路的理論原理和優缺點,并能結合思考題舉一反三、深入理解和透徹掌握實驗所涉及數字信號處理的知識點,實現知識的內化。實驗考核部分分為以下幾個部分。
(1)實驗結果檢查:檢查學生的實驗操作規范,實驗結果準確合理。檢查過程中,讓學生現場修改實驗參數,然后運行信號采樣和濾波程序,考察學生是否能夠進行合理的實驗結果展示,是否能夠準確闡述實驗結果產生的原因。
(2)現場提問:對照學生的實驗結果,對實驗現象、實驗原理等環節進行提問,學生須現場驗證或回答,要求能從實驗原理出發論證實驗現象,或能從實驗現象出發探尋其中的實驗原理。尤其是信號的重采樣、濾波器設計及濾波器實現部分,學生需要展示不同MATLAB實現方法的差異,從中選擇性能最佳的方法,并闡釋不同方法的內在機理和選擇性能最佳方法的原因。
(3)實驗數據:檢查學生在實驗過程中整理的數據是否完整、全面,繪制的實驗圖表是否清晰、直觀。
(4)實驗報告:檢查學生的實驗報告是否具有規范、完整性,對實驗原理的理解是否透徹,是否能根據實驗現象獨立思考做出總結,是否能正確回答實驗思考題。
為了讓學生深入掌握數字信號處理的信號采樣、濾波和頻譜分析的相關知識點,文章設計了信號增降采樣和濾波實驗。本實驗為MATLAB 仿真實驗。通過對三個不同正弦信號的采樣和濾波,實現采樣率的轉換和信號濾波。讓學生既能夠真正理解數字信號處理在實際工程中的應用,又能夠鞏固對增采樣、降采樣、濾波器設計、濾波器實現和快速傅里葉變換的理解。本實驗將理論與實際問題的解決相結合,將抽象的理論形象化、具體化,促進學生對抽象理論的理解;通過不同解決方法的實驗、分析與比較,進一步激發學生的探索與學習熱情。通過整個實驗過程,培養了學生的自主學習、獨立思考與綜合分析能力。