《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 通信與網(wǎng)絡(luò) > 業(yè)界動(dòng)態(tài) > 基于DSP的電力線載波OFDM調(diào)制解調(diào)器

基于DSP的電力線載波OFDM調(diào)制解調(diào)器

2008-08-07
作者:倪 亮1, 趙正予1, 李家欣2

  摘? 要: 提出一種基于OFDM的電力線寬帶高速通信系統(tǒng)" title="通信系統(tǒng)">通信系統(tǒng)的實(shí)現(xiàn)方案,討論了OFDM應(yīng)用于電力線載波通信的原理,探討了通信系統(tǒng)調(diào)制解調(diào)" title="調(diào)制解調(diào)">調(diào)制解調(diào)部分的硬件實(shí)現(xiàn)和軟件流程,并對(duì)其關(guān)鍵的FFT算法進(jìn)行了優(yōu)化。

  關(guān)鍵詞: 電力線載波 DSP OFDM FFT

  

??? 利用電力線作為信道進(jìn)行通信,是解決“最后一公里”問題的一個(gè)很好的方法。然而電力線作為通信信道,存在著高噪聲、多徑效應(yīng)和衰落的特點(diǎn)。OFDM技術(shù)能夠在抗多徑干擾、信號(hào)衰減的同時(shí)保持較高的數(shù)據(jù)傳輸速率,在具體實(shí)現(xiàn)中還能夠利用離散傅立葉變換簡化調(diào)制解調(diào)模塊的復(fù)雜度,因此它在電力線高速通信系統(tǒng)中的應(yīng)用有著非常樂觀的前景。文中給出一種基于正交頻分復(fù)用技術(shù)(OFDM技術(shù))的調(diào)制解調(diào)器的設(shè)計(jì)方案。

1 OFDM原理

  OFDM全稱為正交頻分復(fù)用(Orthogonal Frequency Division Multiplexing),其基本思想是把高速數(shù)據(jù)流經(jīng)過串/并變換,分成幾個(gè)低比特率的數(shù)據(jù)流,經(jīng)過編碼、交織,它們之間具有一定的相關(guān)性,然后用這些低速率的數(shù)據(jù)流調(diào)制多個(gè)正交的子載波并迭加在一起構(gòu)成發(fā)送信號(hào)。每個(gè)數(shù)據(jù)流僅占用帶寬的一部分,系統(tǒng)由許多子載波組成。在接收端用同樣數(shù)量的載波對(duì)發(fā)送信號(hào)進(jìn)行相干接收,獲得低速率信息數(shù)據(jù)后,再通過并/串變換得到原來的高速信號(hào)。從而降低子載波上的碼率,加長碼元的持續(xù)時(shí)間,加強(qiáng)時(shí)延擴(kuò)展的抵抗力。

  在OFDM中,為了提高頻帶利用率,令各載波上的信號(hào)頻譜相互重疊,但載波間隔的選擇要使這些載波在整個(gè)符號(hào)周期上正交,即相加于符號(hào)周期上的任何兩個(gè)子載波乘積為零。這樣,即使各載波上的信號(hào)頻譜間存在重疊,也能無失真復(fù)原。當(dāng)載波間最小間隔等于符號(hào)周期的倒數(shù)的整數(shù)倍時(shí),可滿足正交性條件。實(shí)際上為實(shí)現(xiàn)最大頻譜效率,一般取載波間最小間隔等于符號(hào)周期的倒數(shù)。

  OFDM允許各載波間頻率互相混疊,采用了基于載波頻率正交的IFFT/FFT調(diào)制,直接在基帶處理。1971年,Weinstein和Ebert將DFT引入到并行傳輸系統(tǒng)的調(diào)制解調(diào)部分。應(yīng)用時(shí)去掉了頻分復(fù)用所需要的子載波振蕩器組、解調(diào)部分的帶通濾波器組,并且可以利用FFT的專用器件實(shí)現(xiàn)全數(shù)字化的調(diào)制解調(diào)過程。

  OFDM技術(shù)具有頻譜利用率高、抗多徑干擾能力強(qiáng)、易于實(shí)現(xiàn)等優(yōu)點(diǎn),尤其適于多徑效應(yīng)嚴(yán)重的寬帶傳輸系統(tǒng),是一門具有發(fā)展前景、非常適合電力線高速數(shù)字通信的新興技術(shù)。

