matlab实现常见纠错码方法

奇偶校验、汉明码(Hamming code)、BCH(Bose Chaudhuri Hocquenghem code)、CRC(循环冗余码, Cyclic Redundancy Check code)、RS码(Reed-Solomon, 里德-所罗门码)

1、奇偶校验

2、汉明码

3、BCH code

clc;
clear;
close all;
% BCH的纠错能力要比CRC好一些
% BCH 常用编码  BCH(7,4) (15,5) (31,16) (31,21) (63,45) 对全0向量编码为全0,对全1向量编码为全1
% 这里以(63,36)为例
% BCH
M = 6;
n = 2^M-1;   % Codeword length 总长=校验码+信息
k = 36;       % Message length 信息
nwords = 1; % Number of words to encode
watermark = randi([0 1],1,nwords*k); % 产生m行n列随机数矩阵
watermark = reshape(watermark,[nwords,k]);
msg = gf(watermark);
t = bchnumerr(n,k); % 可以纠错的长度
enc = bchenc(msg,n,k);
noisycode = enc + randerr(nwords,n,2*t:4*t); % 噪声
a1 = sum(sum(abs(double(enc.x)-double(noisycode.x)))); 
msgEx = bchdec(noisycode,n,k); % decode 
a2 = sum(sum(abs(msg.x-msgEx.x)));

4、CRC-循环冗余码

clc;
clear;
close all;
% 循环冗余编码CRC Cyclic Redundancy Check编码,也称多项式ploynomial
% code编码,差错校验码,由信息字段和校验字段组成,长度可以任意选定
n = 7; % Codeword length
k = 4; % Messafe length
% 定义生成多项式(这里以(7,4)循环码为例)
genPoly = cyclpoly(n,k);

% 定义待编码的数据
randW2 = rand(1,2*k); % 产生m行n列随机数矩阵
rng(1); % 每次产生的随机数保持不变
data = round(randW2);

% 进行循环码编码
encodedData = encode(data, n, k, 'cyclic', genPoly);

% 定义接收到的编码后的数据(可以模拟添加一些错误比特)
encodedData(4) = ~encodedData(4);
% encodedData(2) = ~encodedData(2);

% 进行循环码解码
decodedData = decode(encodedData, n, k, 'cyclic', genPoly);

disp('解码后的数据:');
disp(decodedData);

error_bits=sum(sum(abs(decodedData-data))); % 错误的bits总个数

5、RS码

后续完善

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值