信道编码MATLAB仿真作业
09274070 王若闻0903
思源现给出循环码及卷积码的编解码程序,理解各程序,完成以下习题。将程序运行结果及各目 的解答写入word中:
运行结果如下
1.用matlab运行书上习题中的“clockcode.m” (a)说明(7,4)码的纠错检错方法
答:接收码字与伴随矩阵相乘,计算得伴随矢量,伴随矢量不为0说明发生错误,为0说明无单个或两个错((7,4)码最多可检测两个错误)。
伴随式不为0时,通过查表法进行译码,对于Hamming码,伴随式组成的二进制数即为错码的位数。
(b)在程序中标注“注释”处加上注释(英文或中文) Encode: temp=data1(4*i-3:4*i); %注释:将原始数据分成四个一组,每次循环调用其中一组 cyctemp=temp*G; %注释:将原码与生成矩阵G相乘 cyctemp=mod(cyctemp,2); %注释:每个数据模2
encode(7*i-6:7*i)=cyctemp; %注释:7位一组,进行编码 Decode:
temp = x(7*j-6:7*j); %注释:将分组码数据分成七个一组,每次循环调用其中一组 s=temp*Ht; %注释:将分组码与伴随矩阵相乘生成伴随矢量 if(s == Ht(k,:)) %注释:如果伴随矢量与伴随矩阵中的某一列相等
temp(k)=mod(temp(k)+1,2);%注释:分组数据纠错:分组数据中第k个数据加1(模2加)
decode(1,4*i-3:4*i)=decode1(1,7*i-6:7*i-3);%注释:分组码每组前4位写入解码输出数据 Clockcode:
data1=rand(1,nd)>0.5; %注释:生成1000个随机数数组,以0.5作为门限取0或1 x=encode(data1); % 注释:对data1进行编码
data1=rand(1,nd)>0.5; % 注释:生成1000个随机数数组,以0.5作为门限取0或1 x=encode(data1); % 注释:用之前声称的随机逻辑数组进行编码
sigma=E/sqrt(2*SNR); %注释:计算未编码时高斯分布随机变量标准差,SNR未信噪比
sigma1=E/sqrt(2*SNR*code_rate); %注释: 计算编码后高斯分布随机变量标准差
1
if (data1(i)==0),
data2(i)=-E+Gngauss(sigma); % 注释:传0码时加入高斯分布白噪声干扰,双极性码else
data2(i)=E+Gngauss(sigma); % 注释:传1码时加入高斯分布白噪声干扰,双极性码if (x(i)==0),
data3(i)=-E+Gngauss(sigma1); % 注释:编码后数据在双极性传输时加入高斯分布白噪声干扰(空号)
else
data3(i)=E+Gngauss(sigma1); % 注释:编码后数据在双极性传输时加入高斯分布白噪声干扰(传号)
demodata1=data2 > 0; % 注释:双极性码硬判决
noe2=sum(abs(data1-demodata1)); % 错误的比特数 nod2=length(data1); % 注释:总码元数
ber(snr_num) = noe/nod; %注释:计算误比特率
(c)对于编码和未编码的情况,误比特率为1e-2、1e-3及1e-4时的Eb/N0分别是多少? BER 未编码Eb/N0 编码后Eb/N0 1e-2 4.28dB 4.53dB 1e-3 6.63dB 6.61dB 1e-4 8.17dB 7.94dB
(d)从物理意义上说明编码增益问题
答:编码增益是编码信号相对于未编码信号效率的提高。单位为分贝。在编码理论和相关的工程问题里,编码增益是一种度量,用来区别SNR(信噪比)级别在未编码的系统和编码的系统来达到相同的比特率(BER),应用在错误纠正编码(ECC)。 编码增益越高,纠错能力越强。
(e)当采用(15,11)码时,观察与(7,4)码相比编码增益的变化。
(7,4)码 (15,11)码
相同信噪比下,(15,11)码误比特率比(7,4)码低,编码增益增大 2.针对题目1中的clockcode.m
(a)若信道使信号幅度呈瑞利衰落,画出编码与未编码的Eb/N0---误比特率曲线,说明与题目1观察结果的异同,并说明原因。
2