2 電力線載波通信系統(tǒng)結(jié)構(gòu)

  Homeplug是工業(yè)界第一個(gè)電力線家庭網(wǎng)絡(luò)標(biāo)準(zhǔn)。系統(tǒng)參考Homeplug采用的頻譜范圍4.5MHz~21MHz,并在Homeplug物理參數(shù)的基礎(chǔ)上確定本系統(tǒng)參數(shù)為:

  采樣頻率fs=1/T = 15MHz

  數(shù)據(jù)符號(hào)時(shí)間Td = 256×T=17.07μs

  循環(huán)前綴" title="循環(huán)前綴">循環(huán)前綴時(shí)間Tcp = 172×T=11.47μs

  OFDM符號(hào)時(shí)間Ts = 428×T=28.5μs

  數(shù)據(jù)子載波數(shù)為256

  子載波間隔Δf=1/Td=0.05858MHz

  總子載波占用帶寬? N×Δf=15MHz

  由于加入了11.47μs的循環(huán)前綴,系統(tǒng)可以消除11.47μs以內(nèi)的回波干擾。但是同時(shí)也付出頻帶利用率僅0.59B/Hz和損失功率2.23dB的代價(jià)。考慮到電力線惡劣的通信環(huán)境,付出的代價(jià)是值得的。

  電力線高速通信系統(tǒng)的系統(tǒng)結(jié)構(gòu)如圖1所示。輸入數(shù)據(jù)在OFDM信號(hào)調(diào)制部分依次經(jīng)過串/并變換、IFFT、加入循環(huán)前綴、并/串變換后,輸出調(diào)制后的信號(hào),其頻帶范圍為0~15MHz、數(shù)據(jù)速率為8.97MB。經(jīng)過調(diào)制的信號(hào)經(jīng)過數(shù)/模變換和上變頻后,通過系統(tǒng)耦合部分進(jìn)入電力線。

?

  電力線上的信號(hào)通過系統(tǒng)耦合部分,輸出的信號(hào)通過下變頻、模/數(shù)變換后輸入給OFDM信號(hào)解調(diào)部分。在經(jīng)過串/并變換、去除循環(huán)前綴、FFT、并/串變換后,輸出串行數(shù)據(jù)流。

3 OFDM調(diào)制解調(diào)器的硬件實(shí)現(xiàn)

  基于TMS320C6201的OFDM調(diào)制解調(diào)器的硬件實(shí)現(xiàn)分別如圖2和圖3[1]所示。PCI總線實(shí)現(xiàn)OFDM系統(tǒng)和計(jì)算機(jī)之間的通信。S5933是32bit PCI控制器。FPGA是系統(tǒng)的控制核心,系統(tǒng)的邏輯控制信號(hào)及時(shí)鐘由FPGA提供。DSP部分為系統(tǒng)的核心,完成OFDM的調(diào)制與解調(diào)。

?

