維特比解碼演算法
『壹』 求維特比解碼程序matlab模擬
%一個是硬判決,一個是軟判決的函數,各自存了,然後再調用,注意是兩個函數,別弄混了 function decoder_output=viterbi_hard(y,L) global G; 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(memory_contents*G',2); nextstate(j+1,t+1)=next_state; output(j+1,t+1)=bin2deci(branch_output); end end %------------------------------------------------ metric_of_states=zeros(1,number_of_states); %各狀態的度量metric metric_of_states_c=zeros(number_of_states,2); %各狀態兩個輸入的度量 length_seq=length(y)/n; %符號個數 decoder_output=zeros(1,length_seq-K+1); %解碼輸出 channel_output_matrix=reshape(y,n,length_seq); %將解調輸出的比特按符號排列 survivor_state=zeros(number_of_states,length_seq+1); %留存路徑 input_of_state=zeros(number_of_states,length_seq+1,2); %匯聚到各狀態的分支對應的輸入 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 for t=0:1 binary_output=deci2bin(output(j+1,t+1),n); %將各分支的輸出轉換為2進制 branch_metric=Hamming_dis(channel_output_matrix(:,i)',binary_output); %計算分支度量 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))=metric_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; %----------------比較匯聚到同一狀態的兩條路徑,選取距離較小的----------------- for j=0:number_of_states-1 if metric_of_states_c(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 i>L [min_metric,location]=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); ========================華麗的分割線================================= %以上為硬判決,一下為軟判決 function decoder_output=viterbi_soft(y,L) global G; 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(memory_contents*G',2); nextstate(j+1,t+1)=next_state; output(j+1,t+1)=bin2deci(branch_output); end end metric_of_states=zeros(1,number_of_states); metric_of_states_c=zeros(number_of_states,2); length_seq=length(y)/n; decoder_output=zeros(1,length_seq-K+1); channel_output_matrix=reshape(y,n,length_seq); survivor_state=zeros(number_of_states,length_seq+1); input_of_state=zeros(number_of_states,length_seq+1,2); state_sequence=zeros(1,length_seq+1); count=zeros(1,number_of_states); for i=1:length_seq-K+1 flag=zeros(1,number_of_states); for j=0:number_of_states-1 for t=0:1 binary_output=deci2bin(output(j+1,t+1),n); branch_metric=cor_dis(channel_output_matrix(:,i)',binary_output); 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))=metric_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; for j=0:number_of_states-1 if metric_of_states_c(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 i>L [max_metric,location]=max(metric_of_states); decoder_output(i-L)=survivor_state(location,i-L); end; end [max_metric,location]=max(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);
『貳』 跪求(2,1,8)維特比解碼程序,抽頭是八進制的247和371,最好是matlab語言編寫的!
對不起,阿幫助不了你,我為我連題目都沒看懂而感到害羞。
『叄』 誰能通俗的講解下viterbi演算法嗎
Viterbi 演算法是一種動態規劃演算法,一般用於序列的解碼。簡單地說,序列中每一個點有一個狀態,Viterbi 演算法的目的是要找到每一個點的狀態,使得這個序列的解碼結果全局較優。一般的路徑規劃演算法的搜索空間大
『肆』 求助,卷積碼的軟判決維特比解碼的matlab模擬
區間大小是根據喜好確定的吧,越大量化就越准確
如果要進行軟解碼,那麼解調器輸出也應該是軟的,
即概率信息,可能需要使用軟解調演算法
『伍』 基於單片機的卷積碼編碼與維特比解碼的設計
VHDL實現也可以,編碼器我會做,主要是解碼器的設計,採用回溯演算法 通過打孔方法可以獲得1/2編碼速度的編碼。遞歸系統編碼器的實現比較直接,然而基於,qmVCCV
『陸』 求助,有誰做過is95的matlab模擬啊,維特比解碼程序看不懂,能不能幫我解釋一下啊
YY頻道7450歡迎您 已經給你發郵箱了,1107979838的那個QQ郵箱發的,給分吧
『柒』 基於matlab 卷積碼及其維特比解碼演算法研究
哥們你現在做完這個畢設了吧?求分享。。。願把財富值全部奉上!
『捌』 如何用R實現Viterbi演算法
Viterbi解碼演算法是由Viterbi於1967年提出的一種最大似然解碼辦法,解碼器根據接收序列R按最大似然准則力圖找出正確的原始碼序列。隨著大規模集成電路技術的發展,採用Viterbi演算法的卷積編碼技術已成為廣泛應用的糾錯方案。Viterbi解碼過程可用狀態表示。Sj,t和Sj N/2,t表示t時刻的兩個狀態。在t1時刻,這兩個狀態值根據路徑為0或者1,轉移到狀態S2j,t1和S2j1,t1。每一種可能的狀態轉移都根據接收到的有雜訊的序列R計算路徑度量,然後選擇出各個狀態的最小度量路徑(倖存路徑)。Viterbi演算法就是通過在狀態中尋找最小量路徑向前回溯L步,最後得到的即為解碼輸出。
在卷積碼(n,k,m)表示法中,參數k表示每次輸入信息碼位數,n表示編碼的輸出卷積碼位數,m稱為約束長度(一些書中採用k=m1為約束長度,也可稱(2,1,2)碼網格圖,r=k/n稱為信息率,即編碼效率。本文運用的是(2,1,3)碼,約速長度為2,狀態數為22=-4。
TMS320C6000系列DSPs(數字信號處理器)是TI公司推出的一種並行處理的數字信號處理器,是基於TI的VLIW技術的。本文採用的是TMS320C6211。該處理器的工作頻率經過倍頻可達到150MHz,每個時鍾周期最多可並行執行8條指令,從而可以實現1200MIPS定點運算能力。
『玖』 維特比編碼和turbo編碼的區別
編碼與調制是各自獨立設計DMT和卷積編碼結合後的編碼增益比傳統編碼的編碼在這里維特比解碼演算法的核心是回退的觀點,採用動態規劃法存儲數據
『拾』 維特比解碼
糾錯編碼與調制是各自獨立設計DMT和卷積編碼結合後的編碼增益比傳統編碼的編碼在這里維特比解碼演算法的核心是回退的觀點,採用動態規劃法存儲數據,如果對