卷積碼實驗報告_第1頁
卷積碼實驗報告_第2頁
卷積碼實驗報告_第3頁
卷積碼實驗報告_第4頁
卷積碼實驗報告_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、實驗五 信道編解碼()本章目標掌握數(shù)字頻帶傳輸系統(tǒng)調(diào)制解調(diào)的仿真過程掌握數(shù)字頻帶傳輸系統(tǒng)誤碼率仿真分析方法5.1實驗目的 1. 使用MATLAB進行卷積碼編/譯碼器的仿真。 2. 熟練掌握MATLAB軟件、語句。 3. 了解卷積碼編/譯碼器的原理、知識。5.2實驗要求1. 編寫源程序、準備測試數(shù)據(jù)。2. 在MATLAB環(huán)境下完成程序的編輯、編譯、運行,獲得程序結(jié)果。如果結(jié)果有誤,應找出原因,并設法更正之。5.3 實驗原理(一) 卷積碼編碼器1. 連接表示卷積碼由3個整數(shù),描述。也表示編碼效率(每編碼比特所含的信息量);但與線性分組碼中的含義不同,不再表示分組或碼子長度;稱為約束長度,表示在編碼

2、移位寄存器中元組的級數(shù)。卷積碼不同于分組碼的一個重要特征就是編碼器的記憶性,即卷積碼編碼過程中產(chǎn)生的元組,不僅是當前輸入元組的函數(shù),而且還是前面?zhèn)€輸入元組的函數(shù)。實際情況下,和經(jīng)常取較小的值,而通過的變化來控制編碼的能力和復雜性。下面以圖 1中的卷積碼編碼器為例介紹卷積碼編碼器。該圖表示一個約束長度的(2,1)卷積譯碼器,模2加法器的數(shù)目為,因此,編碼效率。在每個輸入比特時間上,1位信息比特移入寄存器最左端的一級,同時將寄存器中原有比特均右移一級,接著便交替采樣兩個模2加法器,得到的碼元就是與該輸入比特相對應的分支字。對每一個輸入信號比特都重復上述采樣過程。圖 1 卷積碼編碼器(編碼效率,)用

3、于描述反饋移位寄存器實現(xiàn)循環(huán)碼時所使用的生成多項式也可用戶描述卷積碼編碼器的連接。應用個生成多項式描述編碼的移位寄存器與模2加法器的連接方式,個生成多項式分別對應個模2加法器,每個生成多項式不超過階。仍以圖 1中的編碼器為例,用生成多項式代表上方連接,代表下方連接,則有:多項式中的最低階項對應于寄存器的輸入級。輸出序列根據(jù)如下方式求得:其中表示輸入的信息矢量。2. 狀態(tài)圖卷積編碼器屬于有限狀態(tài)機的器件?!坝邢蕖北砻鳡顟B(tài)機制只有有限個不同的狀態(tài)。有限狀態(tài)機的狀態(tài)可以用設備的當前輸入和最少的信息量,來預測設備的輸出。狀態(tài)提供了有關(guān)過去序列過程及一組將來可能輸出序列的限制,下一狀態(tài)總是受到前一狀態(tài)的

4、限制。將編碼器在時刻的狀態(tài)定義為。圖 2 狀態(tài)轉(zhuǎn)移圖如圖 2所示,方框內(nèi)的狀態(tài)表示寄存器最右端級的內(nèi)容,狀態(tài)間的路徑表示由此狀態(tài)轉(zhuǎn)移時的輸出分支字。對應于兩種可能的輸入bit,從每個狀態(tài)出發(fā)只有兩種轉(zhuǎn)移。3. 編碼器網(wǎng)格圖圖 3 編碼器網(wǎng)格圖雖然狀態(tài)圖完全地描述了編碼器的特性,但由于沒有表示時間過程,所以采用狀態(tài)圖跟蹤編碼器的狀態(tài)轉(zhuǎn)移很不方便。樹狀圖在狀態(tài)圖的基礎(chǔ)上增加了時間尺度。每個相繼輸入信息比特的編碼過程可表述為從左向右經(jīng)過樹狀圖,每條數(shù)值代表一個輸出分支字。樹狀圖上增加的時間尺度是我們可以動態(tài)地描述輸入序列的編碼過程。但由于樹狀圖的規(guī)模增長很快,因而只適于序列中分支子數(shù)目較小的情況。我

5、們采用移位寄存器的4種可能狀態(tài)來標注樹圖的各個節(jié)點,。樹結(jié)構(gòu)的第一次分支在時刻,產(chǎn)生一對節(jié)點,記為;在后繼的各個分支處,節(jié)點數(shù)翻倍。第二次分支在時刻,生成4個節(jié)點,記為;第三次分支后共有8個節(jié)點。網(wǎng)格圖利用了結(jié)構(gòu)上的重復性,從而能夠更加方便地描述編碼器。(二) 維特比譯碼算法維特比譯碼算法由維特比在1967年提出。維特比算法的實質(zhì)是最大似然譯碼,但它利用了編碼網(wǎng)格圖的特殊結(jié)構(gòu),從而降低了計算的復雜性。該算法包括計算網(wǎng)格圖上在時刻到達各個狀態(tài)的路徑和接受序列之間的相似度,或者說距離。維特比算法考慮的是,去除不可能成為最大似然選擇對象的網(wǎng)格圖上的路徑,即如果有兩條路徑到達同一狀態(tài),則具有最佳量度的

