1 Repeat Code 的简单介绍
2 编码与译码的原理
2.1 简单映射
2.2两种Decoder 算法
3 仿真实现与结果
4 总结
5 参考资料
1 Repeat Code 的简单介绍
首先,回答一个简单的问题,为什么要进行信道编码?答案显而易见,为了对抗噪声与干扰再
发生错误之后还有一定的纠错与检错能力,提高通信系统的可靠性。我们发送的信息比特,如果不
进行一定的保护措施(信道编码),接收端原本就不知道你所发的具体信息,一旦出错,后果不言
而喻。 重复码(repeating code)是一种简单的信道编码方式,简单易操作。其实质就是将每个要发
送的符号重复发送,比如(4,1)二元重复码,其编码方法就是将原来二进制序列中的每一个“0”编
成“0000”,将每一个“1”编成“1111”。
接下来,提出一个问题,重复码一定有效吗?此处暂时不给出答案,后面会进一步给出答案。
读者稍安勿躁,且听小生慢慢道来。
2 编码与译码的原理
2.1 简单映射
本次matlab的基带仿真,使用信道为高斯白噪声信道,使用的调制方式BPSK; 再编码一方,很
是简单,由于我们实在GF(2) 上进行操作,重复编码如下:
采用BPSK,我们设计 映射规则如下:
此处的0,1 是码字中的0,1,而不是原始信息序列的0,1;
流程如下:

2.2两种Decoder 算法
(1) Hard Decision Decoder

根据接收到的序列直接判0或1,得到码字 b, 接下来使用最小距离译码,得到我们的译码估计序
列 ;
(2) Maximum Likehood Decoder(Soft Decision Decoder)

根据接收到的序列 r 不直接判0或1,而是把 r 与需用码字的符号映射做一个相关性的估计,
取相关性最大的作为我们的译码估计序列 ;
3 仿真实现与结果
仿真代码如下:
%% (1,4)重复码matlab的基带仿真,使用信道为高斯白噪声信道,使用的调制方式BPSK;
clear all;
clc;
snrdB_min = -3; % 最小信噪比
snrdB_max = 6; % 最大信噪比
snrdB = snrdB_min :1:snrdB_max;
R = 1/4; %码率
EbN0 = 10.^(snrdB/10); % 信噪比数值与dB值之间的运算
% sigma = sqrt(1/(2*R*EbN0));
len = length(snrdB);
k = 1; % Message bit
n = 4; % length of codeword
BER_sim1 = zeros(1,len); % 初始化
BER_sim2 = zeros(1,len); % 初始化
%%
codwords = [ 0 0 0 0;
1 1 1 1];
for j =1:len % 不同信噪比下的仿真
bit_errors_num1 = 0; N_Simulation = 100000;
bit_errors_num2 = 0;
for i=1:N_Simulation
msg = randi([0,1]); % 产生信息比特
codeword1 = [msg msg msg msg]; % 根据生成矩阵生成码字
codeword2 = msg;
sigma1 = sqrt(1/(2*R*EbN0(j))); %计算编码之后实际的噪声方差
sigma2 = sqrt(1/(2*EbN0(j))); %计算出未编码实际的噪声方差
s1 = 1-2*codeword1; % BPSK调制
s2 = 1-2*codeword2; % BPSK调制
r1 = s1 + sigma1*randn(1,n); % 加入噪声
r2 = s2 + sigma2*randn(1); % 加入噪声
%% 硬判决
b2 = (r2<0);
b1 = (r1<0);
% 最小距离译码
dis = mod(repmat(b1,2,1)+ codwords,2) * ones(4,1);
[m1, pos1] = min(dis);
mes_cap1 = codwords(pos1,1);
%% 软判决
corr = (1-2*codwords)*r1';
[m2,pos2] = max(corr);
mes_cap2 = codwords(pos2,1);
%% 计算误码率
%err_num1 = sum(msg ~= mes_cap1); % 编码之后使用硬判决
err_num1 = sum(msg ~= mes_cap2); % 编码之后使用软判决
err_num2 = sum(msg ~= b2); % 未编码使用硬判决
if (err_num1 >0)
bit_errors_num1 = bit_errors_num1 + err_num1;
end
if (err_num2 >0)
bit_errors_num2 = bit_errors_num2 + err_num2;
end
BER_sim1(j) = bit_errors_num1 / N_Simulation; % 误比特率
BER_sim2(j) = bit_errors_num2 / N_Simulation; % 误比特率
end
end
%% 画图
semilogy(snrdB,BER_sim1,'b',snrdB,BER_sim2,'*');
axis([snrdB_min snrdB_max 0.0001 1]);
xlabel('SNR in dB');
ylabel('BER');
title('BPSK仿真的1/4repeating code BER曲线图')
legend('code','uncode');
仿真结果如下:
repetition code 使用硬判决,uncode 也使用硬判决:

repetition code 使用软判决,uncode 使用硬判决:

4 总结
观察实验结果,得到一个结论,“费力不讨好”,“好心办坏事”,repetition code的误码率反而会
增加,因此这种信道编码方式一般来说是不可取的。
5 参考资料
相关课程:LDPC and Polar Codes in 5G Standard
最后
以上就是清新酸奶最近收集整理的关于Matlab 编程实现(4,1)二元Repetition Code 基带仿真1 Repeat Code 的简单介绍2 编码与译码的原理3 仿真实现与结果4 总结5 参考资料1 Repeat Code 的简单介绍2 编码与译码的原理3 仿真实现与结果4 总结5 参考资料的全部内容,更多相关Matlab内容请搜索靠谱客的其他文章。
发表评论 取消回复