您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 无线通信信道编码matlab仿真
现给出循环码及卷积码的编解码程序,理解各程序,完成以下习题。将程序运行结果及各题目的解答写入word中:1.用matlab运行书上习题中的“clockcode.m”(a)说明(7,4)码的纠错检错方法(b)在程序中标注“注释”处加上注释(英文或中文)(c)对于编码和未编码的情况,误比特率为1e-2、1e-3及1e-4时的Eb/N0分别是多少?(d)从物理意义上说明编码增益问题(e)当采用(15,11)码时,观察与(7,4)码相比编码增益的变化。解:clockcode.m程序运行结果如下:01234567891010-510-410-310-210-1100BEREb/N0[dB]uncodedcoded(a)纠错方法:首先将接收且进行判决过后的值进行分组,每7个二进制码为一组,视为一个向量。用这一向量乘以一致校验矩阵H,得到生成伴随式矢量s。若s=0,则认认为没有错,直接输出。若s与HT的某一列相同,即有着相同的错误图样,则将收到的该位取反(即进行模二加),进行纠错,将纠错后的结果输出。(b)clockcode.m程序:data1=rand(1,nd)0.5;%注释:产生信源数据x=encode(data1);%%注释:对信源数据进行信道编码sigma=E/sqrt(2*SNR);%注释:能量归一化sigma1=E/sqrt(2*SNR*code_rate);%注释:能量归一化data2(i)=-E+Gngauss(sigma);%注释:对未编码的信号进行BPSK调制,同时加入加性高斯白噪声data2(i)=E+Gngauss(sigma);%注释:对未编码的信号进行BPSK调制,同时加入加性高斯白噪声data3(i)=-E+Gngauss(sigma1);%注释:对编码后的信号进行BPSK调制,同时加入加性高斯白噪声data3(i)=E+Gngauss(sigma1);%注释:对编码后的信号进行BPSK调制,同时加入加性高斯白噪声demodata1=data20;%注释:过零比较判决,大于零判为1码,反之判为0码noe2=sum(abs(data1-demodata1));%注释:统计误码个数nod2=length(data1);%注释:统计发送的码的个数ber(snr_num)=noe/nod;%注释:误码率=误码个数/发送个数encode.m程序:temp=data1(4*i-3:4*i);%注释:从data1(信源)中取数,每次取4个cyctemp=temp*G;%注释:结合下一条语句完成对4位二进制数的编码cyctemp=mod(cyctemp,2);%注释:结合上一条语句完成对4位二进制数的编码;前一条完成了x=uG,本条将生成的x变成二进制的结果encode(7*i-6:7*i)=cyctemp;%注释:将编出的7位码存放到输出数组中decode.m程序:temp=x(7*j-6:7*j);%注释:从待译码的序列中取出7个数s=temp*Ht;%注释:利用一致校验矩阵生成生成伴随式矢量if(s==Ht(k,:))%注释:若S和Ht中的某一行相同,即有着相同的“错误图样”temp(k)=mod(temp(k)+1,2);%注释:就将收到的某一位进行模2加,进行纠错。decode(1,4*i-3:4*i)=decode1(1,7*i-6:7*i-3);%注释:将完成译码的值输出(c)将Eb/N0总结如下表Eb/N0(dB)未编码经过编码1e-24.34.51e-36.56.81e-48.38.2(d)如下图:图中的Gcode即为编码增益,它表示了在相同的误码率下,经过编码的信息需要更低的信噪比就可以被正确的接收。相比于没有编码的情况,接收端相当于获得了Gcode这样一个数量的增益。(e)2.针对题目1中的clockcode.m,(a)若信道使信号幅度呈瑞利衰落,画出编码与未编码的Eb/N0---误比特率曲线,说明与题目1观察结果的异同,并说明原因。(b)若信道使信号幅度呈莱斯衰落,画出编码与未编码的Eb/N0---误比特率曲线,更改K值的大小,观察曲线的现象,能得出什么结论。解:(a)改写clockcode.m程序,另存为clockcode_reyleigh.m。主程序中将高斯信道的部分改为如下的瑞利信道:fori=1:ndn=1/sqrt(2)*[randn(1,nd)+1j*randn(1,nd)];h=1/sqrt(2)*[randn(1,nd)+1j*randn(1,nd)];%Rayleighchannelif(data1(i)==0),data2(i)=-E.*h(i)+sigma.*n(i);%注释:对未编码的信号进行BPSK调制,同时通过瑞利信道data2(i)=data2(i)./h(i);elsedata2(i)=E.*h(i)+sigma.*n(i);%注释:对未编码的信号进行BPSK调制,同时通过瑞利信道data2(i)=data2(i)./h(i);end;end;n=zeros(1,nd);h=n;%清空h与nfori=1:length(x)n=1/sqrt(2)*[randn(1,i)+1j*randn(1,i)];h=1/sqrt(2)*[randn(1,i)+1j*randn(1,i)];%Rayleighchannelif(x(i)==0),data3(i)=-E.*h(i)+sigma.*n(i);%注释:对编码后的信号进行BPSK调制,同时通过瑞利信道data3(i)=data3(i)./h(i);elsedata3(i)=E.*h(i)+sigma.*n(i);%注释:对编码后的信号进行BPSK调制,同时通过瑞利信道data3(i)=data3(i)./h(i);end;end;仿真结果如下(k=10)01234567891010-310-210-1BEREb/N0[dB]uncodedcodedK=5时:01234567810-510-410-310-210-1BEREb/N0[dB]赖斯信道未编码赖斯信道经过编码K=20时:01234567810-510-410-310-210-1BEREb/N0[dB]赖斯信道未编码赖斯信道经过编码可以得到两点结论:(1)和高斯信道相比,经历瑞利衰落的信道在相同的信噪比下误码率会高很多。(2)和高斯信道相比,经历瑞利衰落的信道经过编码会获得更高的编码增益。(b)改写clockcode.m程序,另存为clockcode_rician.m。主程序中将高斯信道的部分改为如下的瑞利信道:n=1/sqrt(2)*[randn(1,nd)+1j*randn(1,nd)];h=1/sqrt(2)*[randn(1,nd)+1j*randn(1,nd)];%Rayleighchannelh1=sqrt(K/(K+1))+sqrt(1/(K+1)).*h;fori=1:ndif(data1(i)==0),data2(i)=-E.*h1(i)+sigma.*n(i);%注释:对未编码的信号进行BPSK调制,同时经历赖斯信道data2(1)=data2(1)./h1(i);elsedata2(i)=E.*h1(i)+sigma.*n(i);%注释:对未编码的信号进行BPSK调制,同时经历赖斯信道data2(1)=data2(1)./h1(i);end;end;n=1/sqrt(2)*[randn(1,length(x))+1j*randn(1,length(x))];h=1/sqrt(2)*[randn(1,length(x))+1j*randn(1,length(x))];%Rayleighchannelh1=sqrt(K/(K+1))+sqrt(1/(K+1)).*h;fori=1:length(x)if(x(i)==0),data3(i)=-E.*h1(i)+sigma.*n(i);%注释:对编码后的信号进行BPSK调制,同时经历赖斯信道data3(i)=data3(i)./h1(i);elsedata3(i)=E.*h1(i)+sigma.*n(i);%注释:对编码后的信号进行BPSK调制,同时经历赖斯信道data3(i)=data3(i)./h1(i);end;end;仿真结果如下:01234567810-510-410-310-210-1BEREb/N0[dB]赖斯信道未编码赖斯信道经过编码可以发现,与瑞利信道相比,在信噪比下,赖斯信道中的误码率更低,这是因为在赖斯信道中存在一个直射分量(本例中,K=10)。同时,与瑞利信道类似的,经历赖斯信道的通信经过编码后也会获得更高的编码增益。3.bpskh.m为(2,1,7)卷积码采用硬判决译码时在AWGN中的误比特性能的仿真主程序,用matlab运行主程序bpskh.m,将运行结果写入word文档中,并回答以下问题(tblen为回溯长度):(a)在标识注释处注释(中文或英文)(b)在误比特率Pb=10-5处,硬判决的编码增益(与未编码比较)(c)详细的解释以下函数(包括函数用法,意义,参数设置等方面)trellis=poly2trellis(constlen,codegen)expVitBER=bercoding(EbNo,'conv','hard',codeRate,dspec)、msg_rx=awgn(msg_tx,EsN0-10*log10(1/codeRate))hMod=modem.pskmod('M',M,'PhaseOffset',pi/4,'SymbolOrder','Gray','InputType','Bit')msg_tx=modulate(hMod,msg_enc)hDemod=modem.pskdemod('M',M,'PhaseOffset',pi/4,'SymbolOrder','Gray','OutputType','Bit')msg_demod=demodulate(hDemod,msg_rx);(d)要保证性能没有显著下降,tblen至少应为多少;解:程序运行结果如下图:44.555.566.577.5810-810-710-610-510-410-310-210-1Eb/No(dB)BERPerformanceforR=1/2,K=7Conv.CodeandBPSKwithHardDecisionUnionBoundSimulationResultsuncodecodechannelresults(a)trellis=poly2trellis(constlen,codegen);%注释:生成一个包含有编码器信息结构体dspec=distspec(trellis,7);%注释:由上一语句的结果计算编码器的最小距离等信息,同样也会生成一个结构体depecexpVitBER=bercoding(EbNo,'conv','hard',codeRate,dspec);%注释:得到在Eb/No的信噪比下,采用卷积码编码,硬判决,在加性高斯白噪声信道中%的误码率的上界或者是估计值。rand('state',seed(1));randn('state',seed(2));%注释:使用种子数生成一个均匀分布的随机数,一个正态分布的随机数msg_enc=convenc(msg_orig,trellis);%注释:将信源序列进行卷积码的编码,编码器的参数由第二个函数参数trellis决定。hMod=modem.pskmod('M',M,'PhaseOffset',0,...'SymbolOrder','Gray','InputType','Bit');%注释:生成一个调制的“模型”hMod,该模型可供后面的modulate函数调用。%具体的,生成模型为二进制的,不带相位偏%移,符号顺序采用格雷码,输入按照比特来%处理的PSK调制器msg_tx=modulate(hMod,msg_enc);%注释:对卷积码编码后的序列进行PSK调制。msg_rx=awgn
本文标题:无线通信信道编码matlab仿真
链接地址:https://www.777doc.com/doc-5383583 .html