卷積碼的編譯碼MATLAB程序_第1頁(yè)
卷積碼的編譯碼MATLAB程序_第2頁(yè)
卷積碼的編譯碼MATLAB程序_第3頁(yè)
卷積碼的編譯碼MATLAB程序_第4頁(yè)
卷積碼的編譯碼MATLAB程序_第5頁(yè)
已閱讀5頁(yè),還剩1頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、%survivor state是一個(gè)矩陣,它顯T了通過(guò)網(wǎng)格的最優(yōu)路徑,這個(gè)矩陣通過(guò)一個(gè)單獨(dú)的函數(shù)metric(x,y給出。%其中G是一個(gè)矩陣,它的任一行決定了從移位寄存器到模2加法器的連接方式.為生成矩陣%這里,我們做了一個(gè)簡(jiǎn)單的(2,1,7卷積碼編碼器。k=1;G=1 0 1 1 0 1 1;1 1 1 1 0 0 1;%G1=133,G2=171%以下3種輸入序列,可任選一種%input=0 0 0 0 0 0 0;%全0輸入%input=1 1 1 1 1 1 1;%全1輸入input=round(rand(1,7*1;%隨機(jī)系列輸入,也可用 randint(1,7,0 1figure;

2、plot(input,'*r' %figure1:畫(huà)圖:目標(biāo)input,紅色(red,r),形狀為*s=input;g1=G(1,:;g2=G(2,:;c1=conv(s,g1;%作卷積%disp(c1;c2=conv(s,g2;%disp(c2;n=length(c1;%7位輸入時(shí)n=13c=zeros(1,2*n;%生成全0矩陣,1*26%disp(c;for i=1:nc(2*i-1=c1(i;c(2*i=c2(i;%兩個(gè)模2加法器分別輸出卷積結(jié)果序列后,由旋轉(zhuǎn)開(kāi)關(guān)讀取的結(jié)果(此時(shí)僅為卷積結(jié)果,非2進(jìn)制0/1)endfor i=1:2*nif(mod(c(i,2=0% m

3、od(c(i,2=0意思:c(i除以2,余數(shù)為0c(i=0;else c(i=1;endendoutput=c;channel_output=output;%輸出矩陣%disp(channel_output;figure;plot(output,'*b' %畫(huà)圖:目標(biāo):卷積碼編碼輸出,藍(lán)色(blue,b)*%以上為編碼部分,以下為維特比譯碼n=size(G,1;%取矩陣G的行數(shù),故n=2。即得到輸出端口,即2個(gè)模2加法器%檢驗(yàn)G的維數(shù)if rem(size(G,2,k=0 %當(dāng)矩陣G的列數(shù)不為k的整數(shù)倍時(shí),rem為求余函數(shù)error('Size of G and k d

4、o not agree'%報(bào)錯(cuò)endif rem(size(channel_output,2,n=0 %當(dāng)輸出矩陣的列數(shù)不是輸出端口n的整數(shù)倍時(shí)。(注:size(channel_output,2=26,2個(gè)模2加法器合成的輸出)error('channle output not of the right size'endL=size(G,2/k;%得出移位數(shù),即寄存器個(gè)數(shù),此例程為7%由于L-1個(gè)寄存器的狀態(tài)即可表示出輸出狀態(tài),所以總的狀態(tài)數(shù)number_of_states可由前L-1個(gè)寄存器的狀態(tài)組合來(lái)確定number_of_states=2(L-1*k;%此例程中2

5、6,移位寄存器組的狀態(tài)數(shù)為64個(gè)%產(chǎn)生狀態(tài)轉(zhuǎn)移矩陣,輸出矩陣和輸入矩陣for j=0:number_of_states-1 %表示當(dāng)前寄存器組的狀態(tài)。因狀態(tài)從0開(kāi)始,所以循環(huán)為從0到number_of_states-1for t=0:2k-1 %k位輸入端的信號(hào)組成的狀態(tài),總的狀態(tài)數(shù)為2k,所以循環(huán)為從0到2k-1next_state,memory_contents=nxt_stat(j,t,L,k;%nxt_stat完成從當(dāng)前的狀態(tài)和輸入的矢量得出下寄存器組的一個(gè)狀態(tài)input(j+1,next_state+1=t;%input數(shù)組值是用于記錄當(dāng)前狀態(tài)到下一個(gè)狀態(tài)所要的輸入信號(hào)矢量%inpu

6、t數(shù)組的維數(shù):一維坐標(biāo)x=j+1指當(dāng)前狀態(tài)的值,二維坐標(biāo)y=next_state+1指下一個(gè)狀態(tài)的值%由于Matlab中數(shù)組的下標(biāo)是從1開(kāi)始的,而狀態(tài)值是從0開(kāi)始的,所以以上坐標(biāo)值為:狀態(tài)值+1branch_output=rem(memory_contents*G',2;%branch_output用于記錄在狀態(tài)j下輸入1時(shí)的輸出nextstate(j+1,t+1=next_state;%nextstate狀態(tài)轉(zhuǎn)移矩陣,記錄了當(dāng)前狀態(tài)j下輸入1時(shí)的下一個(gè)狀態(tài)output(j+1,t+1=bin2deci(branch_output;%output記錄了當(dāng)前狀態(tài)j下輸入1時(shí)的輸出(十進(jìn)制

7、)endendinput;state_metric=zeros(number_of_states,2;%state_metric數(shù)組用于記錄譯碼過(guò)程在每個(gè)狀態(tài)時(shí)的漢明距離,大小為number_of_states,2%(:,1)為當(dāng)前狀態(tài)位置的漢明距離,為確定值;(:,2)為當(dāng)前狀態(tài)加輸入得到的下一個(gè)狀態(tài)漢明距離,為臨時(shí)值depth_of_trellis=length(channel_output/n;%depth_of_trellis用于記錄網(wǎng)格圖的深度channel_output_matrix=reshape(channel_output,n,depth_of_trellis;%channe

8、l_output_matrix為輸出矩陣,每一列為一個(gè)輸出狀態(tài)%reshape改變?cè)仃囆螤?,將channel_output矩陣變?yōu)閚行depth_of_trellis列矩陣survivor_state=zeros(number_of_states,depth_of_trellis+1;%survivor_state描述譯碼過(guò)程中在網(wǎng)格圖中的路徑row_survivor col_survivor=size(survivor_state;%開(kāi)始非尾信道輸出的解碼%i為段,j為何一階段的狀態(tài),t為輸入for i=1:depth_of_trellis-L+1 %i指示網(wǎng)格圖的深度f(wàn)lag=zeros

9、(1,number_of_states;%flag矩陣用于記錄網(wǎng)格圖中的某一列是否被訪問(wèn)過(guò)if i<=Lstep=2(L-i*k;%在網(wǎng)格圖的開(kāi)始處,并非所有的狀態(tài)都取到else %用step來(lái)說(shuō)明這個(gè)變化step=1; %狀態(tài)數(shù)從1到2到4,直到number_of_statesendfor j=0:step:number_of_states-1 %j表示寄存器的當(dāng)前狀態(tài)for t=0:2k-1 %t為當(dāng)前的輸入branch_metric=0; %用于記錄碼間距離binary_output=deci2bin(output(j+1,t+1,n;%將當(dāng)前狀態(tài)下輸入狀態(tài)t時(shí)的輸出output轉(zhuǎn)

10、為n位2進(jìn)制,以便計(jì)算碼間距離。(說(shuō)明:數(shù)組坐標(biāo)大小變化同上)for tt=1:n %計(jì)算實(shí)際的輸出碼同網(wǎng)格圖中此格某種輸出的碼間距離branch_metric=branch_metric+metric(channel_output_matrix(tt,i,binary_output(tt;end%選擇碼間距離較小的路徑,即當(dāng)下一個(gè)狀態(tài)沒(méi)有被訪問(wèn)時(shí)就直接賦值,否則,用比它小的將其覆蓋if (state_metric(nextstate(j+1,t+1+1,2>state_metric(j+1,1+branch_metric|flag(nextstate(j+1,t+1+1=0state_

11、metric(nextstate(j+1,t+1+1,2=state_metric(j+1,1+branch_metric;%下一狀態(tài)的漢明距離(臨時(shí)值)=當(dāng)前狀態(tài)的漢明距離(確定值)+碼間距離survivor_state(nextstate(j+1,t+1+1,i+1=j;%survivor_state數(shù)組的一維坐標(biāo)為下一個(gè)狀態(tài)值,二維坐標(biāo)為此狀態(tài)%在網(wǎng)格圖中的列位置,記錄的數(shù)值為當(dāng)前狀態(tài),這樣就可以從網(wǎng)格中某位置的%某個(gè)狀態(tài)得出其對(duì)應(yīng)上一個(gè)列位置的狀態(tài),從而能很方便的完成譯碼過(guò)程。flag(nextstate(j+1,t+1+1=1;%指示該狀態(tài)已被訪問(wèn)過(guò)endendendstate_me

12、tric=state_metric(:,2:-1:1;%移動(dòng)state_metric,將臨時(shí)值移為確定值end%開(kāi)始尾信道輸出的解碼for i=depth_of_trellis-L+2:depth_of_trellisflag=zeros(1,number_of_states;%狀態(tài)數(shù)從number_of_statesnumber_of_states/221%程序說(shuō)明同上,只不過(guò)輸入矢量只為0last_stop=number_of_states/(2(i-depth_of_trellis+L-2*k;for j=0:last_stop-1branch_metric=0;binary_outpu

13、t=deci2bin(output(j+1,1,n;for tt=1:nbranch_metric=branch_metric+metric(channel_output_matrix(tt,i,binary_output(tt;endif (state_metric(nextstate(j+1,1+1,2>state_metric(j+1,1+branch_metric|flag(nextstate(j+1,1+1=0state_metric(nextstate(j+1,1+1,2=state_metric(j+1,1+branch_metric;survivor_state(next

14、state(j+1,1+1,i+1=j;flag(nextstate(j+1,1+1=1;endendstate_metric=state_metric(:,2:-1:1;end%從最優(yōu)路徑產(chǎn)生解碼輸出 %譯碼過(guò)程可從數(shù)組survivor_state的最后一個(gè)位置逐級(jí)向前譯碼%由段得到狀態(tài)序列,再由狀序列從input矩陣中得到該段的輸出%數(shù)組survivor_state的最后的輸出狀態(tài)肯定為“0”state_sequence=zeros(1,depth_of_trellis+1;size(state_sequence;state_sequence(1,depth_of_trellis=surv

15、ivor_state(1,depth_of_trellis+1;%逐級(jí)譯碼過(guò)程for i=1:depth_of_trellisstate_sequence(1,depth_of_trellis-i+1=survivor_state(state_sequence(1,depth_of_trellis+2-i+1,depth_of_trellis-i+2;%由后向前endstate_sequence;decoder_output_matrix=zeros(k,depth_of_trellis-L+1;for i=1:depth_of_trellis-L+1dec_output_deci=input(state_sequence(1,i+1,state_sequence(1,i+1+1;%根據(jù)數(shù)組input的定義來(lái)得出從當(dāng)前狀態(tài)到下一個(gè)狀態(tài)的輸入信號(hào)矢量dec_output_bin=deci2bin(dec_output_deci,k;%轉(zhuǎn)換成2進(jìn)制信號(hào)decoder_output_matrix(:,i=dec_output_bin(k:-1:1'%將每一次譯碼存入譯碼輸出矩陣decoder_output_m

溫馨提示

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

評(píng)論

0/150

提交評(píng)論