利用電力線作為信道進行通信是解決“最后一公里”問題的一個很好的方法。然而電力線作為通信信道,存在著高噪聲、多徑效應(yīng)和衰落的特點。OFDM技術(shù)能夠在抗多徑干擾、信號衰減的同時保持較高的數(shù)據(jù)傳輸速率,在具體實現(xiàn)中還能夠利用離散傅立葉變換簡化調(diào)制解調(diào)模塊的復(fù)雜度,因此它在電力線高速通信系統(tǒng)中的應(yīng)用有著非常樂觀的前景。文中給出一種基于正交頻分復(fù)用技術(shù)(OFDM技術(shù))的調(diào)制解調(diào)器的設(shè)計方案。 1 OFDM原理 OFDM全稱為正交頻分復(fù)用(Orthogonal Frequency Division Multiplexing),其基本思想是把高速數(shù)據(jù)流經(jīng)過串/并變換,分成幾個低比特率的數(shù)據(jù)流,經(jīng)過編碼、交織,它們之間具有一定的相關(guān)性,然后用這些低速率的數(shù)據(jù)流調(diào)制多個正交的子載波并迭加在一起構(gòu)成發(fā)送信號。每個數(shù)據(jù)流僅占用帶寬的一部分,系統(tǒng)由許多子載波組成。在接收端用同樣數(shù)量的載波對發(fā)送信號進行相干接收,獲得低速率信息數(shù)據(jù)后,再通過并/串變換得到原來的高速信號。從而降低子載波上的碼率,加長碼元的持續(xù)時間,加強時延擴展的抵抗力。 在OFDM中,為了提高頻帶利用率,令各載波上的信號頻譜相互重疊,但載波間隔的選擇要使這些載波在整個符號周期上正交,即相加于符號周期上的任何兩個子載波乘積為零。這樣,即使各載波上的信號頻譜間存在重疊,也能無失真復(fù)原。當(dāng)載波間最小間隔等于符號周期的倒數(shù)的整數(shù)倍時,可滿足正交性條件。實際上為實現(xiàn)最大頻譜效率,一般取載波間最小間隔等于符號周期的倒數(shù)。 OFDM允許各載波間頻率互相混疊,采用了基于載波頻率正交的IFFT/FFT調(diào)制,直接在基帶處理。1971年,Weinstein和Ebert將DFT引入到并行傳輸系統(tǒng)的調(diào)制解調(diào)部分。應(yīng)用時去掉了頻分復(fù)用所需要的子載波振蕩器組、解調(diào)部分的帶通濾波器組,并且可以利用FFT的專用器件實現(xiàn)全數(shù)字化的調(diào)制解調(diào)過程。 OFDM技術(shù)具有頻譜利用率高、抗多徑干擾能力強、易于實現(xiàn)等優(yōu)點,尤其適于多徑效應(yīng)嚴(yán)重的寬帶傳輸系統(tǒng),是一門具有發(fā)展前景、非常適合電力線高速數(shù)字通信的新興技術(shù)。 2 電力線載波通信系統(tǒng)結(jié)構(gòu) Homeplug是工業(yè)界第一個電力線家庭網(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ù)符號時間Td = 256;T=17.07μs 循環(huán)前綴時間Tcp = 172;T=11.47μs OFDM符號時間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)的回波干擾。但是同時也付出頻帶利用率僅0.59B/Hz和損失功率2.23dB的代價。考慮到電力線惡劣的通信環(huán)境,付出的代價是值得的。 電力線高速通信系統(tǒng)的系統(tǒng)結(jié)構(gòu)如圖1所示。輸入數(shù)據(jù)在OFDM信號調(diào)制部分依次經(jīng)過串/并變換、IFFT、加入循環(huán)前綴、并/串變換后,輸出調(diào)制后的信號,其頻帶范圍為0~15MHz、數(shù)據(jù)速率為8.97MB。經(jīng)過調(diào)制的信號經(jīng)過數(shù)/模變換和上變頻后,通過系統(tǒng)耦合部分進入電力線。 電力線上的信號通過系統(tǒng)耦合部分,輸出的信號通過下變頻、模/數(shù)變換后輸入給OFDM信號解調(diào)部分。在經(jīng)過串/并變換、去除循環(huán)前綴、FFT、并/串變換后,輸出串行數(shù)據(jù)流。 3 OFDM調(diào)制解調(diào)器的硬件實現(xiàn) 基于TMS320C6201的OFDM調(diào)制解調(diào)器的硬件實現(xiàn)分別如圖2和圖3?1?所示。 ![]() ![]() 4 OFDM在DSP上的軟件實現(xiàn) 調(diào)制部分的子程序被系統(tǒng)調(diào)用前,發(fā)送的數(shù)據(jù)已裝入數(shù)據(jù)存儲器。子程序被調(diào)用時,數(shù)據(jù)區(qū)的首地址以及長度被作為入口參數(shù)傳遞給子程序。程序執(zhí)行時首先進行一系列的配置工作,如配置DSP片內(nèi)外設(shè)以及數(shù)模轉(zhuǎn)換器的各種參數(shù)等。之后,串口中斷產(chǎn)生,中斷服務(wù)程序自動依次讀取發(fā)送存儲器中的內(nèi)容,經(jīng)串口輸出給數(shù)模轉(zhuǎn)換器。然后程序從數(shù)據(jù)存儲區(qū)讀取一幀數(shù)據(jù),并行放入IFFT工作區(qū)的相應(yīng)位置,隨后進行IFFT以及加入循環(huán)前綴(即復(fù)制數(shù)據(jù)的后若干位插入到數(shù)據(jù)的前段)。所得數(shù)據(jù)存入發(fā)送存儲器以便中斷服務(wù)程序?qū)⑵漭敵?#65377; 解調(diào)部分的程序首先執(zhí)行DSP片內(nèi)外設(shè)以及模數(shù)轉(zhuǎn)換器的配置,然后開串行口,接收中斷,使接收中斷程序接收來自模數(shù)轉(zhuǎn)換器的采樣數(shù)據(jù),并將采樣數(shù)據(jù)依次存入接收存儲器。每得到一幀數(shù)據(jù),程序首先去除循環(huán)前綴(即刪去數(shù)據(jù)的前若干位),然后對去除循環(huán)前綴后的數(shù)據(jù)進行FFT變換。 圖3 OFDM調(diào)制解調(diào)器電路原理圖 5 FFT在TMS320C6201上的優(yōu)化算法 表1給出256點Radix2FFT和Radix4FFT在TMS320C6201上所需的指令周期,以及在不同的工作頻率下完成FFT所需的時間。 由表1可以看出,在TMS320C6201上采用Raidx4算法比采用Radix2算法更加高效。并且,為了滿足系統(tǒng)需求,即在17.07μs之內(nèi)完成256個復(fù)數(shù)點的FFT運算,TMS320C6201必須采用200MHz的工作頻率。 表1 6201上實現(xiàn)256點FFT所需的時間 TMS320C6201工作頻率 256點復(fù)數(shù)FFT運算所需的總指令周期數(shù) 256點FFT所需時間 R2 100MHz 4225 42.25μs 200MHz 4225 21.1μs R4 100MHz 2763 27.63μs 200MHz 2763 13.8μs TMS320C6201的數(shù)據(jù)通路和流水線工作方式是對算法進行優(yōu)化從而獲得高性能的基礎(chǔ)。TMS320C6201有兩個可以進行數(shù)據(jù)處理的數(shù)據(jù)通路A和B2,每個通路有4個功能單元(.L.S.M.D)和一個包括16個32位寄存器的寄存器組。功能單元執(zhí)行邏輯、位移、乘法、加法和數(shù)據(jù)尋址等操作。兩個數(shù)據(jù)尋址單元(.D1和.D2)專門負(fù)責(zé)寄存器組和存儲器之間的數(shù)據(jù)傳遞。在同一時刻,這些功能單元能夠并行地執(zhí)行多條指令。TMS320C6201對任何指令的操作都能分為幾個子操作,每個子操作由不同單元完成。對每個單元來說,每個時鐘周期可進入一條新指令,這樣在不同周期內(nèi),不同單元可以處理不同的指令,這種工作方式稱為“流水線”工作方式。TMS320C6201的特殊結(jié)構(gòu),可使8條指令同時通過流水線的每個節(jié)拍,從而大大提高了機器的吞吐量。 為使代碼達(dá)到最大效率,程序?qū)⒈M可能將指令安排為并行執(zhí)行。為使指令并行操作,程序確定指令間的相關(guān)性,即一條指令必須發(fā)生在另一條指令之后。根據(jù)TMS320C6201的數(shù)據(jù)通路和流水線工作方式,在此給出一種高效實現(xiàn)16點Radix4FFT的方法。其基本思想是分解傳統(tǒng)的FFT蝶型算法循環(huán)體,將其分別展開在A、B通路內(nèi)計算兩個FFT蝶型算法。每個蝶型算法分別只分配自己這一側(cè)的寄存器組和功能單元。這樣在循環(huán)體內(nèi)兩個蝶型算法是完全不相關(guān)的,能夠并行執(zhí)行。下面給出基于C.S.Burrus和T.W.Parks的Radix4FFT算法 3 的優(yōu)化算法的代碼實現(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 wa2=wa1+wa1; wb2=wb1+wb1; //since here most of the folow-ering two instructions areparallel 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 } } |