1、引言
信息化已經(jīng)成為社會(huì)發(fā)展的大趨勢(shì)。信息化是以數(shù)字化為背景的,而DSP技術(shù)則是數(shù)字化最重要的基本技術(shù)之一。DSP處理器是專門設(shè)計(jì)用來進(jìn)行高速數(shù)字信號(hào)處理的微處理器。與許多通用的CPU和微控制器(MCU)相比,DSP處理器在結(jié)構(gòu)上采用了許多的專門技術(shù)和措施來提高處理速度。DSP處理器與通用微處理器不同,它沒有采用將程序代碼和數(shù)據(jù)公用一個(gè)公共的存儲(chǔ)空間和單一的地址與數(shù)據(jù)總線的馮諾依曼結(jié)構(gòu)(Von Neumann Architecture),而是毫無例外的將程序代碼和數(shù)據(jù)的存儲(chǔ)空間分開,各有自己的地址與數(shù)據(jù)總線,即所謂的哈佛結(jié)構(gòu)(Harvard Architecture),增大了處理器的數(shù)據(jù)交換能力。
OFDM(正交頻分復(fù)用),是直接利用離散傅里葉變換(DFT),實(shí)現(xiàn)的一種多載波調(diào)制技術(shù),它采用并行傳輸,將所傳送的高速數(shù)據(jù)分解并調(diào)制到多個(gè)相互交疊并且正交的子信道中,使得每個(gè)子通道的碼元寬度大于擴(kuò)展延時(shí),若在碼元之間增加一定長(zhǎng)度的保護(hù)間隔,則多徑傳輸引起的碼間串?dāng)_基本被消除。OFDM的上述特點(diǎn)使其特別適于在存在多徑傳播和有多普勒頻移的移動(dòng)無線傳輸信道中傳輸高速數(shù)據(jù)。目前應(yīng)用于電力線通信,數(shù)字聲廣播(DAB)和歐洲高清晰度電視傳輸標(biāo)準(zhǔn)(DVB-T), 無線局域網(wǎng)(WLAN)等業(yè)務(wù)中。
論文在TMS320C5509DSP上根據(jù)系統(tǒng)的總體框圖,實(shí)現(xiàn)OFDM基帶系統(tǒng)的設(shè)計(jì),并給出了具體的性能指標(biāo)。
2、OFDM系統(tǒng)的設(shè)計(jì)實(shí)現(xiàn)
2.1 實(shí)現(xiàn)系統(tǒng)的任務(wù)流程圖
系統(tǒng)每幀可以傳送56bits的有效信息,數(shù)據(jù)的傳輸速率將達(dá)到100kbit/s,并且為了減小傳輸過程中的信道的不理想,用了BSPK對(duì)信源進(jìn)行編碼映射,在傳輸過程中,傳輸?shù)氖菚r(shí)域的信號(hào),但是實(shí)際有用的是這些時(shí)域信號(hào)的頻譜,這些信號(hào)在時(shí)域中是無規(guī)則的隨機(jī)信號(hào),但在其頻譜上的各個(gè)子載波攜帶著需傳輸?shù)男畔ⅰ,F(xiàn)工作框圖如圖1:
?
圖1.?? 系統(tǒng)的任務(wù)框圖
整個(gè)系統(tǒng)由DSP和FPGA、D/A、A/D以及一些其他的硬件共同完成。任務(wù)流程是由DSP接受由串/并轉(zhuǎn)換過后的并行數(shù)據(jù),在DSP內(nèi)進(jìn)行BPSK信源編碼,將0和1分別映射為0xbffd 和0x3fff兩個(gè)十六進(jìn)制的數(shù),再送入IFFT單元將數(shù)據(jù)變到時(shí)域進(jìn)行處理,然后把數(shù)據(jù)加上循環(huán)前綴,串行送給FPGA進(jìn)行處理,由FPGA將數(shù)據(jù)發(fā)送給接收板。接收板上由FPGA接到數(shù)據(jù)進(jìn)行一系列處理后,將數(shù)據(jù)又串行傳給接收板的DSP。在接收板的DSP上將接受到的數(shù)據(jù)移走循環(huán)前綴,送入FFT單元將數(shù)據(jù)還原到頻域,然后以0為門限進(jìn)行判決,映射后得到最早的原始數(shù)據(jù)。
2.1? 任務(wù)流程詳解
原始數(shù)據(jù)每幀攜帶56bit的二進(jìn)制信息(即只有0和1兩種取值),在框圖中D/A和A/D部分都是由專門的硬件來完成,項(xiàng)目選用的是ADS828e,和DAC902u。
發(fā)送部分:
信源編碼部分我們采用的是BPSK,為的是進(jìn)一步增大信號(hào)間的歐式距離,通過計(jì)算,我們決定選用0xbffd 和0x3fff兩個(gè)16進(jìn)制的數(shù)來分別代表0和1。由于FFT變換要求數(shù)據(jù)是2N個(gè)數(shù)據(jù),所以將數(shù)據(jù)插入若干個(gè)零來補(bǔ)足。具體做法是,將映射后的第28個(gè)數(shù)據(jù)位置開始插入7個(gè)零。由于零頻時(shí)不能有信號(hào)(為了無直流分量),在幀的開始不傳信息,將第一個(gè)數(shù)插入零(不是0xbffd),把56個(gè)數(shù)變?yōu)?4個(gè)數(shù),在接收板上將把同樣位置的16個(gè)數(shù)去掉。
將編碼映射后的16位數(shù)進(jìn)行64點(diǎn)的IFFT,把數(shù)據(jù)由頻域變換到時(shí)域,等候下一步處理。
在OFDM系統(tǒng)中,為了防止多徑延遲,必須加上循環(huán)前綴,而這些循環(huán)前綴又不能破壞子信道間的正交性,于是將最后16位數(shù)提到前面來形成80個(gè)數(shù)。具體做法是,在IFFT完成后,要加上循環(huán)前綴才能將數(shù)據(jù)發(fā)送給FPGA,將數(shù)據(jù)的最后16位復(fù)制到數(shù)據(jù)開頭(原來的16個(gè)數(shù)不動(dòng)),把數(shù)據(jù)變?yōu)?0個(gè),送給串口發(fā)送給FPGA。
? 在FPGA上進(jìn)行FIR濾波,和一系列處理后,發(fā)送板的任務(wù)完成,接下來就將數(shù)據(jù)送給接收板。
接收部分:
由接收板上的FPGA接收到發(fā)送板送來的數(shù)據(jù),經(jīng)過一系列處理后將數(shù)據(jù)串行送給DSP等待進(jìn)一步處理。
接收板的DSP接收到FPGA發(fā)過來的80個(gè)串行數(shù)據(jù)后,先將循環(huán)前綴去掉,即去掉前16位數(shù),將80位的數(shù)據(jù)變?yōu)?4位,交給下一步處理。
在把數(shù)據(jù)變回為64位后,將數(shù)據(jù)進(jìn)行FFT變換,由時(shí)域變回頻域,交由下一步處理。
在進(jìn)行判決之前,先要把插入的16個(gè)數(shù)去掉,將64位數(shù)變?yōu)?6位,然后進(jìn)行判決,BPSK有一個(gè)好處就是判決時(shí)可以直接以零為門限。經(jīng)過判決后,將數(shù)據(jù)還原成原來的初試值。
綜上所述,在DSP部分,共有10項(xiàng)任務(wù),
發(fā)送端
1.BPSK編碼和插入數(shù)據(jù)(數(shù)據(jù)個(gè)數(shù)由56變?yōu)?4個(gè))
2.作N=64的IFFT變換,將頻域的數(shù)據(jù)變到時(shí)域。
3.加入循環(huán)前綴(數(shù)據(jù)個(gè)數(shù)由64個(gè)變?yōu)?0個(gè)),防止多徑延遲。
4.通過DMA將數(shù)據(jù)送到Mcbsp發(fā)給FPGA。
接收端
5.由Mcbsp接到數(shù)據(jù)通過DMA存入數(shù)據(jù)空間(此時(shí)數(shù)據(jù)應(yīng)該與第四步結(jié)束時(shí)相同)。
6.去掉循環(huán)前綴(數(shù)據(jù)個(gè)數(shù)又由80個(gè)變?yōu)?4個(gè),此時(shí)數(shù)據(jù)應(yīng)該與第三步結(jié)束時(shí)相同)
7.作64點(diǎn)FFT變換(此時(shí)結(jié)果應(yīng)該與第一步結(jié)束時(shí)相同)
8.去掉插入的數(shù)據(jù),反映射(數(shù)據(jù)個(gè)數(shù)由64個(gè)變?yōu)?6個(gè),此時(shí)結(jié)果應(yīng)該與第一步開始時(shí)相同)并解碼。
2.3? DSP串口的接發(fā)配置和DMA的設(shè)置
??? 系統(tǒng)實(shí)現(xiàn)關(guān)鍵在FFT的實(shí)現(xiàn)和DSP串口的接發(fā)配置和DMA的設(shè)置。這里詳細(xì)說明串口和DMA的設(shè)計(jì)方法。
系統(tǒng)用Mcbsp1發(fā)送數(shù)據(jù),用Mcbsp2來接收數(shù)據(jù),為了不占用過多的CPU資源,用DMA的4通道來傳送數(shù)據(jù)給串口,用5通道來接收數(shù)據(jù)。對(duì)于DMA和Mcbsp的使用主要是寄存器的配置問題,在這些配置當(dāng)中可以對(duì)工作模式等一系列東西進(jìn)行設(shè)置?,F(xiàn)分別介紹如下:
對(duì)于Mcbsp來說,接收和發(fā)送可以配置在一起,采用了DSP自身帶有的CSL庫函數(shù),它對(duì)寄存器的配置是通過結(jié)構(gòu)體來定義的,可以方便的修改成自己所需要的模式。
在進(jìn)行將DSP片內(nèi)數(shù)據(jù)地址賦DMA中的地址時(shí)要注意,DMA中數(shù)據(jù)是以byte為單位存儲(chǔ)的,存儲(chǔ)的最小數(shù)據(jù)單位上byte,而片內(nèi)存儲(chǔ)區(qū)間是以word為單位的,所以將地址交過去時(shí),要將地址右依、移1位。如:
srcAddrHi = (Uint16)(((Uint32)(dmaXmtConfig.dmacssal)) >> 15) & 0xFFFFu;
srcAddrLo = (Uint16)(((Uint32)(dmaXmtConfig.dmacssal)) << 1) & 0xFFFFu;
dstAddrHi = (Uint16)(((Uint32)(dmaXmtConfig.dmacdsal)) >> 15) &0xFFFFu;
dstAddrLo = (Uint16)(((Uint32)(dmaXmtConfig.dmacdsal)) << 1) & 0xFFFFu;
在進(jìn)行中斷處理是時(shí),要注意執(zhí)行的順序,首先要保存原來的中斷向量表,再清除原來的中斷,然后將局部中斷允許位開放(即關(guān)屏蔽位),開全局中斷,最后將中斷服務(wù)程序填入中斷向量表。
old_intm = IRQ_globalDisable();
IRQ_clear(xmtEventId);
IRQ_enable(xmtEventId);
IRQ_setVecs(0x10000);
IRQ_plug(xmtEventId,&dmaXmtIsr);
在程序任務(wù)完成之后,還要記得還原中斷,關(guān)掉Mcbsp和DMA。
??? MCBSP_close(hMcbspr);
??? DMA_close(hDmaRcv);
DMA_close(hDmaXmt);
DMA_stop(hDmaXmt);
? IRQ_disable(xmtEventId);
DMA_stop(hDmaRcv);
? IRQ_disable(rcvEventId);
在設(shè)定的控制字下,串口1將以CPU時(shí)鐘頻率的1/70發(fā)出幀定位信號(hào),寬度為一個(gè)碼元長(zhǎng)度,上升沿有效,以幀定位信號(hào)的1/80發(fā)出時(shí)鐘定位信號(hào)(因?yàn)橐粠?0個(gè)元素),也是上升沿有效,發(fā)送元素是32bit的數(shù),這是因?yàn)榘l(fā)散的數(shù)據(jù)是復(fù)數(shù),分為虛部和實(shí)部,先放實(shí)部后放虛部,所以一個(gè)元素是32個(gè)bit。
串口2是接收端,接收外部幀同步信號(hào)和時(shí)鐘同步信號(hào)用來同步。外部傳來的各種信號(hào)和數(shù)據(jù)格式和串口1發(fā)送的相同,不過收的時(shí)鐘定位信號(hào)是下降沿有效。
??? 在DMA方面,通道4是發(fā)送通道,通道5是接收通道,同步事件分別是發(fā)送串口和接收串口,在一個(gè)數(shù)據(jù)串口接收到了后會(huì)發(fā)中斷給DMA,使其接收數(shù)據(jù)或傳下一個(gè)數(shù)據(jù),所以在發(fā)端,需要手工先送一個(gè)數(shù)據(jù)過去。
3? 性能分析
可靠性以外,速度是一個(gè)通信系統(tǒng)最重要的評(píng)估因素,而數(shù)據(jù)的處理速度在很大程度上限制了傳輸速度,成為了提高系統(tǒng)速度的瓶頸。在設(shè)計(jì)中對(duì)系統(tǒng)傳輸由于是用DMA和Mcbsp的結(jié)合使用,速度超出了其他程序的執(zhí)行速度,只要傳輸在主函數(shù)的執(zhí)行時(shí)間內(nèi)完成就不會(huì)造成系統(tǒng)的阻塞,所以這部分只測(cè)試和評(píng)估各程序的執(zhí)行速度,傳輸?shù)臅r(shí)鐘定位脈沖是對(duì)CPU時(shí)鐘的35分頻遠(yuǎn)遠(yuǎn)快于處理速度,忽略它的測(cè)試不會(huì)對(duì)整個(gè)測(cè)試有很大影響。
系統(tǒng)數(shù)據(jù)的傳輸速度達(dá)到100kbit/s,傳輸只要在上次數(shù)據(jù)處理完前完成就可以不計(jì)算傳輸?shù)乃俣龋园凑瘴覀兊念A(yù)期速度,和我們DSP的CPU時(shí)鐘140MHz,可以算出所有的數(shù)據(jù)要在多少條指令周期內(nèi)完成才不會(huì)對(duì)下一階段的任務(wù)產(chǎn)生影響,而CCS就有專門的測(cè)試工具幫助我們測(cè)試執(zhí)行的指令周期。期望的最大執(zhí)行周期為140÷125×64=71680條指令周期。
由CCS自帶的時(shí)間測(cè)試是以執(zhí)行周期為單位的,在程序沒有進(jìn)行編譯優(yōu)化時(shí),我們測(cè)試得各部分和主函數(shù)的執(zhí)行速度如圖2所示:
?
圖2 未優(yōu)化前的程序執(zhí)行時(shí)間測(cè)試結(jié)果
在此結(jié)果中,我們可以看到main函數(shù)的執(zhí)行時(shí)間是39786個(gè)指令周期,完全可以滿足前面算出的最大指令執(zhí)行周期。順便一提,在這個(gè)測(cè)試工具中還可以看到所編譯的程序代碼的大小。
在由CCS自帶的優(yōu)化工具進(jìn)行調(diào)試的優(yōu)化后(即o2優(yōu)化),程序代碼的長(zhǎng)度和執(zhí)行時(shí)間還可以大大的縮短。其結(jié)果見圖3所示:
?
圖3 用參數(shù)o2優(yōu)化后的程序測(cè)試
比較圖2和圖3,可以看出經(jīng)過優(yōu)化后的程序不僅在代碼長(zhǎng)度上減少了進(jìn)40%,在執(zhí)行速度上更是提高了2倍以上,有的子程序甚至提高了4-5倍。系統(tǒng)效率有了很大的提高,并且有較大的余量來實(shí)現(xiàn)其他任務(wù)。
4? 結(jié)論
實(shí)現(xiàn)了OFDM系統(tǒng)基帶系統(tǒng)的DSP實(shí)現(xiàn),實(shí)現(xiàn)基帶信號(hào)的發(fā)送與接收??紤]到物理層的時(shí)延要求和實(shí)現(xiàn)的復(fù)雜度,本系統(tǒng)采用串口和DMA結(jié)合的方法,對(duì)信號(hào)幀進(jìn)行處理,將DSP核心處理單元解放出來,能完成復(fù)雜的信號(hào)處理任務(wù)。我們?cè)O(shè)計(jì)的系統(tǒng)數(shù)據(jù)的傳輸速度達(dá)到100kbit/s,如果要達(dá)到更高的傳輸速率,可以改用更先進(jìn)的DSP型號(hào)。
評(píng)論