Simulink中卷积码编码硬判决、软判决译码BPSK系统误码率性能仿真的Matlab 201...
simulink 卷积码编码硬判决软判决译码BPSK系统误码率性能仿真 Matlab2015及以上版本可以运行。最近在折腾通信系统的误码率仿真发现Simulink搞数字通信建模是真的方便。特别是卷积码这种自带状态记忆的编码方案用模块拖拽比纯代码实现直观多了。今天咱们就实操一把基于卷积码的BPSK系统对比硬判决和软判决译码的性能差异手把手带你跑出误码率曲线。先看系统架构卷积编码器→BPSK调制→AWGN信道→解调→Viterbi译码。重点在于译码器的输入处理——硬判决直接把解调信号二值化软判决则保留模拟量信息。别小看这点区别误码率能差出好几dB呢。打开Simulink从Communications Toolbox里拖出这几个核心模块Convolutional Encoder配多项式[171 133]经典配置、BPSK Modulator/Demodulator、AWGN Channel。Viterbi Decoder要注意设置参数硬判决用Hard模式软判决用Unquant并指定3bit量化后面细说。simulink 卷积码编码硬判决软判决译码BPSK系统误码率性能仿真 Matlab2015及以上版本可以运行。重点来了软判决需要让解调器输出连续信号。在BPSK Demodulator里把Output type设为LLR这样出来的不是0/1而是对数似然比。对应的Viterbi Decoder要启用Soft Input模式比如用3bit量化的话参数这样写decoder comm.ViterbiDecoder(InputFormat,Soft,... SoftInputWordLength,3,TracebackDepth,34);为啥是3bit其实这是工程折中——8个量化电平既能保留足够信息又不会让译码复杂度爆炸。自己跑仿真时可以试着调整这个参数观察误码率变化。完整模型搭建完后用脚本批量跑不同Eb/N0下的仿真EbNo_vec 0:2:10; ber_hard zeros(size(EbNo_vec)); ber_soft zeros(size(EbNo_vec)); for k 1:length(EbNo_vec) sim(conv_bpsk_model); % 模型文件名 [~,ber_hard(k)] biterr(enc_data, dec_hard); [~,ber_soft(k)] biterr(enc_data, dec_soft); end注意在AWGN模块里要把Eb/No设为变量名比如EbNodB这样脚本才能动态修改信噪比。跑完数据别急着关立刻画图semilogy(EbNo_vec, ber_hard, ro--, EbNo_vec, ber_soft, bs-); grid on; legend(硬判决,软判决(3bit)); xlabel(Eb/N0 (dB)); ylabel(BER);典型结果当Eb/N04dB时硬判决BER约2e-3软判决能到3e-4优势明显。不过代价是计算量——软判决的时延是硬判决的2倍左右用tic/toc实测单次仿真时间就能验证。遇到仿真跑得慢怎么办两个技巧1) 在模型配置里开Accelerator mode2) 把帧长调大到1e5以上避免统计波动。但别用超过1e6不然Matlab会卡到怀疑人生。最后留个思考题如果把卷积码换成LDPC码软判决增益会不会更大自己改模型试试记得用comm.LDPCEncoder模块对比的时候注意码率要一致才有可比性。仿真工程师的快乐往往就在这种参数折腾中突然降临...
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2449532.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!