6、路徑被選中,成為幸存路徑。對所有狀態(tài)都將進行這樣的選路操作,譯碼器不斷在網(wǎng)格圖上深入,通過去除可能性最小的路徑實現(xiàn)判決。網(wǎng)格圖中每個時刻上有個狀態(tài),這里的是約束長度,每種狀態(tài)都可經(jīng)兩條路徑到達。維特比譯碼包括計算到達每個狀態(tài)的兩條路徑的路徑量度,并舍棄其中一條路徑。在時刻,算法對個狀態(tài)(節(jié)點)都進行上述計算,然后進入時刻,并重復上述過程。在一個給定的時刻,各狀態(tài)的幸存路徑量度就是該狀態(tài)在該時刻的狀態(tài)量度。圖 4 譯碼器網(wǎng)格圖5.4實驗內(nèi)容在MATLAB上設計一個(2,1,3)卷積編碼器和對應的采用維特比譯碼算法的譯碼器。編碼器的生成多項式為:將編碼器的輸出經(jīng)過一個高斯白噪聲信道的結(jié)果作為譯碼器

7、的輸入,觀察比較譯碼器輸出和編碼器輸入,了解卷積碼的容錯性,并計算譯碼結(jié)果的誤比特率。基本流程如Error! Reference source not found.所示。實驗報告要求附加程序代碼,并對代碼中每個函數(shù)模塊的實驗方式和功能進行簡要的說明。卷積碼編碼模塊:卷積碼編碼子程序:function out_put=conv_enc(msg)g1=1 1 1;g2=1 0 1;m1=conv(msg,g1);m2=conv(msg,g2);L1=length(m1);for i=1:L1 out_put(2*i-1)=rem(m1(i),2); out_put(2*i)=rem(m2(i),2

8、);endend該模塊將對輸入信息碼子編碼。維特比算法解碼器的實現(xiàn)函數(shù):function decoder_output=viterbi_hard(y,L)global G; G=1 1 1;1 0 1;n=size(G,1);K=size(G,2); number_of_states=2(K-1); %- -生成各分支的輸出-for j=0:number_of_states-1 for t=0:1 next_state,memory_contents=next_state_fun(j,t,K); input(j+1,next_state+1)=t; branch_output=rem(memo

9、ry_contents*G,2); nextstate(j+1,t+1)=next_state; output(j+1,t+1)=bin2deci(branch_output); endend %-metric_of_states=zeros(1,number_of_states); %各狀態(tài)的度量 metricmetric_of_states_c=zeros(number_of_states,2); %各狀態(tài)兩個輸入的度量length_seq=length(y)/n; %符號個數(shù)decoder_output=zeros(1,length_seq-K+1); %解碼輸出channel_outp

10、ut_matrix=reshape(y,n,length_seq); %將解調(diào)輸出的比特按符號排列 survivor_state=zeros(number_of_states,length_seq+1); %留存路徑input_of_state=zeros(number_of_states,length_seq+1,2); %匯聚到各狀態(tài)的分支對應的輸入state_sequence=zeros(1,length_seq+1); count=zeros(1,number_of_states); for i=1:length_seq-K+1 for j=0:number_of_states-1 f

11、or t=0:1 binary_output=deci2bin(output(j+1,t+1),n); %將各分支的輸出轉(zhuǎn)換為2進制 for kk=1:n branch_metric=0; branch_metric=Hamming_dis(channel_output_matrix(:,i),binary_output); end count(nextstate(j+1,t+1)+1)=count(nextstate(j+1,t+1)+1)+1; metric_of_states_c(nextstate(j+1,t+1)+1,count(nextstate(j+1,t+1)+1)=metri

12、c_of_states(j+1)+branch_metric; %計算累積度量(加) input_of_state(nextstate(j+1,t+1)+1,:,count(nextstate(j+1,t+1)+1)=survivor_state(j+1,:); %該分支所在路徑的對應的輸入 input_of_state(nextstate(j+1,t+1)+1,i,count(nextstate(j+1,t+1)+1)=t; end; end;%-比較匯聚到同一狀態(tài)的兩條路徑,選取距離較小的- for j=0:number_of_states-1 if metric_of_states_c(

13、j+1,1)=metric_of_states_c(j+1,2) metric_of_states(j+1)=metric_of_states_c(j+1,2); survivor_state(j+1,:)=input_of_state(j+1,:,2); else metric_of_states(j+1)=metric_of_states_c(j+1,1); survivor_state(j+1,:)=input_of_state(j+1,:,1); end; end; count=zeros(1,number_of_states); %-截短輸出- if iL min_metric,lo

14、cation=min(metric_of_states); decoder_output(i-L)=survivor_state(location,i-L); end;end%- -最后L個比特譯碼輸出-min_metric,location=min(metric_of_states); decoder_output(length_seq-K+1-L+1:length_seq-K+1)=survivor_state(location,length_seq-K+1-L+1:length_seq-K+1);這是witerbi算法的主程序,上面的witerbi函數(shù)所用的子函數(shù)如下:十進制轉(zhuǎn)化為二進制的程序:function y=deci2bin(x,n)y=zeros(1,n);i=1; while x=0 & i= 0.5 code_out (j) = 1; else code_out (j) = 0;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論