本發(fā)明屬于無線通信技術(shù)領(lǐng)域,特別涉及一種維特比解調(diào)方法,可用于高傳輸速率通信系統(tǒng)中對八進(jìn)制連續(xù)相位頻移鍵控8cpfsk的解調(diào)。
背景技術(shù):
連續(xù)相位頻移鍵控cpfsk是一種十分高效的調(diào)制技術(shù),具有包絡(luò)恒定、相位連續(xù)、帶外功率較小和相位記憶特性的優(yōu)點(diǎn),但制約cpfsk技術(shù)廣泛應(yīng)用的因素之一是復(fù)雜度極高的解調(diào)器。
對cpfsk信號進(jìn)行解調(diào)一般采用維特比算法來實(shí)現(xiàn)最大似然序列檢測。維特比算法可以顯著降低誤碼率,但是硬件實(shí)現(xiàn)極為復(fù)雜,其解調(diào)器的復(fù)雜度與系統(tǒng)狀態(tài)數(shù)成正比,隨著約束長度的增加而指數(shù)增長。因此,在狀態(tài)數(shù)較多、約束長度較長的情況下,要實(shí)現(xiàn)cpfsk信號的維特比解調(diào),有一定的挑戰(zhàn)性。顯然,在頻譜資源日益緊張、通信需求日益增長的今天,對高性能cpfsk解調(diào)技術(shù)的研究具有十分重要的理論和工程意義。
維特比算法由美國高通公司創(chuàng)始人andrewviterbi于1967年提出,因其性能卓越而得到了各國學(xué)者的廣泛關(guān)注。1984年anderson和mohan提出了維特比算法的m算法,通過減少“加比選”操作的狀態(tài)數(shù)目從而降低了維特比算法硬件實(shí)現(xiàn)的難度。1989年,duel-hallen和heegand提出單幸存路徑處理算法psp,通過減小存儲器容量以達(dá)到降低硬件實(shí)現(xiàn)難度的目的。
目前國內(nèi)外對維特比解調(diào)器的研究重點(diǎn)主要集中在加比選單元優(yōu)化、幸存路徑存儲優(yōu)化等方面。雖然已有許多方案可以實(shí)現(xiàn)簡單調(diào)制信號的維特比解調(diào),但是針對高信息速率調(diào)制方式,如八進(jìn)制連續(xù)相位頻移鍵控8cpfsk,還缺少可以保證可靠性的低復(fù)雜度實(shí)現(xiàn)方案。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于針對上述研究現(xiàn)狀,提出一種針對8cpfsk的維特比解調(diào)系統(tǒng),以在保證通信可靠性的前提下,實(shí)現(xiàn)對8cpfsk信號的低復(fù)雜度維特比解調(diào)。
為實(shí)現(xiàn)上述目的,發(fā)明本系統(tǒng)特征在于包括:
當(dāng)前路徑度量計(jì)算模塊:用于調(diào)用2個乘法器和2個加法器,將標(biāo)準(zhǔn)8cpfsk信號的實(shí)部iloc和虛部qloc,與接收到的8cpfsk信號的實(shí)部irec和虛部qrec做乘加運(yùn)算,再與當(dāng)前狀態(tài)的累積路徑度量dold累加,得到狀態(tài)轉(zhuǎn)移后的累積路徑度量dnew;
比較選擇模塊:用于利用fpga自帶的ip核,并行例化5個比較器,接收當(dāng)前路徑度量計(jì)算模塊輸出的計(jì)算結(jié)果,經(jīng)比較器比較后,輸出這些計(jì)算結(jié)果中的最大值dn;
暫存模塊:用于開辟10個寄存器,每個寄存器位寬為40比特,分為累積路徑度量暫存模塊和前向輸入暫存模塊,分別存儲10個狀態(tài)的最大累積路徑度量dn和該最大累積路徑度量的前向輸入in;
回溯模塊:用于例化1個比較器,比較回溯深度計(jì)數(shù)器cnt是否大于回溯深度10,如果cnt≤10則不輸出任何結(jié)果;如果cnt>10則逐級查詢累加距離暫存模塊,輸出維特比解調(diào)結(jié)果。
本系統(tǒng)的具體解調(diào)方法包括:
(1)根據(jù)8cpfsk信號的相位特征,定義10個系統(tǒng)狀態(tài)sn,其中n=0,1,2,…,9;
(2)根據(jù)不同的輸入和各個狀態(tài)之間的轉(zhuǎn)移關(guān)系,以及每次狀態(tài)轉(zhuǎn)移后的輸出,構(gòu)建8cpfsk狀態(tài)轉(zhuǎn)移表;
(3)根據(jù)當(dāng)前輸入及當(dāng)前系統(tǒng)狀態(tài),查詢8cpfsk狀態(tài)轉(zhuǎn)移表,得到狀態(tài)轉(zhuǎn)移的輸出,即8cpfsk信號的理論實(shí)部iloc和理論虛部qloc在rom中的存儲地址;
(4)從rom中讀取iloc和qloc,并與接收到的8cpfsk信號的實(shí)部irec和虛部qrec做乘加運(yùn)算,再累加上當(dāng)前狀態(tài)的累積路徑度量dold,得到狀態(tài)轉(zhuǎn)移后的累積路徑度量dnew;
(5)比較每一個狀態(tài)sn在不同輸入i下的累積路徑度量dnew,輸出該狀態(tài)dnew的最大值dn及該路徑的前向輸入in,同時回溯深度計(jì)數(shù)器cnt加1;
(6)判斷cnt是否到達(dá)回溯深度:若cnt≤10,則開辟第cnt級寄存器暫存步驟(5)的輸出結(jié)果,并返回步驟(3);若cnt>10,則達(dá)到回溯深度,執(zhí)行步驟(7);
(7)確定d0,d1,…,d9中的最大值,將該最大值對應(yīng)的系統(tǒng)狀態(tài)sn作為回溯的起點(diǎn),在第cnt級寄存器中回溯出第cnt-1級寄存器中存儲的前向輸入,再從第cnt-1級寄存器中回溯出第cnt-2級寄存器中的前向輸入,如此迭代下去,直至得到第1級寄存器中的前向輸入并輸出,完成一幀數(shù)據(jù)的維特比解調(diào);
(8)所有暫存dn的寄存器開始移位寄存,將后一級寄存器中的數(shù)據(jù)存儲到前一級寄存器中,實(shí)現(xiàn)寄存器的高度復(fù)用;
(9)清空所有寄存器和回溯深度計(jì)數(shù)器,返回步驟(3),對下一幀數(shù)據(jù)進(jìn)行維特比解調(diào)。
本發(fā)明具有以下優(yōu)點(diǎn):
1、本發(fā)明由于采用性能高效的高階連續(xù)相位頻移鍵控8cpfsk,以及高速率的驅(qū)動時鐘,因此可達(dá)到150mb/s的高信息速率;
2、本發(fā)明采用流水解調(diào)方式,在待解調(diào)數(shù)據(jù)輸入解調(diào)模塊延遲數(shù)個時鐘之后,能夠連續(xù)輸出解調(diào)結(jié)果,實(shí)現(xiàn)了對數(shù)據(jù)的連續(xù)實(shí)時解調(diào);
3、本發(fā)明通過移位寄存和流水輸入方式實(shí)現(xiàn)了暫存模塊寄存器的高度復(fù)用,最大限度地節(jié)約了fpga資源;
4、本發(fā)明實(shí)現(xiàn)復(fù)雜度低,可以在實(shí)際中廣泛應(yīng)用。
附圖說明
圖1是本發(fā)明的系統(tǒng)框圖;
圖2是本發(fā)明的方法實(shí)現(xiàn)流程圖;
圖3是本發(fā)明在不同回溯長度下維特比解調(diào)性能對比圖;
圖4是本發(fā)明的上位機(jī)測試圖。
具體實(shí)施方式
參照圖1,本發(fā)明針對八進(jìn)制連續(xù)相位頻移鍵控的維特比解調(diào)系統(tǒng),包括:當(dāng)前路徑度量計(jì)算模塊、比較選擇模塊、暫存模塊和回溯模塊。其中:
當(dāng)前路徑度量計(jì)算模塊:用于調(diào)用2個乘法器和2個加法器,將標(biāo)準(zhǔn)8cpfsk信號的實(shí)部iloc和虛部qloc,與接收到的8cpfsk信號的實(shí)部irec和虛部qrec做乘加運(yùn)算,再與當(dāng)前狀態(tài)的累積路徑度量dold累加,得到狀態(tài)轉(zhuǎn)移后的累積路徑度量dnew。
比較選擇模塊:用于利用fpga自帶的ip核,并行例化5個比較器,接收當(dāng)前路徑度量計(jì)算模塊輸出的計(jì)算結(jié)果,經(jīng)比較器比較后,輸出這些計(jì)算結(jié)果中的最大值dn。
暫存模塊:用于開辟10個寄存器,每個寄存器位寬為40比特,分為累積路徑度量暫存模塊和前向輸入暫存模塊,分別存儲10個狀態(tài)的最大累積路徑度量dn和該最大累積路徑度量的前向輸入in。
回溯模塊:用于例化1個比較器,比較回溯深度計(jì)數(shù)器cnt是否大于回溯深度10,如果cnt≤10則不輸出任何結(jié)果;如果cnt>10則逐級查詢累加距離暫存模塊,輸出維特比解調(diào)結(jié)果。
本系統(tǒng)中,當(dāng)前路徑度量計(jì)算模塊是整個系統(tǒng)的核心,在10個并行的當(dāng)前路徑度量計(jì)算模塊同時工作時,對fpga的資源和時序都有非常高的要求。暫存模塊中寄存器的復(fù)用,是本發(fā)明減少資源消耗的關(guān)鍵,通過對寄存器進(jìn)行移位寄存,提高了寄存器的使用效率,最大限度地節(jié)約了fpga資源。當(dāng)前路徑度量計(jì)算模塊根據(jù)接收到的輸入信號計(jì)算出當(dāng)前路徑度量值,并將計(jì)算結(jié)果輸入到比較選擇模塊,選出最大值送入累加距離暫存模塊,并將此最大值對應(yīng)的前向輸入送入到前向輸入暫存模塊,循環(huán)執(zhí)行上述步驟直至滿足回溯條件,將暫存模塊的數(shù)據(jù)送入回溯模塊,回溯出最終解調(diào)結(jié)果并輸出,完成維特比解調(diào)。
參照圖2,本發(fā)明基于上述系統(tǒng)進(jìn)行維特比解調(diào)的方法,其實(shí)現(xiàn)步驟如下:
步驟1,定義系統(tǒng)狀態(tài)。
根據(jù)8cpfsk信號的相位特征,定義10個系統(tǒng)狀態(tài)sn,其中n=0,1,2,…,9,8cpfsk信號的相位
步驟2,構(gòu)建狀態(tài)轉(zhuǎn)移表。
根據(jù)不同的輸入和各個狀態(tài)之間的轉(zhuǎn)移關(guān)系,以及每次狀態(tài)轉(zhuǎn)移后的輸出,構(gòu)建8cpfsk狀態(tài)轉(zhuǎn)移表:
(2a)根據(jù)不同的碼元輸入input,將系統(tǒng)的原始狀態(tài)sn,1轉(zhuǎn)移到新的狀態(tài)sn,2,每一次狀態(tài)轉(zhuǎn)移得到一個輸出output;
(2b)將系統(tǒng)的原始狀態(tài)sn,1,碼元輸入input,新的狀態(tài)sn,2和輸出output按照由小到大的順序,依次存入ram中,共10個系統(tǒng)狀態(tài),由于每個新狀態(tài)可由8個原始狀態(tài)轉(zhuǎn)移得到,故共有80種狀態(tài)轉(zhuǎn)移方式,得到由80行4列組成的8cpfsk狀態(tài)轉(zhuǎn)移表,如表1。
表1中的每一行為一種狀態(tài)轉(zhuǎn)移方式,第1列為原始狀態(tài),第2列為碼元輸入,第3列為新狀態(tài),第4列為狀態(tài)轉(zhuǎn)移輸出。
表18cpfsk狀態(tài)轉(zhuǎn)移表
步驟3,查表得到狀態(tài)轉(zhuǎn)移輸出。
在8cpfsk狀態(tài)轉(zhuǎn)移表中,碼元輸入、系統(tǒng)原始狀態(tài)、新狀態(tài)和系統(tǒng)輸出之間的關(guān)系是一一對應(yīng)的,以當(dāng)前碼元輸入及系統(tǒng)原始狀態(tài)為索引,查詢8cpfsk狀態(tài)轉(zhuǎn)移表,可以快速得到狀態(tài)轉(zhuǎn)移的輸出,即8cpfsk信號的理論實(shí)部iloc和理論虛部qloc在rom中的存儲地址。
步驟4,計(jì)算每個狀態(tài)的累積路徑度量dnew。
調(diào)用2個乘法器和2個加法器,構(gòu)建當(dāng)前路徑度量計(jì)算模塊,從rom中讀取iloc和qloc,并與接收到的8cpfsk信號的實(shí)部irec和虛部qrec做乘加運(yùn)算,再累加上當(dāng)前狀態(tài)的累積路徑度量dold,得到狀態(tài)轉(zhuǎn)移后的累積路徑度量dnew:
dnew=iloc*irec+qloc*qrec+dold;
由于乘法器的輸入數(shù)據(jù)位寬為20比特,輸出為40比特,因此計(jì)算的時候需要對iloc,qloc,irec,qrec從高到低截取16比特,然后在高位補(bǔ)4比特的“0”,以防止累加過程中數(shù)據(jù)溢出。
步驟5,選擇最大累積路徑度量。
(5a)利用fpga自帶的ip核,并行例化5個比較器;
雖然系統(tǒng)狀態(tài)總數(shù)為10個,但由于每個時刻最多只有5個可能狀態(tài),所以只需要同時例化5個比較器,并行比較5個狀態(tài)的最大累積路徑度量即可;
(5b)比較每一個狀態(tài)sn在不同輸入i下的累積路徑度量dnew,輸出該狀態(tài)dnew的最大值dn及該路徑的前向輸入in;
(5c)回溯深度計(jì)數(shù)器cnt進(jìn)行如下操作:
其中←為賦值符號。
步驟6,暫存最大累積路徑度量dn。
(6a)根據(jù)設(shè)定的常數(shù)c判斷cnt是否到達(dá)回溯深度:若cnt≤c,則執(zhí)行(6b);若cnt>c,則達(dá)到回溯深度,執(zhí)行步驟(7),通過實(shí)際測試,本實(shí)例發(fā)現(xiàn)在c=10時,可以獲得良好的誤碼率曲線;
(6b)由于系統(tǒng)未達(dá)到回溯深度,所以仍需要存儲每一個最大累積度量dn,以供回溯時使用,所以需要開辟第cnt級寄存器暫存步驟(5)的輸出結(jié)果dn,并返回步驟(3)。
步驟7,回溯得到解調(diào)結(jié)果。
首先,確定每個最大累積路徑度量dn中的最大值,將該最大值對應(yīng)的系統(tǒng)狀態(tài)sn作為回溯的起點(diǎn),在第cnt級寄存器中回溯出第cnt-1級寄存器中存儲的前向輸入;
然后,從第cnt-1級寄存器中回溯出第cnt-2級寄存器中的前向輸入,如此迭代下去,直至得到第1級寄存器中的前向輸入并輸出,完成一幀數(shù)據(jù)的維特比解調(diào)。
步驟8,暫存最大累積路徑度量dn的10個寄存器開始移位寄存,將后一級寄存器中的數(shù)據(jù)存儲到前一級寄存器中,實(shí)現(xiàn)寄存器的高度復(fù)用。
(8a)開辟一組臨時寄存器,將累加距離暫存模塊中的數(shù)據(jù)復(fù)制到臨時寄存器中;
(8b)清空累加距離暫存模塊中的數(shù)據(jù);
(8c)對臨時寄存器中數(shù)據(jù)的前40比特?cái)?shù)據(jù)截位,將第41比特到第400比特?cái)?shù)據(jù)重新存入累加距離暫存模塊;
(8d)將下一個比較模塊的輸出存儲到累加距離暫存模塊;
(8e)釋放臨時寄存器資源。
步驟9,寄存器清零。
清空所有寄存器和回溯深度計(jì)數(shù)器,返回步驟(3),對下一幀數(shù)據(jù)進(jìn)行維特比解調(diào)。
本發(fā)明的性能效果可以通過以下實(shí)驗(yàn)進(jìn)一步說明:
a、實(shí)驗(yàn)條件
設(shè)置信噪比eb/n0范圍為0db~10db,發(fā)送數(shù)據(jù)文件大小為2150m,采用上位機(jī)軟件進(jìn)行誤碼率測試。
b、實(shí)驗(yàn)內(nèi)容
實(shí)驗(yàn)1:設(shè)置回溯深度常數(shù)c的取值范圍為5~15,用本發(fā)明方法分組進(jìn)行實(shí)驗(yàn)測試。對應(yīng)每一個c的取值,依次改變模擬信道的信噪比,通過發(fā)送文件,得出在不同回溯長度下維特比解調(diào)性能的誤碼率曲線,結(jié)果如圖3所示。圖3中曲線1為計(jì)算機(jī)仿真得到的維特比解調(diào)8cpfsk信號誤碼率曲線的理論值;曲線2為c=11時,實(shí)際得到的誤碼率曲線;曲線3為c=10時,實(shí)際得到的誤碼率曲線;曲線4為c=9時,實(shí)際得到的誤碼率曲線。
從圖3可以看出,在回溯深度為10的時候,本發(fā)明的誤碼率性能已經(jīng)可以逼近理論仿真值,繼續(xù)增加回溯深度,幾乎沒有性能的提升,但仍需要付出一定的硬件資源成本,因此本發(fā)明取回溯深度為10。
實(shí)驗(yàn)2:通過上位機(jī)界面,測試在大信噪比條件下本發(fā)明發(fā)送數(shù)據(jù)的比特速率,重復(fù)實(shí)驗(yàn)取其平均值,得到本發(fā)明的傳輸數(shù)據(jù)可達(dá)到的平均比特速率,結(jié)果如圖4。
從圖4可以看出,本發(fā)明實(shí)現(xiàn)的8cpfsk的維特比解調(diào)方案,在保證誤碼率為0的前提下,可以達(dá)到150m/s的信息速率。