?

  PCI總線是寬度為32bits或64bits的地址數(shù)據(jù)復(fù)用線,支持猝發(fā)傳輸,數(shù)據(jù)率為132Mbps,可滿足高速數(shù)據(jù)要求。PCI總線能自動(dòng)配置參數(shù),定義配置空間,使設(shè)備具備自動(dòng)配置功能,支持即插即用,采用多路復(fù)用技術(shù),支持多處理器64位尋址、5V和3.3V環(huán)境。其獨(dú)特的同步操作及對(duì)總線主控功能,可確保CPU能與總線同步操作,而無需等待總線完成任務(wù)。

  S5933是AMCC(Applied Micro Circuits Corporation)公司開發(fā)的32bit PCI控制器,具備強(qiáng)大、靈活的PCI接口功能,適用于高速數(shù)據(jù)傳輸場合。S5933芯片的特點(diǎn)是符合PCI2.1規(guī)范,支持PCI主、從兩種工作方式" title="工作方式">工作方式,支持多種數(shù)據(jù)傳輸方式,適用于不同的數(shù)據(jù)傳輸場合,支持PCI全速傳輸,提供8/16/32bit的Add-On用戶總線,有高低字節(jié)順序調(diào)整功能,支持穿行和并行的BOOT/POST碼功能,160腳PQFP封裝。

  DSP部分選用TI公司的TMS320C6201。TMS320C6201有32位的外部存儲(chǔ)接口EMIF,為CPU訪問外圍設(shè)備提供了無縫接口。為了便于多信道數(shù)字信號(hào)處理,TMS320C6201配備了多信道帶緩沖能力的串口" title="串口">串口McBSP。McBSP的功能非常強(qiáng)大,除具有一般DSP串口功能之外,還可以支持T1/E1、ST-BUS、IOM2、SPI、IIS等不同標(biāo)準(zhǔn)。TMS32C6201提供的16位主機(jī)接口(HPI)使得主機(jī)設(shè)備可以直接訪問DSP的存儲(chǔ)空間。通過內(nèi)部或外部存儲(chǔ)空間,主機(jī)可以與DSP交換信息,也可以利用HPI直接訪問映射進(jìn)存儲(chǔ)空間的外圍設(shè)備。TMS320C6201的DMA控制器有四個(gè)獨(dú)立的可編程通道,可以同時(shí)進(jìn)行四種不同的DMA操作。

4 OFDM在DSP上的軟件實(shí)現(xiàn)

  調(diào)制部分的子程序被系統(tǒng)調(diào)用前,發(fā)送的數(shù)據(jù)已裝入數(shù)據(jù)存儲(chǔ)器。子程序被調(diào)用時(shí),數(shù)據(jù)區(qū)的首地址以及長度被作為入口參數(shù)傳遞給子程序。程序執(zhí)行時(shí)首先進(jìn)行一系列的配置工作,如配置DSP片內(nèi)外設(shè)以及數(shù)模轉(zhuǎn)換器的各種參數(shù)等。之后,串口中斷產(chǎn)生,中斷服務(wù)程序自動(dòng)依次讀取發(fā)送存儲(chǔ)器中的內(nèi)容,經(jīng)串口輸出給數(shù)模轉(zhuǎn)換器。然后程序從數(shù)據(jù)存儲(chǔ)區(qū)讀取一幀數(shù)據(jù),并行放入IFFT工作區(qū)的相應(yīng)位置,隨后進(jìn)行IFFT以及加入循環(huán)前綴(即復(fù)制數(shù)據(jù)的后若干位插入到數(shù)據(jù)的前段)。所得數(shù)據(jù)存入發(fā)送存儲(chǔ)器以便中斷服務(wù)程序?qū)⑵漭敵觥?/P>

  解調(diào)部分的程序首先執(zhí)行DSP片內(nèi)外設(shè)以及模數(shù)轉(zhuǎn)換器的配置,然后開串行口,接收中斷,使接收中斷程序接收來自模數(shù)轉(zhuǎn)換器的采樣數(shù)據(jù),并將采樣數(shù)據(jù)依次存入接收存儲(chǔ)器。每得到一幀數(shù)據(jù),程序首先去除循環(huán)前綴(即刪去數(shù)據(jù)的前若干位),然后對(duì)去除循環(huán)前綴后的數(shù)據(jù)進(jìn)行FFT變換。

5 FFT在TMS320C6201上的優(yōu)化算法

  表1給出256點(diǎn)Radix2FFT和Radix4FFT在TMS320

?

