1. 基於圖結構應用《編碼,解碼器》的設計與實現 這個畢業設計應該從什麼思路下手啊~~計算機專高手請指點
兄弟你這個論文有點難度了。不是隨便拉拉就行了。得找專業書籍慢慢找和高人指導了。
我查到點不指導有沒有用。
Turbo卷積碼(TCC)是3G無線系統中所採用的前向錯誤校正(FEC)機制的整體部分。然而,Turbo解碼器所帶來的計算負擔非常重,並不太適合採用傳統DSP或RISC處理器實現。由於現場可編程邏輯陣列(FPGA)內在的並行結構,FPGA為解決3G基站收發器中所需要的符號速率FEC和其它計算密集的任務提供了一個高性能信號處理平台基礎。
Turbo 編碼
級聯碼方案(Concatenated coding schemes)是為了通過結合兩個或更多相對簡單的分量或構造模塊碼來獲得較高的編碼增益。Turbo碼認為是對級聯碼結構的一種改進,其中採用迭代演算法對相關的碼序列進行解碼。Turbo碼是通過將兩個或更多分量碼應用到同一數據序列的不同交織版本上構成的。對於任何傳統單分量編碼,解碼器的最後一級生成的都是硬判決解碼數據位。為了使象Turbo碼這樣的級聯碼方案工作得更好,解碼演算法不應被限制為只能在解碼器間傳遞硬判決。為最好地利用每個解碼器獲得的信息,解碼演算法必須可以實現軟判決交換,而不是採用硬判決。對於採用兩個分量碼的系統,解碼的概念是指將來自一個解碼器的軟判決輸入到另一個解碼器的輸入,並將此過程重復幾次以獲得更好的判決,如圖1所示 。
3GPP Turbo 編碼器
圖2為3GPP編碼器。
輸入數據流輸入到RSC1,它為每個輸入比特生成一個對等比特(Parity Bit)。輸入數據還經過交織後由RSC2處理生成第二個對等比特流。
3GPP標準定義,輸入塊的長度在40至5114 位之間。編碼器生成一個速率為1/3的包括原始輸入位和兩個對等位的系統碼。通過打孔方法可以獲得1/2編碼速度的編碼。遞歸系統編碼器的實現比較直接,然而交織器則不那麼簡單,要比標準的卷積或塊交織器復雜。
一旦將輸入數據塊長度K 提供給編碼器以後,編碼器將計算交織矩陣行數R和列數 C,並創建相應的交織數據結構。R 和 C 是數據塊長度K的函數。在輸入符號被載入到交織矩陣以後,那麼將根據一定的順序進行行間交換和列間交換。交換模式是根據塊長度K選擇的(即依賴於K)。行和列交換完成後,通過逐列讀出交織矩陣數據就可以得到最終的交織序列。在數據讀出時需要進行刪減操作,以保證在輸出中只有正確的輸入符號,請注意,交織陣列包含的數據位通常比K個原始輸入符號要多 ,因為R C>K。然後,新的序列經過RSC2編碼生成第二個對等位流。
實現交織器的一種方法是在存儲器中存儲完整的交換序列。即,一旦K 給定,即調用一個初始化常式(運行在處理器上的軟體常式或利用FPGA中的功能單元)生成相應的交換序列,然後將這一信息存儲在存儲器中。然而,這一方法需要大量的存儲器。利用Virtex -E FPGA 技術提供的 4096位每塊的片上存儲器,將需要[5114 13/4096]=17個存儲器塊。
在我們的方法中,採用一個預處理引擎生成一個序列值(存儲),這一序列值被存儲起來,交織器地址發生器將使用這些序列值。這一硬體單元採用幾個小型數據結構(素數表)來計算所需要的序列。這一準備過程需要的時鍾周期數與信息塊的長度成比例。例如,對於K=40的塊需要280時鍾周期,而對於最大塊長度K=5114,則需要 5290個時鍾周期。該過程只需要在塊長度變化時進行。地址發生器利用這些更為緊湊的數據結構來實時生成交織地址。
3GPP Turbo 解碼器
解碼器包括兩個MAP(最大後驗概率)解碼器和幾個交織器。Turbo演算法的優良的性能源於可以在兩個MAP解碼器間共享可靠性信息(extrinsic data,外數據,或稱先驗數據)。
在我們的設計中,MAP解碼器採用的是Bahl, Cocke, Jelinek 和 Rajiv (BCJR) 演算法。BCJR演算法計算每個符號的最大後驗對數似然率,並且是一種真正的軟判決演算法。考慮到數據是以塊的形式傳輸的,因此可以在時間維中前向或反向搜索一個符號序列。對於任一序列,其出現概率都是單獨符號出現概率的乘積。由於問題是線性的,因此序列概述可以利用概率的對數和來代替。
為了與一般文獻中的習慣一致,我們將解碼迭代的前向和反向狀態概率分別利用 和 來表示。通常,BCJR演算法要求在接收到整個信息後才開始解碼。對於實時應用,這一限制可能太嚴格了。例如,3GPP Turbo解碼器將需要大量存儲器存儲一個5114符號信息塊的完全狀態結構(state trellis)。對於單片FPGA設計來說,這需要的存儲資源太多了。與維特比(Vitebi)演算法類似,我們可以先從全零向量 O和數據{yk}(k 從 n 到 n-L) 開始反向迭代。L次反向迭代可獲得非常好的 n-L近似值。只要L選擇合適,最終的狀態標志(state metric)就是正確的。可以利用這一性質在信息結束前就開始進行有效的位解碼。
L 被稱為收斂長度。其典型值大約是解碼器約束長度的數倍(通常為5至10倍),並隨著信噪比的降低而增加。
通常,Turbo解碼演算法將計算所有的 (對整塊信息),將這些數值存儲起來,然後在反向迭代中與反向狀態概率一起用來計算新的外信息(extrinsic information,或稱先驗信息)。我們的設計中採用了窗口化方法。
解碼過程以一個前向迭代開始,計算包含L 個接收符號的塊i的 值。同時,對未來(i+1)塊進行一個反向迭代(標號 )。對塊i+1的反向迭代結束時,就獲得了開始對塊i 進行反向迭代所需要的正確的 初始向量。 與此同時對數似然函數(Lall)也在進行。 每一 和 處理過程都需要8個max* 操作 - 每個針對狀態結構(tellis)中的8個結點之一。最終的對數似然計算需要14個並行max* 運算符。為了提供可接受的解碼速率,在設計中採用了38個max* 功能單元。
從 C描述到FPGA設計
FPGA Turbo 編碼解碼器設計是利用基於C的設計和驗證方法進行的,如圖3所示。
演算法開發階段採用具有定點C類型的Art Library 來對定點計算的位真(bit-true)效應進行准確建模。在這一階段考察了幾種可能演算法的定點性能。一旦選定正確的量化演算法,就可利用A|rtDesignerPro創建一個專用DSP架構。A|rtDesignerPro的一個最強大的功能之一是可以插入和利用專用的數據通道核心(稱為專用單元,ASU)。利用這些ASU加速器核心可以使我們處理Turbo解碼器演算法內在的計算復雜性。
A|rtDesignerPro可自動完成寄存器分配、調度和控制器生成。在Turbo編碼解碼器設計中, A|rtDesignerr的自動循環合並可獲得最佳的;任務調度,MAP解碼步驟的內部循環都只有一個周期長。
A|rtDesignerPro生成的最終結果是可綜合的寄存器級(RT-level) VHDL或Verilog 描述。基於C的工具流支持FPGA專用功能。例如,可利用BlockRAM自動構造RAM,而寄存器文件也可利用分布式存儲器而不是觸發器來實現 。
最後,邏輯綜合和Xilinx實施工具套件將RTL HDL 轉換為 FPGA 配置位流。
FPGA Turbo 編碼解碼器實現
A|rtDesigner創建的Turbo編碼器和解碼器核心硬體結構包含許多專用ASU加速器。其中最重要的一個加速器完成max* 操作。max* 運算符根據下式計算兩個冪值a 和 b:
max* (a,b)=ln(expc(a)+expc(b))。
如 圖4所示, max* 運算是通過選擇(a,b)最大值,並應用一個存儲在查找表(LUT)中的校正因子近似進行的。這一近似演算法非常適合利用Xilinx FPGA 實現,其中LUT是其最終基本構造單元。
結果
Turbo解碼演算法硬體字長的選擇極大地影響總體性能。利用C-to-FPGA設計流程,這一定點分析是完全在C環境中完成的。結果示於圖 5。
上圖顯示出了我們的浮點Turbo解碼器演算法和對應的定點演算法之間的性能差別。模擬是在5114塊長度、5次解碼迭代和AWGN信道模型情況下進行的。結果清晰明顯出性能的損失是非常小的。
我們的Turbo解碼器的定點性能做為解碼器迭代次數的函數 ,對於1.5 dB SNR,位錯率為10-6。
解碼器功能的實現非常具有挑戰性,我們同時針對Virtex-E和 Virtex-II 器件進行了適配。Virtex-II 器件實施是採用運行在1.85 speedfile資料庫上的Xilinx 4.1i 實施工具集完成的。利用XC2V1000BG575-5 FPGA實現的最終設計,達到了66 MHz 的時鍾性能,消耗了3,060個邏輯片 和 16個塊RAM。對於從40至 5114符號長度的塊,採用5次解碼迭代循環的情況下,解碼器達到了2 至6.5 百萬符號每秒(Msym/s)的吞吐量。編碼器佔用了903個邏輯片、3個塊RAM並支持83 MHz時鍾頻率。對於從40至5114位的塊長度,速率可達到9 至20 Msym/s。
能用上就好了,用不上別怪我。對不起哈~祝福你~
2. 關於AMI、HDB3編譯碼實驗 有個這樣的思考題,示波器看到的HDB3變換規則與書本上和老師講的有什麼不同
示波器上看到的HDB3編碼器的輸出P22點的波形比書本上的理論上的輸出波形要延時5個碼位。原因是實驗電路中採用了由4個移位寄存器和與非門組成的四連零測試模塊去檢測二進制碼流中是否有四連零,因此輸出的HDB3碼有5個碼位的延時。
3. AMI碼編碼規則是什麼
AMI碼編碼規則是:消息代碼中的0,傳輸碼中的0;消息代碼中的1,傳輸碼中的+1、-1交替。
1碼通常稱為傳號,0碼則叫空號,這是沿用了早期電報通信中的叫法。從形態上看,它已是三狀態信號,所以AMI碼是偽三進制碼。
消息代碼中的0,傳輸碼中的0;消息代碼中的1,傳輸碼中的+1、-1交替。
例如:消息代碼:1 0 1 0 1 0 0 0 1 0 1 1 1,AMI碼: -1 0 +1 0 -1 0 0 0 +1 0 -1 +1 -1
由AMI碼確定的基帶信號中正負脈沖交替,而0電位保持不變;所以由AMI碼確定的基帶信號無直流分量,且只有很小的低頻分量。
(3)ami編解碼設計擴展閱讀
雙極性碼是三進制碼,1為反轉,0為保持零電平。根據信號是否歸零,還可以劃分為歸零碼和非歸零碼,歸零碼碼元中間的信號回歸到0電平,而非歸零碼遇1電平翻轉,零時不變。
作為編碼方案的雙極性不歸零碼,"1"碼和"0"碼都有電流,但是"1"碼是正電流,"0"碼是負電流,正和負的幅度相等,故稱為雙極性碼。
此時的判決門限為零電平,接收端使用零判決器或正負判決器,接收信號的值若在零電平以上為正,判為"1"碼;若在零電平以下為負,判為"0"碼。
4. MATLAB: 數字通信系統信道編碼 AMI 編解碼
程序如下,現在原始序列長度20的隨機0,1串,要變自己改。
clc;
clear;
source = randint(1,20);
%%%%%%%%%%%% Encode %%%%%%%%%%%%%
perbit = -1;
for i=1:length(source);
if source(i)==1
encoded(i) = (-1)*perbit;
perbit = encoded(i);
else
encoded(i) = source(i);
end
end
%%%%%%%%%%%% Decode %%%%%%%%%%%%
for i=1:length(source);
if encoded(i)~=0
decoded(i) = 1;
else
encoded(i) = 0;
end
end
source
encoded
decoded
5. AMI碼編解碼實驗
yin wei ni shu cuo le
6. 你好,請問你有AMI編、解碼器的VHDL建模及程序設計的課程設計報告 電子檔沒有
你有AMI編、解碼器的VHDL建模及程序設計的課程設計
你要寫報告就好
不寫內容嘸,還是怎樣
7. 具有長連0碼格式的數據在AMI編解碼系統中傳輸會帶來什麼問題,如何解決
這將不利於定時信息的提取;解決辦法是採用HDB3編碼.
8. 10000110111000010的AMI編碼怎麼畫
100001000111000010的m7么?怎麼畫這個就是這個的繪畫人才能畫出來的?一般人一般人很難畫的,因為都些妖人,就是直接把這些數字都畫上去,就可以拉,應該是這樣吧!
9. AMI編、解碼器的VHDL建模及程序設計
AMI編碼VHDL程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityamiis
port(clk:inbit;
input:inbit;
output1:outbit;
output2:outbit);
endami;
architectureaofamiis
begin
process(clk)
variablec:bit:='0';
begin
ifclk'eventandclk='1『then
ifinput='1『then
ifc='0『then
output1<='1';
output2<='0';
c:=notc;
else
output1<='0';
output2<='1';
c:=notc;
endif;
else
output1<='0';
output2<='0';
endif;
endif;
endprocess;
enda;
AMI解碼程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityamiymis
port(clk:inbit;
input1,input2:inbit;
output:outbit);
endamiym;
architectureaofamiymis
begin
process(clk)
begin
ifclk'eventandclk='0'then
output<=input1orinput2;
endif;
endprocess;
enda;
ps:因為只能傳一張圖片,我就傳了編碼的模擬圖,解碼的簡單一點,你自己試試。
10. 如何用labview做ami編碼
最簡單的辦法是對原碼中的1計數,把偶數位置的1全變為-1,而奇數位置的1不變。
怎麼用labview來作,要看你的消息多長,按什麼編碼。我這里以一個字元,ASC編碼作消息碼,如圖。如果你的消息源直接是二態碼,左邊的就省了。