ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:175.90KB ,
资源ID:24429430      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/24429430.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(无线通信信道编码matlab仿真.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

无线通信信道编码matlab仿真.docx

1、无线通信信道编码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程序运行结果如下: (a) 纠错方法:首先将接收且进行判决过后的值进行分组,每7个

2、二进制码为一组,视为一个向量。用这一向量乘以一致校验矩阵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); %

3、注释:对未编码的信号进行BPSK调制,同时加入加性高斯白噪声data2(i)=E+Gngauss(sigma); % 注释:对未编码的信号进行BPSK调制,同时加入加性高斯白噪声data3(i)=-E+Gngauss(sigma1); % 注释:对编码后的信号进行BPSK调制,同时加入加性高斯白噪声data3(i)=E+Gngauss(sigma1); % 注释:对编码后的信号进行BPSK调制,同时加入加性高斯白噪声demodata1=data2 0; % 注释:过零比较判决,大于零判为1码,反之判为0码noe2=sum(abs(data1-demodata1); % 注释:统计误码个数nod

4、2=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程序

5、: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

6、即为编码增益,它表示了在相同的误码率下,经过编码的信息需要更低的信噪比就可以被正确的接收。相比于没有编码的情况,接收端相当于获得了Gcode这样一个数量的增益。 (e) 2.针对题目1中的clockcode.m, (a)若信道使信号幅度呈瑞利衰落,画出编码与未编码的Eb/N0-误比特率曲线,说明与题目1观察结果的异同,并说明原因。 (b)若信道使信号幅度呈莱斯衰落,画出编码与未编码的Eb/N0-误比特率曲线,更改K值的大小,观察曲线的现象,能得出什么结论。解: (a) 改写clockcode.m程序,另存为clockcode_reyleigh.m。主程序中将高斯信道的部分改为如下的瑞利信道:

7、for i=1:nd n = 1/sqrt(2)*randn(1,nd) + 1j*randn(1,nd); h = 1/sqrt(2)*randn(1,nd) + 1j*randn(1,nd); % Rayleigh channel if (data1(i)=0), data2(i)=-E.*h(i)+ sigma.*n(i); % 注释:对未编码的信号进行BPSK调制,同时通过瑞利信道 data2(i)=data2(i)./h(i); else data2(i)=E.*h(i) + sigma.*n(i); % 注释:对未编码的信号进行BPSK调制,同时通过瑞利信道 data2(i)=da

8、ta2(i)./h(i); end; end; n=zeros(1,nd); h=n; %清空h与n for i=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); % Rayleigh channel if (x(i)=0), data3(i)=-E.*h(i)+ sigma.*n(i); % 注释:对编码后的信号进行BPSK调制,同时通过瑞利信道 data3(i)=data3(i)./h(i); else data3(i)=E.*h(i) + sigm

9、a.*n(i); % 注释:对编码后的信号进行BPSK调制,同时通过瑞利信道 data3(i)=data3(i)./h(i); end; end; 仿真结果如下(k=10) K=5时: K=20时: 可以得到两点结论:(1)和高斯信道相比,经历瑞利衰落的信道在相同的信噪比下误码率会高很多。(2)和高斯信道相比,经历瑞利衰落的信道经过编码会获得更高的编码增益。 (b) 改写clockcode.m程序,另存为clockcode_rician.m。主程序中将高斯信道的部分改为如下的瑞利信道: n = 1/sqrt(2)*randn(1,nd) + 1j*randn(1,nd); h = 1/sqrt