?

  C6201上所需的指令周期,以及在不同的工作頻率下完成FFT所需的時(shí)間。

  由表1可以看出,在TMS320C6201上采用Raidx4算法比采用Radix2算法更加高效。并且,為了滿足系統(tǒng)需求,即在17.07μs之內(nèi)完成256個(gè)復(fù)數(shù)點(diǎn)的FFT運(yùn)算,TMS320C6201必須采用200MHz的工作頻率。

  TMS320C6201的數(shù)據(jù)通路和流水線工作方式是對(duì)算法進(jìn)行優(yōu)化從而獲得高性能的基礎(chǔ)。TMS320C6201有兩個(gè)可以進(jìn)行數(shù)據(jù)處理的數(shù)據(jù)通路A和B[2],每個(gè)通路有4個(gè)功能單元(.L.S.M.D)和一個(gè)包括16個(gè)32位寄存器的寄存器組。功能單元執(zhí)行邏輯、位移、乘法、加法和數(shù)據(jù)尋址等操作。兩個(gè)數(shù)據(jù)尋址單元(.D1和.D2)專門負(fù)責(zé)寄存器組和存儲(chǔ)器之間的數(shù)據(jù)傳遞。在同一時(shí)刻,這些功能單元能夠并行地執(zhí)行多條指令。TMS320C6201對(duì)任何指令的操作都能分為幾個(gè)子操作,每個(gè)子操作由不同單元完成。對(duì)每個(gè)單元來說,每個(gè)時(shí)鐘周期可進(jìn)入一條新指令,這樣在不同周期內(nèi),不同單元可以處理不同的指令,這種工作方式稱為“流水線”工作方式。TMS320C6201的特殊結(jié)構(gòu),可使8條指令同時(shí)通過流水線的每個(gè)節(jié)拍,從而大大提高了機(jī)器的吞吐量。

