線性分組碼是通訊原理中已經學到的乙個概念,為了更好的編寫**,我又重新回顧了一次線性分組碼的概念,網上的概念大多很亂,下面我進行乙個梳理。
以(7,4)漢明碼為例:
(7,4)漢明碼的來歷:在資訊位後面增加監督碼元,可以指示錯誤碼元的位置。(7,4)漢明碼資訊位為4位,監督位為3位,監督位有2^3=8種組合。如果只錯一位,則可用其中一種表示無錯,其餘7種表示錯碼可能的7個位置,見下表。
根據碼元錯誤與校正子的關係可以列出監督方程,例如s1與a6 a5 a3 a2有關。
將監督方程變形,將校正位左移,可以得出生成矩陣。
錯誤圖樣是接收端為了指示錯碼的位置,它可與校正子對應s=eh^t。傳送碼為a,接收碼為b,錯誤圖樣e=b-a。
根據以上,對編碼解碼的重要概念已經有了基本的了解,下面是matlab**及其解析。
clc;clear
%編碼過程g=[
1011
1;01
101]
%input
('請輸入生成矩陣g='
)[k,n]
=size(g)
;%生成矩陣的行數是資訊位數 列數是編碼位數
r=n-k;
%判斷傳送資訊的有效性m=[
0001
1011
]%input
('請輸入需傳送的資訊m=');
l=length(m);if
(mod(l,k)
) disp(
'輸入的資訊有誤'
)%一組首席資訊官度為k 總資訊位l 必須為k的整數倍
else
num=l/k;
%num表示總共傳遞的資訊組數
end%將輸入訊號的行向量轉化為矩陣,矩陣每一行為一組資訊
m_col=
;for i=
1:num
m_col(i,:)
=m(k*
(i-1)+
1:i*k)
;end
m=m_col;
%求監督矩陣h
a=mod(m*g,2)
;%出現2要取餘變0 編碼矩陣a=m*g
q=g(
:,k+
1:n)
;%生成矩陣g=
[ik|q]
h=[q',eye(r)];%h=[p|tr]其中p=q'
disp(
'編碼矩陣');a
disp(
'監督矩陣');h
%解碼過程b=[
1000
0011
0110
1111
0010
];%input
('請輸入接收序列b='
)%將接收訊號的行向量轉化為矩陣,矩陣每一行為一組資訊
b_col=
;for i=
1:num
b_col(i,:)
=b(n*
(i-1)+
1:i*n)
;end
b=b_col;
%得出錯誤圖樣
s=mod(b*h',2)
;%s為校正子
e=s*pinv(h');%s=eh' e為錯誤圖樣
%以0.5為界,絕對值小於視為未出錯 大於視為出錯
for i=
1:num
for j=1:n
if(e(i,j)
>
0.5-eps)
e(i,j)=1
;else
e(i,j)=0
; end
endendresall=mod(b+e,2)
;%recall 為糾正後的結果 只有 0
1 錯一位是 0變1
1變0
resnew=resall(:,
1:2)
;%renew取前兩列為解碼的最終結果
disp(
'校正子');s
disp(
'差錯圖樣');e
disp(
'解碼結果'
);resnew
以下是執行結果:
通過結果可以看出監督矩陣,生成矩陣,校正子,錯誤圖樣的特點和它們之間的關係;可以檢驗解碼的正確性;可以通過控制錯碼位數來觀察線性分組碼編碼解碼的效能,當發生一位錯碼時,可以通過錯誤圖樣進行糾正。
線性分組碼
分組碼的基本原理是將資訊碼分成k 位元 符號 一組,然 後將每組的位元 符號 數擴充套件成n n k 也就是說 在資訊位元 符號 中插入n k 個位元 符號 的冗餘資訊,這樣的分組碼常記作 n,k 碼。碼字長度 n 校驗位長度 n k 資訊位長度 k 位元速率r k n 編碼效率 校驗方程 線性分組...
大話線性分組碼編碼技術
從概念上,我們知道所謂編碼就是根據資訊字對映到碼字,如果這一對映是代數關係確定和唯一的,就稱為線性。這乙個過程用數學表達就是資訊矩陣乘生成矩陣 當然從多項式角度也是這樣,因為多項式和矩陣時表達的兩種方式。具體到實現時,一般我們會考慮用c或者matlab來輔助實現或者 在硬體邏輯上實現時會考慮一些處理...
關於BCD碼的編碼和解碼
1 bcd 碼 binary coded decimal 二到十進位制編碼 計算機內部多採用二進位制表示和處理數值資料,因此在計算機輸入和輸出資料時,就要進行進製的轉換處理。用 4位二進位制數來表示 1位十進位制數中的 0 9這 10個數碼,簡稱 bcd碼,即 bcd bcd碼編碼方法很多,通常採用...