基于matlab的信道编码仿真
w=w+1; end end n=n+1; end
BER=w/(N*k) %计算误码率 semilogy(SNR,BER); 仿真结果分析:
图4.3.1汉明码对AWGN信道仿真的误码率曲线图
对图4的观察,我们可以看到,在高斯白噪声信道里当信噪比越来越大时,误码率越来越低,到一定程度,信道的误码率会为0。仿真结果和理论结果基本一致。
4.3.2汉明码对二进制对称信道的仿真 % (7,4)汉明码仿真 %定义变量(7,4)汉明码模拟 k = 4; n = 7;
% %
p_vector = 0.1:0.01:1; % 向量P的值,误码率 N = length(p_vector); % p_vector的长度 RUNS = 5000; % 运行数 % 码字表
xtable = [0 0 0 0 0 0 0; ...
11
基于matlab的信道编码仿真
1 1 0 1 0 0 0; ... 0 1 1 0 1 0 0; ... 1 0 1 1 1 0 0; ... 1 1 1 0 0 1 0; ... 0 0 1 1 0 1 0; ... 1 0 0 0 1 1 0; ... 0 1 0 1 1 1 0; ... 1 0 1 0 0 0 1; ... 0 1 1 1 0 0 1; ... 1 1 0 0 1 0 1; ... 0 0 0 1 1 0 1; ... 0 1 0 0 0 1 1; ... 1 0 0 1 0 1 1; ... 0 0 1 0 1 1 1; ... 1 1 1 1 1 1 1;]; for (p_i=1:N)
error = 0; % 错误的数 p=p_vector(p_i);
for (r=1:RUNS) %生成4位的信息块 z = unifrnd(0, 1, 1, 4); %0和1的4位串 w = round(z); %圆的Z值 %找到行的索引,二进制转换:
m = w(1) + w(2)*2 + w(3)*4 + w(4)*8; x = xtable(m + 1, :);
z = unifrnd(0, 1, 1, 7); % 0和1的7位随机字符串 zi = find(z <= p); %错误的位置 % 误比特率
e = zeros(1,7); % 创建一个0的7位串 e(zi) = ones(size(zi)); % 创建一个字符串的大小Zi
12
基于matlab的信道编码仿真
y = xor(x,e); % 异或X和E %
for(q=1:16)
dH(q) = sum(xor(y, xtable(q,:))); % 比较接收到的码字矢量
if(dH(q)<=1) wh = xtable(q, 4:7); end end % 计算误码率
dHw = sum(xor(w,wh)); error = error + dHw; end
BER(p_i) = error/(RUNS*4); % 误码率计算 P(p_i)=p; % 存到p end
Ps=logspace(-4,0,200);
Pb_high = 1 - ((1-Ps).^7 + 7.*(1-Ps).^6.*Ps); Pb_low = (1 - ((1-Ps).^7 + 7.*(1-Ps).^6.*Ps))/k;
figure(1)
plot(P, BER, 'bx', Ps, Pb_high, 'k-', Ps, Pb_low, 'k-') legend('Simulated','Analytical')
xlabel('Probability of Error for BSC (p)') ylabel('BER')
title('Figure 1 - Bit Error Rate for Hamming code over BSC')
13
基于matlab的信道编码仿真
仿真出图4.3.2
图4.3.2 汉明码对BSC信道编码后误码率的曲线图
如上图4.3.2中,可以看到蓝色的曲线是模拟后的误码率曲线,黑色的曲线是分析的误码率曲线。上面黑色曲线是概率误差p最大值的误码率,下面黑色的曲线是概率误差p最小值的误码率。从图中可以看出概率误差最大,BSC信道的误码率就越高。
14
基于matlab的信道编码仿真
5.卷积码
5.1卷积码定义与原理
卷积码是一种向前纠错控制编码。它将连续的信息比特序列映射为连续的编码器输出符号。这种映射是高度结构化的,使得卷积码的译码方法与分组码译码所采用的方法完全不同。可以验证的是在同样复杂度情况下,卷积码的编码增益要大于分组码的编码增益。对于某个特定的应用,采用分组编码还是采用卷积编码哪一种更好则取决于这一应用的具体情况和进行比较时可用的技术。卷积编码的最佳译码准则为:在给定已知编码结构、信道特性和接收序列的情况下,译码器将把与已经发送的序列最相似的序列作为传送的码字序列的估值。对于二进制对称信道,最相似传送序列就是在汉明距离上与接收序列最近的序列。 卷积码的译码方法有两大类:一类是大数逻辑译码,又称门限译码(硬判决,编者注);另一种是概率译码(软判决,编者注),概率译码又分为维特比译码和序列译码两种。门限译码方法是以分组码理论为基础的,其译码设备简单,速度快,但其误码性能要比概率译码法差。
5.2维特比译码原理
采用概率译码的基本思想是:把已接收序列与所有可能的发送序列做比较,选择其中码距最小的一个序列作为发送序列。如果发送L组信息比特,那么对于(n,k)卷积码来说,可能发送的序列有2kL个,计算机或译码器需存储这些序列并进行比较,以找到码距最小的那个序列。当传信率和信息组数L较大时,使得译码器难以实现。维特比算法则对上述概率译码做了简化,以至成为了一种实用化的概率算法。它并不是在网格图上一次比较所有可能的2kL条路径(序列),而是接收一段,计算和比较一段,选择一段最大似然可能的码段,从而达到整个码序列是一个最大似然值得序列。
下面以图5.1的(2,1,3)卷积码编码器所编出的码为例,来说明维特比解码的方法和运作过程。为了能说明解码过程,这里给出该码的状态图,如图5.2所示。
15