為使代碼達(dá)到最大效率,程序?qū)⒈M可能將指令安排為并行執(zhí)行。為使指令并行操作,程序確定指令間的相關(guān)性,即一條指令必須發(fā)生在另一條指令之后。根據(jù)TMS320C6201的數(shù)據(jù)通路和流水線工作方式,在此給出一種高效實(shí)現(xiàn)16點(diǎn)Radix4FFT的方法。其基本思想是分解傳統(tǒng)的FFT蝶型算法循環(huán)體,將其分別展開在A、B通路內(nèi)計(jì)算兩個(gè)FFT蝶型算法。每個(gè)蝶型算法分別只分配自己這一側(cè)的寄存器組和功能單元。這樣在循環(huán)體內(nèi)兩個(gè)蝶型算法是完全不相關(guān)的,能夠并行執(zhí)行。下面給出基于C.S.Burrus和T.W.Parks的Radix4FFT算法[3]的優(yōu)化算法的代碼實(shí)現(xiàn)。

  void radix4(int n, short x[], short w[])

  {

???? ?? int n1, n2, ie, wa1, wa2, wa3, wb1, wb2, wb3, ia0, ia1, ia2, ia3, ib0, ib1, ib2, ib3, j, k;?????? short ta, tb, ra1, ra2, rb1, rb2, sa1, sa2, sb1, sb2, coa1, coa2, coa3, cob1,cob2, cob3, sia1, sia2, sia3, sib1, sib2, sib3;

?????? n2=n;

?????? ie=1;

?????? for(k=n;k>1;k>>=2)

? {       ???????????????? //number of stage

?   n1=n2;?????????????????????????????

?   n2>>=2;       ?????? //distance between input datas

?   wa1=0;

?   for(j=0;j

????????????? wb1=wa1+ie;

????????????? wa2=wa1+wa1;

????????????? wb2=wb1+wb1; ?????? //since here,most of the folowering two instructions are parallel

  ??????????wa3=wa2+wa1;

????????????? wb3=wb2+wb1; ???????????????????? ??????????????????

????????????? coa1=w[wa1*2+1];

????????????? cob1=w[wb1*2+1]; ???????? ??

????????????? sia1=w[wa1*2];

????????????? sib1=w[wb1*2]; ???????????????????? ??

????????????? coa2=w[wa2*2+1];

????????????? cob2=w[wb2*2+1]; ? ?

????????????? sia2=w[wa2*2];

????????????? sib2=w[wb2*2];??????????????? ?

????????????? coa3=w[wa3*2+1];

????????????? cob3=w[wb3*2+1]; ???????? ?

????????????? sia3=w[wa3*2];

????????????? sib3=w[wb3*2];????????

????????????? wa1=wb1+ie;

????     for(ia0=j, ib0=j+1; ia0

  {//loop of two butterflies caculation

???????????????????? ia1=ia0+n2;

???????????????????? ib1=ib0+n2;???????????????

???????????????????? ia2=ia1+n2;

???????????????????? ib2=ib1+n2;???????????????

???????????????????? ia3=ia2+n2;

???????????????????? ib3=ib2+n2;????????

???????????????????? ra1=x[2*ia0]+x[2*ia2];

????????????? ?????? rb1=x[2*ib0]+x[2*ib2];?????

???????????????????? ra1=x[2*ia0]-x[2*ia2];

???????????????????? rb1=x[2*ib0]-x[2*ib2];

???????????????????? ta=x[2*ia1]+x[2*ia3];

???????????????????? tb=x[2*ib1]+x[2*ib3];

???????????????????? x[2*ia0]=ra1+ta;????????????? ?// x[2*ia0]

???????????????????? x[2*ib0]=rb1+tb;????????????? ?// x[2*ia0]

???????????????????? ra1=ra1-ta;

???????????????????? rb1=rb1-tb;??????????????????????

???????????????????? sa1=x[2*ia0+1]+x[2*ia2+1];

???????????????????? sb1=x[2*ib0+1]+x[2*ib2+1];????

???????????????????? sa2=x[2*ia0+1]-x[2*ia2+1];

???????????????????? sb2=x[2*ib0+1]-x[2*ib2+1];

???????????????????? ta=x[2*ia1+1]+x[2*ia3+1];

???????????????????? tb=x[2*ib1+1]+x[2*ib3+1];

???????????????????? x[2*ia0+1]=sa1+ta;????

???????????????????? x[2*ib0+1]=sb1+tb;???

???????????????????? sa1=sa1-ta;

???????????????????? sb1=sb1-tb;

???????????????????? x[2*ia2]=(ra1*coa2+sa1*sia2)>>15;

???????????????????? x[2*ib2]=(rb1*cob2+sb2*sib2)????? ?>>15;

???????????????????? x[2*ia2+1]=(sa1*coa2-ra1*sia2)??? ?>>15;

???????????????????? x[2*ib2+1]=(sb1*cob2-rb1*sib2)???? >>15;

???????????????????? ta=x[2*ia1+1]-x[2*ia3+1];

???????????????????? ra1=ra2+ta;

???????????????????? rb1=rb2+tb;

???????????????????? ra2=ra2-ta;

???????????????????? rb2=rb2-tb;

???????????????????? ta=x[2*ia1]-x[2*ia3];

???????????????????? tb=x[2*ib1]-x[2*ib3];

???????????????????? sa1=sa2-ta;

???????????????????? sb1=sb2-tb;

???????????????????? sa2=sa2+ta;

???????????????????? sb2=sb2+tb;

???????????????????? x[2*ia1]=(ra1*coa1+sa1*sia1)????? ?>>15;

???????????????????? x[2*ib1]=(rb1*cob1+sb1*sib1)????  >>15;

???????????????????? x[2*ia1+1]=(sa1*coa1-ra1*sia1)??  >>15;

???????????????????? x[2*ib1+1]=(sb1*cob1-rb1*sib1)?   >>15;

???????????????????? x[2*ia3]=(ra2*coa3+sa2*sia3)???? ? >>15;

???????????????????? x[2*ib3]=(rb2*cob3+sb2*sib3)????? ?>>15;

???????????????????? x[2*ia3+1]=(sa2*coa3-ra2*sia3)??? ?>>15;

???????????????????? x[2*ib3+1]=(sb2*cob3-rb2*sib3)???? >>15;

???????????????????? }

????????????? }

?????? ie <<=2;

?????? }

}

?

參考文獻(xiàn)

1 Interfacing the TMS320C6000 EMIF to a PCI Bus Using?the AMCC S5933 PCI Controller. Texas Instrument Application Report, September 2001

2 任麗香,馬淑芬,李方慧. TMS320C6000系列DSPs的原理與應(yīng)用. 北京:電子工業(yè)出版社,2000

3 C.S.Burrus, T.W.Parks. DFT/FFT and Convolution Algorithms and Implemention. John Wiley & Sons, New York,

? 1985

4 汪曉巖,易皓涌,樊昊,孫榮久.OFDM技術(shù)及其在電力線通信的應(yīng)用.電力系統(tǒng)通信,2001;(1)

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請(qǐng)及時(shí)通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。