您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 信道编码作业MATLAB
信道编码MATLAB仿真作业09274070王若闻思源09031现给出循环码及卷积码的编解码程序,理解各程序,完成以下习题。将程序运行结果及各目的解答写入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);%注释:每个数据模2encode(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或1x=encode(data1);%注释:对data1进行编码data1=rand(1,nd)0.5;%注释:生成1000个随机数数组,以0.5作为门限取0或1x=encode(data1);%注释:用之前声称的随机逻辑数组进行编码sigma=E/sqrt(2*SNR);%注释:计算未编码时高斯分布随机变量标准差,SNR未信噪比sigma1=E/sqrt(2*SNR*code_rate);%注释:计算编码后高斯分布随机变量标准差2if(data1(i)==0),data2(i)=-E+Gngauss(sigma);%注释:传0码时加入高斯分布白噪声干扰,双极性码elsedata2(i)=E+Gngauss(sigma);%注释:传1码时加入高斯分布白噪声干扰,双极性码if(x(i)==0),data3(i)=-E+Gngauss(sigma1);%注释:编码后数据在双极性传输时加入高斯分布白噪声干扰(空号)elsedata3(i)=E+Gngauss(sigma1);%注释:编码后数据在双极性传输时加入高斯分布白噪声干扰(传号)demodata1=data20;%注释:双极性码硬判决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/N01e-24.28dB4.53dB1e-36.63dB6.61dB1e-48.17dB7.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观察结果的异同,并说明原因。3未编码时信号幅度若成瑞利衰落,则误比特率会提高;编码后则差别不大。(b)若信道使信号幅度呈莱斯衰落,画出编码与未编码的Eb/N0---误比特率曲线,更改K值的大小,观察曲线的现象,能得出什么结论。K=0.3dBK=10dBK=30dBK=100dB随着K值的增加,误比特率不断地提高,交点不断左移,说明在K值大的情况下,编码的可靠性要比未编码的可靠性高的多。43.bpskh.m为(2,1,7)卷积码采用硬判决译码时在AWGN中的误比特性能的仿真主程序,用matlab运行主程序bpskh.m,将运行结果写入word文档中,并回答以下问题(tblen为回溯长度):运行结果为第一个图(a)在标识注释处注释(中文或英文)trellis=poly2trellis(constlen,codegen);%注释:卷积码多项式转换到网格形式dspec=distspec(trellis,7);%注释:计算卷积码的距谱expVitBER=bercoding(EbNo,'conv','soft',codeRate,dspec);%注释:生成已编码的AWGN信道的误码率rand('state',seed(1));randn('state',seed(2));%注释:将随机数生成器rand指定在seed1状态,randn指定在seed2状态,这样每次生成的随机值都是一样的msg_orig=randi([01],numSymb,1);%注释:生成1e6个二进制原始信息序列msg_enc=convenc(msg_orig,trellis);%注释:对其进行卷积编码hMod=modem.pskmod('M',M,'PhaseOffset',0,...'SymbolOrder','Gray','InputType','Bit');%注释:建立PSK调制模型msg_tx=modulate(hMod,msg_enc);%注释:发送端调制信号msg_rx=awgn(msg_tx,EsN0-10*log10(1/codeRate));%注释:接收端在信号中添加高斯白噪声hDemod=modem.pskdemod('M',M,'PhaseOffset',0,...'SymbolOrder','Gray','OutputType','Bit');%注释:建立PSK解调模型msg_demod=real(msg_rx);%注释:调制后信号取实部%[qcode]=quantiz(msg_demod,[-.50.5],3:-1:0);%注释:产生量化指标和量化的输出值msg_dec=vitdec(qcode,trellis,tblen,'cont','soft',3);%注释:用Viterbi算法进行卷积解码BE_count(i)=length(find(msg_orig(1:end-tblen)~=msg_dec(1+tblen:end)));%注释:计算误码个数,如果原值与解码后值不等,误码个数+1(b)在误比特率Pb=10-5处,硬判决的编码增益(与未编码比较)编码后4.53dB编码前9.58dB编码增益5.05dB5(c)详细的解释以下函数(包括函数用法,意义,参数设置等方面)trellis=poly2trellis(constlen,codegen)反馈编码(编码率为K/N)。ConsLen是1-K的向量,K为输入编码器的比特流的延迟。CodeGen是一个八进制数的K-n矩阵,K为输入编码器的比特流的延迟,n个输出连接。expVitBER=bercoding(EbNo,'conv','hard',codeRate,dspec)返回在加性高斯白噪声(AWGN)通道内传输的PSK调制的二进制卷积码的误码率上限。EbNo是信噪比(dB)。'hard'代表硬判决。CodeRate代表卷积码码率。dspec输入是一个结构,它包含有关代码的距离谱的信息。msg_rx=awgn(msg_tx,EsN0-10*log10(1/codeRate))添加高斯白噪声信号,msg_tx为原信号,EsN0-10*log10(1/codeRate)为误码率hMod=modem.pskmod('M',M,'PhaseOffset',pi/4,'SymbolOrder','Gray','InputType','Bit')建设PSK调制模型,M为M进制信号,默认为2;'PhaseOffset'为理想星座信号的相位偏移;Gray为灰盒映射,输入为Bit流。msg_tx=modulate(hMod,msg_enc)以hMod模型调制msg_enc。hDemod=modem.pskdemod('M',M,'PhaseOffset',pi/4,'SymbolOrder','Gray','OutputType','Bit')建设PSK解调模型,M为M进制信号,默认为2;'PhaseOffset'为理想星座信号的相位偏移;Gray为灰盒映射,输入为Bit流。msg_demod=demodulate(hDemod,msg_rx);以hDemod模型解调msg_demod。(d)要保证性能没有显著下降,tblen至少应为多少;tblen=5tblen=10tblen=15为了保证性能不变tblen应该至少1564.bpsks.m为(2,1,7)卷积码采用软判决译码时在AWGN中的误比特性能的仿真主程序,用matlab运行主程序bpsks.m,将运行结果写入word文档中,并回答以下问题(tblen为回溯长度):运行结果(a)在标识注释处注释(中文或英文)trellis=poly2trellis(constlen,codegen);%注释:卷积码多项式转换到网格形式dspec=distspec(trellis,7);%注释:计算卷积码的距谱expVitBER=bercoding(EbNo,'conv','soft',codeRate,dspec);%注释:生成已编码的AWGN信道的误码率rand('state',seed(1));randn('state',seed(2));%注释:将随机数生成器rand指定在seed1状态,randn指定在seed2状态,这样每次生成的随机值都是一样的msg_orig=randi([01],numSymb,1);%注释:生成1e6个二进制原始信息序列msg_enc=convenc(msg_orig,trellis);%注释:对其进行卷积编码hMod=modem.pskmod('M',M,'PhaseOffset',0,...'SymbolOrder','Gray','InputType','Bit');%注释:建立PSK调制模型msg_tx=modulate(hMod,msg_enc);%注释:发送端调制信号msg_rx=awgn(msg_tx,EsN0-10*log10(1/codeRate));%注释:接收端在信号中添加高斯白噪声hDemod=modem.pskdemod('M',M,'PhaseOffset',0,...'SymbolOrder','Gray','OutputType','Bit');%注释:建立PSK解调模型msg_demod=real(msg_rx);%注释:调制后信号取实部%[qcode]=quantiz(msg_demod,[-.50.5],3:-1:0);%注释:产生量化指标和量化的输出值msg_dec=vitdec(qcode,trellis,tblen,'cont','soft',3);%注释:用Viterbi算法进行卷积解码,用软解码方式BE_count(i)=length(find(msg_orig(1:end-tblen)~=msg_dec(1+tblen:end)));%注释:计算误码个数,如果原值与解码后
本文标题:信道编码作业MATLAB
链接地址:https://www.777doc.com/doc-5146925 .html