10、(2)*randn(1,nd) + 1j*randn(1,nd); % Rayleigh channel h1=sqrt(K/(K+1) + sqrt(1/(K+1).*h; for i=1:nd if (data1(i)=0), data2(i)=-E.*h1(i)+sigma.*n(i); % 注释:对未编码的信号进行BPSK调制,同时经历赖斯信道 data2(1)=data2(1)./h1(i); else data2(i)=E.*h1(i)+sigma.*n(i); % 注释:对未编码的信号进行BPSK调制,同时经历赖斯信道 data2(1)=data2(1)./h1(i); end;

11、 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); % Rayleigh channel h1=sqrt(K/(K+1) + sqrt(1/(K+1).*h; for i=1:length(x) if (x(i)=0), data3(i)=-E.*h1(i)+sigma.*n(i); % 注释:对编码后的信号进行BPSK调制,同时经历赖斯信道 data3(i)=data3(i)./h1(i); else data

12、3(i)=E.*h1(i)+sigma.*n(i); % 注释:对编码后的信号进行BPSK调制,同时经历赖斯信道 data3(i)=data3(i)./h1(i); end; end; 仿真结果如下: 可以发现,与瑞利信道相比,在信噪比下,赖斯信道中的误码率更低,这是因为在赖斯信道中存在一个直射分量(本例中,K=10)。同时,与瑞利信道类似的,经历赖斯信道的通信经过编码后也会获得更高的编码增益。3bpskh.m为(2,1,7)卷积码采用硬判决译码时在AWGN中的误比特性能的仿真主程序,用matlab运行主程序bpskh.m,将运行结果写入word文档中,并回答以下问题(tblen为回溯长度):

13、(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

14、, 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至少应为多少;解:程序运行结果如下图: (a)trellis = poly2trellis(constlen, codegen); %注释:生成一个包含有编码器信息结构体dspec = distspec(trellis, 7); %注释

15、:由上一语句的结果计算编码器的最小距离等信息,同样也会生成一个结构体depecexpVitBER = bercoding(EbNo, conv, hard, codeRate, dspec); %注释:得到在Eb/No的信噪比下,采用卷积码编码,硬判决,在加性高斯白噪声信道中 %的误码率的上界或者是估计值。rand(state, seed(1); randn(state, seed(2); %注释:使用种子数生成一个均匀分布的随机数,一个正态分布的随机数msg_enc = convenc(msg_orig, trellis); %注释:将信源序列进行卷积码的编码,编码器的参数由第二个函数参数t

16、rellis决定。hMod = modem.pskmod(M, M, PhaseOffset, 0, . SymbolOrder, Gray, InputType, Bit); %注释:生成一个调制的“模型”hMod,该模型可供后面的modulate函数调用。 %具体的,生成模型为二进制的,不带相位偏 %移,符号顺序采用格雷码,输入按照比特来 %处理的PSK调制器msg_tx = modulate(hMod, msg_enc); %注释:对卷积码编码后的序列进行PSK调制。msg_rx = awgn(msg_tx, EsN0-10*log10(1/codeRate); %注释:对调制后的信号加

17、入高斯白噪声。hDemod = modem.pskdemod(M, M, PhaseOffset, 0, . SymbolOrder, Gray, OutputType, Bit); %注释:生成一个解调的“模型”hDemod,该模型可供后面的modulate函数调用。 %具体的,生成一个二进制的,不带相位偏移 %,符号顺序采用格雷码,输入按照比特来处 %理的PSK解调器。msg_demod = demodulate(hDemod, msg_rx); %注释:用hDemod对收到的信号msg_rx解调。msg_dec = vitdec(msg_demod, trellis, tblen, co

18、nt, hard); %注释:对解调的信号进行维特比硬译码BE_count(i) = length(find(msg_orig(1:end-tblen)= msg_dec(1+tblen:end); %注释:统计误码BE_rate_count(i)=BE_count(i)/numSymb; %注释:计算误码率 (b)由于程序中未编码的情况下无法达到10-5的误码率,故仅能观察到在10-4情况下的编码增益,在10-4情况下,可以获得大约2.5dB的编码增益。 (c)函数解释:trellis = poly2trellis(constlen, codegen)函数将用于描述卷积码的多项式转化成为。输

19、入参数:constlen:约束长度,说明了编码器内存储的信息的长度,这个长度包含了当前的输入比特 codegen:成为卷积码的生成多项式,描述了卷积码编码器的输入输出关系,该参数为八进制。输出参数:该函数返回一个结构体(该例中结构体名称为trellis),结构体中描述了编码器的输入参数的个数,输出参数的个数,可能有的状态数,当前状态-下一个状态的组合,当前状态-当前输入的组合。本例中,通过实际编码器的参数我们可以得知该编码器的结构为:expVitBER = bercoding(EbNo, conv, hard, codeRate, dspec)、msg_rx = awgn(msg_tx, Es

20、N0-10*log10(1/codeRate)函数返回了在使用PSK调制的二进制卷积码在加性高斯白噪声信道中指定的信噪比下传输的误码率的上限或者是估计值。输入参数:EbNo以dB形式表示的信噪比conv表明使用的是卷积码hard表示使用硬判决codeRate为卷积码的码率dspec是一个结构体,其中包含了码的距离等信息hMod = modem.pskmod(M, M, PhaseOffset, pi/4, SymbolOrder, Gray, InputType, Bit)此函数生成一个调制器的模型,该模型可以被modulate函数调用。输入参数:M, M,设定了调制的进制,M值在程序中设定为

21、2,设定的调制器为二进制调制PhaseOffset, pi/4 :调制器的星座图有Pi/4的相位偏移。SymbolOrder, Gray:符号顺序采用格雷码InputType, Bit:调制器的输入是按照比特来处理的。msg_tx = modulate(hMod, msg_enc)将msg_enc按照hMod模型的参数进行调制。输入参数hMod:为一个调制器的模型,由上一条语句“u hMod = modem.pskmod”生成msg_enc:待调制的基带信号,对于一路信号,需要的是一个列向量。hDemod = modem.pskdemod(M, M, PhaseOffset, pi/4, Sy

22、mbolOrder, Gray, OutputType, Bit) 此函数生成一个PSK解调器的模型,该模型可以被modulate函数调用。输入参数:M, M,设定了解调的进制,M值在程序中设定为2,设定的调制器为二进制调制PhaseOffset, pi/4 :解调器的星座图有Pi/4的相位偏移。SymbolOrder, Gray:符号顺序采用格雷码InputType, Bit:解调器的输入是按照比特来处理的。msg_demod = demodulate(hDemod, msg_rx); 将msg_rx按照hDemod模型中给出的参数进行解调。输入参数msg_rx:待解调的列向量。hDemod

23、:解调器模型。 (d)tblen=16的情况: 可以看到仿真结果与理论值有着较大偏移。 tblen=24时: tblen=20: 故需要回溯长度tblen至少为24。4bpsks.m为(2,1,7)卷积码采用软判决译码时在AWGN中的误比特性能的仿真主程序,用matlab运行主程序bpsks.m,将运行结果写入word文档中,并回答以下问题(tblen为回溯长度):(a)在标识注释处注释(中文或英文)(b)在SNR=4dB时,要保证仿真精度,大概需要至少仿真多少个码字?(c)在误比特率Pb=10-5处,2比特软判决的编码增益(与未编码比较)?(d)在误比特率Pb=10-5处,3比特软判决的编码

24、增益(与未编码比较)?解:程序运行结果: (a)程序注释如下:trellis = poly2trellis(constlen, codegen); %注释:生成一个包含有编码器信息结构体dspec = distspec(trellis, 7); %注释:由上一语句的结果计算编码器的最小距离等信息,同样也会生成一个结构体depecexpVitBER = bercoding(EbNo, conv, soft, codeRate, dspec); %注释:%注释:得到在Eb/No的信噪比下,采用卷积码编码,软判决,在加性高斯白噪声信道中的误码率的上界或者是估计值。rand(state, seed(1

25、); randn(state, seed(2); %注释:使用种子数生成一个均匀分布的随机数,一个正态分布的随机数msg_orig = randi(0 1, numSymb, 1); %注释:生成信源,一个列向量。msg_enc = convenc(msg_orig, trellis); %注释:使用trellis对信源进行卷积码的编码。hMod = modem.pskmod(M, M, PhaseOffset, 0, . SymbolOrder, Gray, InputType, Bit); %注释:生成一个调制的“模型”hMod,该模型可供后面的modulate函数调用。具体的,生成模型为

26、二进制的,不带相位偏,符号顺序采用格雷码,输入按照比特来处理的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); %注释:生成解调模型msg_demod =real(msg_rx); %注释:取出接收数据的实部用于下一步量化msg_dec = vitdec(qcode,

27、 trellis, tblen, cont, soft,3); %注释:用解调器模型对接收数据进行软译码,3bit软判决。BE_count(i) = length(find(msg_orig(1:end-tblen)= msg_dec(1+tblen:end); %注释:统计误码(b)仿真码字长度设置为1e5的时候,仿真结果如下 可见需1e5个码字的仿真就可以较为准确的仿真出SNR=4dB的时候的情形(c) 由于在所设定的信噪比中未经编码的情况下无法达到10-5的误码率,故在此处分析误码率为10-4的情况。 将原来的程序做如下修改:qcode = quantiz(msg_demod,-.5 0 .5 ,3:-1:0);msg_dec = vitdec(qcode, trellis, tblen, cont, soft,2); 运行结果: 可见。与未经编码的情况相比,2比特软判决可以带来4 dB的编码增益。 (d) 同样分析误码率为10-4的情况:与未经编码的情况相比,3比特软判决可以带来4.4dB的编码增益。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1