姜恩華 朱旋 陳東華
【摘 ? 要】 ? 詳細(xì)論述線性卷積的概念及其運(yùn)算步驟,在CCS軟件環(huán)境下,借助C語言編寫線性卷積程序。根據(jù)FIR數(shù)字濾波器中h(n)的對稱性,對線性卷積程序進(jìn)行優(yōu)化。以FIR數(shù)字低通和高通濾波器為例,通過輸入序列設(shè)計(jì)、求解FIR數(shù)字濾波器的h(n)和線性卷積運(yùn)算三個步驟,實(shí)現(xiàn)了FIR數(shù)字濾波。在CCS軟件環(huán)境下,借助C語言編寫FIR數(shù)字低通和高通濾波程序,驗(yàn)證了線性卷積實(shí)現(xiàn)FIR數(shù)字濾波的效果。
【關(guān)鍵詞】 ? 線性卷積;CCS軟件;FIR數(shù)字濾波
Research and Application of the Linear Convolution Based on the CCS Software
Jiang Enhua ,Zhu Xuan , Chen Donghua
(Huaibei Normal University, Huaibei235000,China)
Abstract: The concept and the operation steps of the linear convolution are discussed in detail, Under CCS software environment,the program of the linear convolution is realized by the C language.According to the h(n) symmetry of the FIR digital filter,the program of the linear convolution is optimized.Take the FIR digital low pass and high pass filter as examples,by the inputting sequence designing,the solving the h(n)of the FIR digital filter and the linear convolution operation,the FIR digital filtering is realized.Under CCS software environment,the FIR digital low pass and high pass filtering program is realized by the C language,The effect of the FIR digital filtering based on the linear convolution is verified well.
Keywords:linear convolution;CCS software; FIR digital filter
〔中圖分類號〕 ?TN911.72 ? 〔文獻(xiàn)標(biāo)識碼〕 ?A ? ? ? ? ? ? 〔文章編號〕 1674 - 3229(2021)03- 0000 - 00中
0 ? ? 引言
線性卷積是數(shù)字信號處理課程中的基本運(yùn)算,采用線性卷積,可以計(jì)算線性時不變系統(tǒng)輸出,也可以實(shí)現(xiàn)FIR數(shù)字濾波,所以線性卷積是數(shù)字信號處理課程的重要組成部分[1,2]。CCS(Code Composer Studio)軟件是TI公司發(fā)布的用于TMS320系列DSP芯片編程的集成開發(fā)環(huán)境[3],支持C語言程序設(shè)計(jì),在CCS集成開發(fā)環(huán)境下,采用C語言編寫線性卷積的程序,一方面可以加強(qiáng)學(xué)生對線性卷積概念和計(jì)算步驟的理解,另一方面為線性卷積的應(yīng)用提供子函數(shù),為線性卷積實(shí)現(xiàn)FIR數(shù)字濾波提供子程序支持。
1 ? ? 線性卷積的概念及其C語言程序設(shè)計(jì)
1.1 ? 線性卷積的概念及其計(jì)算步驟
已知序列[x(n)]和[h(n)],計(jì)算它們的線性卷積的公式如式(1)所示,一般認(rèn)為[x(n)]為輸入序列,[h(n)]為線性時不變系統(tǒng)的單位脈沖響應(yīng),[y(n)]為輸出序列[2,4]。
[y(n)=m=-∞+∞h(m)x(n-m)=m=-∞+∞x(m)h(n-m)] ? ? ? ? (1)
由已知序列[x(n)]和[h(n)],通過翻轉(zhuǎn)、移位、相乘和求和四個步驟,求得輸出序列[y(n)]。首先,通過翻轉(zhuǎn)操作把序列[x(m)]或[h(m)]變換為序列[x(-m)]或[h(-m)];其次,把序列[x(-m)]或[h(-m)]右移n位得到移位序列[x(n-m)]或[h(n-m)];再次,移位序列[x(n-m)]或[h(n-m)]與序列[h(m)]或[x(m)]進(jìn)行序列乘法;最后,對序列乘法的結(jié)果進(jìn)行求和,得到線性卷積運(yùn)算的結(jié)果。若序列[x(n)]和[h(n)]為因果序列,線性卷積的移位運(yùn)算只計(jì)算右移部分。
1.2 ? 線性卷積運(yùn)算的C語言程序設(shè)計(jì)
采用C語言編程實(shí)現(xiàn)線性卷積運(yùn)算時,序列[x(n)]和[h(n)]通常存放在數(shù)組中,由于C語言中數(shù)組的下標(biāo)從0開始,逐漸加1,數(shù)組下標(biāo)不能為負(fù)值,所以一般認(rèn)為序列[x(n)]和[h(n)]為因果序列。為了優(yōu)化C語言編程,一般認(rèn)為序列[x(n)]和[h(n)]為有限長序列,并且長度相等,若長度不等,可把短序列通過補(bǔ)零的方式使得序列[x(n)]和[h(n)]長度相等。
假設(shè)序列[x(n)]和[h(n)]的長度為L,存放在C語言的一維數(shù)組x[n]和h[n]中,在線性卷積運(yùn)算的右移操作中,為了采用數(shù)組表示序列[x(n-m)],把右移位數(shù)n分為兩段,前一段n的取值區(qū)間為[0,L-1],后一段n的取值區(qū)間為[L,2*L-1]。前一段C語言程序如圖1所示,其中n為序列[x(n)]右移位數(shù);后一段C語言程序如圖2所示,其中n為序列[x(n)]右移出的位數(shù)[5]。圖1和圖2程序的外循環(huán)執(zhí)行移位操作,內(nèi)循環(huán)執(zhí)行相乘和求和操作。
通過圖1和圖2的C語言程序可以完整的計(jì)算出線性卷積的結(jié)果,共計(jì)算出2*L-1個y值,即線性卷積的長度為 2*L-1。
1.3 ? 線性卷積仿真實(shí)驗(yàn)
假設(shè)序列[x(n)]和[h(n)]的長度為128,均為相同的正弦波,如式(2)所示。
[x(n)=h(n)=200*sin(2*3.14*i/32),0≤n≤127] ? ? ? ? ?(2)
在CCS集成開發(fā)環(huán)境下,采用圖1和圖2的程序,序列[x(n)]和[h(n)]的時域波形如圖3所示,線性卷積運(yùn)行結(jié)果的時域波形如圖4所示。
2 ? ? 線性卷積在FIR數(shù)字濾波中的應(yīng)用
2.1 ? 線性卷積算法優(yōu)化
FIR數(shù)字濾波網(wǎng)絡(luò)的差分方程如式(3)所示,該方程與式(1)相同,于是通過線性卷積運(yùn)算對式(3)求解,得到輸出[y(n)],從而實(shí)現(xiàn) FIR數(shù)字濾波[6]。
[y(n)=k=0N-1h(k)x(n-k)] ? ? ? (3)
由于 FIR數(shù)字濾波器的單位脈沖響應(yīng)[h(n)]滿足偶對稱或奇對稱,并且[h(n)]的長度為N,輸入序列[x(n)]的長度常常大于N,所以可以對線性卷積的C語言程序進(jìn)行優(yōu)化。假設(shè)[h(n)]滿足偶對稱,對線性卷積相乘步驟化簡為:h[m]*x[n+m],如圖5所示,在[h(m)]坐標(biāo)系中,橫坐標(biāo)軸下面標(biāo)注的[h(m)]為偶對稱后的值。去除圖1所示程序的計(jì)算部分,對圖2程序的序列相乘步驟中的輸入序列[x(n)]的數(shù)組下標(biāo)進(jìn)行優(yōu)化,實(shí)現(xiàn)FIR數(shù)字濾波的線性卷積C語言程序如圖6所示,其中n為向右移出的位數(shù)。
2.2 ? 輸入序列[x(n)]設(shè)計(jì)
以FIR數(shù)字低通和高通濾波為例,設(shè)計(jì)輸入序列,輸入序列由低頻和高頻正弦波信號疊加而成,如式(4)所示[5],假設(shè)輸入序列的長度為256,在CCS軟件環(huán)境下,通過C語言編寫程序,計(jì)算出輸入序列[x(n)],借助CCS軟件的View/Graph/的Time/Frequency菜單,觀察[x(n)]的時域波形如圖7所示,頻譜如圖8所示[7]。
[x(n)=20*sin(2*3.14*n/32)+ 20*sin(2*3.14*n/4)] ? ? ? ?(4)
2.3 ? FIR數(shù)字低通濾波
采用窗函數(shù)法設(shè)計(jì)FIR數(shù)字低通濾波器,通常已知FIR數(shù)字低通濾波器的頻率響應(yīng)[Hd(ejω)],通帶截止頻率為[ωc],通過序列的傅里葉逆變換求得單位脈沖響應(yīng)[hd(n)],與窗函數(shù)相乘,得到[h(n)],由于[hd(n)]關(guān)于(N-1)/2偶對稱,只要窗函數(shù)關(guān)于(N-1)/2偶對稱,[h(n)]必然關(guān)于(N-1)/2偶對稱,從而設(shè)計(jì)FIR數(shù)字低通濾波器滿足線性相位特性[8]。計(jì)算FIR數(shù)字低通濾波器的[h(n)]如式(5)所示[1,2],假設(shè)FIR數(shù)字低通濾波器長度N為51,通帶截止頻率[ωc]為π/8,在CCS集成開發(fā)環(huán)境下,通過C語言編寫程序,計(jì)算出[h(n)],其時域波形如圖9所示,頻譜如圖10所示。
[h(n) = 200*sin((n-25)*3.14/8)/(3.14*(n-25))] (5)
在CCS集成開發(fā)環(huán)境下,已知輸入序列[x(n)]和FIR數(shù)字低通濾波器單位脈沖響應(yīng)[h(n)],調(diào)用線性卷積子程序,計(jì)算出FIR數(shù)字低通濾波器的輸出[y(n)],完成低通濾波,F(xiàn)IR低通濾波結(jié)果的時域波形如圖11所示,頻譜如圖12所示,與輸入序列比較,可以看出,高頻信號被濾除。
2.3 ? FIR數(shù)字高通濾波
采用窗函數(shù)設(shè)計(jì)FIR數(shù)字高通濾波器,假設(shè)FIR數(shù)字高通濾波器長度N為51,通帶截止頻率[ωc]為π/10,其單位脈沖響應(yīng)[h(n)]如式(6)所示[1,2]。
[h(n) =20*sin((n-25)*3.14)/(3.14*(n-25))-20*sin((n-25)*3.14/10)/(3.14*(n-25))] ?(6)
在CCS軟件環(huán)境下,通過C語言編寫程序,計(jì)算出FIR高通濾波器的單位脈沖響應(yīng)[h(n)],其時域波形如圖13所示,頻譜如圖14所示。
在CCS集成開發(fā)環(huán)境下,調(diào)用線性卷積子程序,計(jì)算出FIR數(shù)字高通濾波器的輸出[y(n)],其時域波形如圖15所示,頻譜如圖16所示,與輸入序列比較,可以看出,低頻信號被濾除。
總之,在CCS集成開發(fā)環(huán)境下,借助C語言進(jìn)行線性卷積程序設(shè)計(jì),加強(qiáng)了學(xué)生對線性卷積的理解,有利于熟練掌握線性卷積運(yùn)算的步驟:翻轉(zhuǎn)、移位、相乘和求和。通過線性卷積在FIR數(shù)字濾波中的應(yīng)用,結(jié)合FIR數(shù)字濾波器單位脈沖響應(yīng)[h(n)]的對稱性,優(yōu)化了線性卷積運(yùn)算程序,以FIR數(shù)字低通和高通濾波為例,形象的展現(xiàn)了線性卷積運(yùn)算實(shí)現(xiàn)FIR數(shù)字低通和高通濾波的效果。同理,通過線性卷積運(yùn)算也可以實(shí)現(xiàn)FIR數(shù)字帶通和帶阻濾波。
3 ? ? 結(jié)論
首先明確了線性卷積的概念,對線性卷積計(jì)算進(jìn)行了優(yōu)化,根據(jù)計(jì)算步驟編寫C語言程序,以兩路正弦波為例,在CCS軟件環(huán)境下,計(jì)算出線性卷積的結(jié)果。將線性卷積應(yīng)用于FIR數(shù)字濾波,根據(jù)FIR數(shù)字濾波器的單位脈沖響應(yīng)[h(n)]的對稱性,對線性卷積程序進(jìn)行了優(yōu)化,以輸入序列設(shè)計(jì)、求解FIR數(shù)字濾波器中[h(n)]和調(diào)用線性卷積子程序三個步驟,編寫FIR數(shù)字濾波程序,完成FIR數(shù)字濾波,在CCS軟件環(huán)境下,應(yīng)用線性卷積實(shí)現(xiàn)FIR數(shù)字濾波。一方面加深了學(xué)生對線性卷積實(shí)現(xiàn)FIR數(shù)字濾波的認(rèn)識,另一方面培養(yǎng)了學(xué)生C語言編程的興趣。該方法在數(shù)字信號處理課程實(shí)驗(yàn)教學(xué)中和FIR數(shù)字濾波網(wǎng)絡(luò)實(shí)現(xiàn)中,具有借鑒價值。
參考文獻(xiàn):
[1] ?程佩青.數(shù)字信號處理教程[M].5版.北京:清華大學(xué)出版社, 2016.
[2] 高西全,丁玉美.數(shù)字信號處理[M]. 4版.西安:電子科技大學(xué)出版社, 2018
[3] CodeComposerStudio[CCS]集成開發(fā)環(huán)境[IDE]. http://www.ti.com.cn/tool/cn/ccstudio .
[4] 姜恩華,陳得寶,竇德召.數(shù)字信號處理課程中的卷積運(yùn)算教學(xué)探索[J].廊坊師范學(xué)院學(xué)報(bào)(自然科學(xué)版),2015,15(01):123-125.
[5] 姜恩華,李素文,崔少華,陳得寶.基于CCS軟件的FIR濾波器實(shí)驗(yàn)設(shè)計(jì)[J].實(shí)驗(yàn)室研究與探索,2015,34(06):138-141+149.
[6] 朱磊,宋彩霞.基于DSP的FIR數(shù)字濾波綜合實(shí)驗(yàn)設(shè)計(jì)[J].實(shí)驗(yàn)技術(shù)與管理,2017,34(01):206-209+213.
[7] 王靜,陳業(yè)慧,章華.基于DSP的語音信號采集與處理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].白城師范學(xué)院學(xué)報(bào),2018,32(12):37-40.
[8] 奧本海姆 A.V,謝弗 R.W.離散時間信號處理[M].3版.黃建國,劉樹棠譯. 西安:西安交通大學(xué)出版社. 2015.
[收稿日期] ? 2021-04-26
[基金項(xiàng)目] ? 國家自然科學(xué)基金資助項(xiàng)目(NO:11875031),安徽省教育廳省級示范課“數(shù)字信號處理A”項(xiàng)目,淮北師范大學(xué)重點(diǎn)教學(xué)研究項(xiàng)目(NO:2020xjxyj023)資助
[作者簡介] ? 姜恩華(1974- ),男,碩士,淮北師范大學(xué)物理與電子信息學(xué)院副教授,研究方向:數(shù)字通信與信號處理。