matlab仿真 信道编码和交织(下)

news2024/9/20 16:42:29

(内容源自详解MATLAB/SIMULINK 通信系统建模与仿真   刘学勇编著第八章内容,有兴趣的读者请阅读原书) 

​ 

clear all
  n=3;k=2;%A(3,2)循环码
  N=10000;%消息比特的行数
  msg=randi([0 1],N,k);%消息比特一共N*k行
  pol=cyclpoly(n,k);%循环码的生成多项式
  [h,g]=cyclgen(n,pol);%生成循环码
  code1=encode(msg,n,k,'cyclic/binary');%循环码编码
  code2=mod(msg*g,2);
  noisy=randerr(N,n,[0 1;0.7 0.3]);%噪声
  noisycode1=mod(code1+noisy,2);
  noisycode2=mod(code2+noisy,2);%噪声叠加
  newmsg1=decode(noisycode1,n,k,'cyclic');%译码
  newmsg2=decode(noisycode2,n,k,'cyclic');
  [number,ratio1]=biterr(newmsg1,msg);%误比特率
  [number,ratio2]=biterr(newmsg2,msg);
  disp(['The bit error rate1 is',num2str(ratio1)])
  disp(['The bit error rate2 is',num2str(ratio2)])

 

循环码的产生分为两步,首先通过 cyclpoly函数形成循环码的生成多项式,再利用cyclgen函数,将生成多项式作为参数,生成循环码。

这里添加噪声之后需要异或,因为本质上循环码都是二进制的情况,添加噪声只是将0(1)变为1(0)

m=4;n=2^m-1;%码字长度
k=5;%消息长度
N=100;%消息比特行数
msg=randi([0,1],N,k);%消息比特
[genpoly,t]=bchgenpoly(n,k);%BCH码的纠错能力

code=bchenc(gf(msg),n,k);%BCH编码
noisycode=code+randerr(N,n,1:t);%每个码字加入不超过纠错能力的误码(1)
[newmsg,err,ccode]=bchdec(noisycode,n,k);%BCH译码
if ccode==code
    disp('所有错误比特都被纠正')
end
if newmsg==msg
    disp('译码消息与原消息相同')
end

(1)这里的纠错能力是t,也就是说当码字变化范围在t以内的时候,可以正常纠错,所以后面随机数采用的范围为1:t

 

clear all
m=4;
n=15;
k=11;
t=(n-k)/2;%码的纠错能力
N=1000;%信息符号的行数
msg=randi([0 2^m-1],N,k);%信息符号
msg1=gf(msg,m);
msg1=rsenc(msg1,n,k).';%15-11RS编码
msg2=de2bi(double(msg1.x),'left-msb');%转换为二进制(1)
y=bsc(msg2,0.01);%通过二进制对称信道
y=bi2de(y,'left-msb');%转换为十进制
y=reshape(y,n,N).';
dec_x=rsdec(gf(y,4),n,k);%RS解码
[err,ber]=biterr(msg,double(dec_x.x),m)%解码后的误比特率

 (1)这里double中使用msg1.x而不是直接使用msg1,是因为只有在后面加上.x才能正常进行二进制的转化,最后一行的double也是相同的道理

 

 

clear all
EbN0=0:10;%SNR范围
N=1000000;%消息比特的个数
M=2;%BPSK调制
L=7;%约束长度
trel=poly2trellis(L,[171 133]);%卷积码生成多项式
tblen=6*L;%维特比译码回溯深度(1)
msg=randi([0 1],1,N);%消息比特序列
msg1=convenc(msg,trel);%卷积编码
x1=pskmod(msg1,M);%BPSK调制
for ii=1:length(EbN0)
    %加入高斯白噪声,因为码率为1/2,所以每个符号的能量要比比特能量少3dB
    y=awgn(x1,EbN0(ii)-3);%(2)
    y1=pskdemod(y,M);%硬判决
    y1=vitdec(y1,trel,tblen,'cont','hard');%维特比译码
    [err,ber1(ii)]=biterr(y1(tblen+1:end),msg(1:end-tblen));%误比特率
    
    y2=vitdec(real(y),trel,tblen,'cont','unquant');%软判决
    [err,ber2(ii)]=biterr(y2(tblen+1:end),msg(1:end-tblen));%误比特率
end

ber=berawgn(EbN0,'psk',2,'nodiff');%BPSK调制理论误比特率
semilogy(EbN0,ber,'-ko',EbN0,ber1,'-k*',EbN0,ber2,'-k.');
legend('BPSK理论误比特率','硬判决误比特率','软判决误比特率')
title('卷积码性能')
xlabel('Eb/N0');ylabel('误比特率')

 

(1)回溯深度和约束长度的关系 (2)-3dB

参考文章链接:

 http://t.csdnimg.cn/XG45Khttp://t.csdnimg.cn/XG45K

 

 

 

 

clear all
N=10000;
k=4;%编码码字消息序列长度
n=7;%编码码字长度
x=randi([0 1],N*k,1);%消息比特
code=encode(x,n,k);%(7,4)汉明编码
code1=matintrlv(code,N/10,10*n);%(N/10,10*n)矩阵交织
noise=randerr(N,n,[0:n-3;0.8 0.09 0.07 0.03 0.01]);%信道差错,包括独立差错和突发差错
noise=reshape(noise.',N*n,1);
y=bitxor(code,noise);%无交织接受信号
y=decode(y,n,k);%汉明译码
[err ber]=biterr(x,y);%统计误比特率

y1=bitxor(code1,noise);%有交织接收信号
y1=matdeintrlv(y1,N/10,10*n);%解交织
y1=decode(y1,n,k);%汉明编码
[err,ber1]=biterr(x,y1);%统计误比特率
disp('无交织时的误比特率:');
ber
disp('有交织时的误比特率:');
ber1

总结,交织器通过改变可能出错的码中各个数据的位置,从而将可能连续出现的错误分开,从而减小错误对判决的影响。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2079480.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++ TinyWebServer项目总结(12. 高性能I/O框架库Libevent)

Linux服务器程序必须处理三类事件(I/O、信号和定时事件),在处理这三类事件时需要考虑以下问题: 统一事件源。统一处理这三类事件既能使代码简单易懂,又能避免一些潜在的逻辑错误。实现统一事件源的一般方法&#xff1…

如何用Java SpringBoot+Vue搭建花开富贵花园管理系统

🎓 作者:计算机毕设小月哥 | 软件开发专家 🖥️ 简介:8年计算机软件程序开发经验。精通Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等技术栈。 🛠️ 专业服务 🛠️ 需求定制化开发源码提…

推荐一篇 学习SQL 的文章

学习 java,当然避不开数据库的知识,个人认为好学好理解的一篇文章,推荐给大家 SQL语法基础知识总结 | JavaGuide「Java学习 面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识。准备 Java 面试,首选 JavaGuide&#xf…

智能优化算法-鹈鹕优化算法(POA)(附源码)

目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1.内容介绍 鹈鹕优化算法 (Pelican Optimization Algorithm, POA) 是一种基于群体智能的元启发式优化算法,它模拟了鹈鹕的捕食行为和社会交互特性,用于解决复杂的优化问题。 POA的工作机制主要包括…

单元测试、系统测试和集成测试知识详解

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一、单元测试的概念 单元测试是对软件基本组成单元进行的测试,如函数或一个类的方法。当然这里的基本单元不仅仅指的是一个函数或者方法&#xff…

FlagEval 8月榜 | 文生视频大模型主观评测结果揭晓,新增6款新发布模型

近日,智源研究院联合中国传媒大学发布文生视频大模型主观评测榜单,在今年5月对Sora、Runway Gen-2、PixVerse V1、Pika 1.0、VideoCrafter-V2、Show-1、Open-Sora 1.0七个模型性能表现评测结果的基础之上,不仅对部分模型的升级版本进行了对比…

C++初学(16)

16.1、if语句 当C程序必须决定是否执行某个操作时,通常使用if语句来实现选择。if有两种格式:if和if else。 if语句的语法与while相似: if(text-condition)statement 如果text-condition(测试条件)为true&#xff0…

iTimes工时管理系统:企业高效管理的得力助手

在当今快节奏的商业环境中,企业面临着越来越多的挑战,其中之一便是如何高效、准确地管理员工工时。工时管理不仅关乎企业的成本控制,还直接影响到项目执行效率、员工满意度以及整体运营水平。因此,选择一款优秀的工时管理系统显得…

【应用层】Tomcat10安装以及对应的VScode插件使用

文章日期是2024年8月26日,Tomcat10为稳定版中最新的,Tomcat11为测试版。 流程:下载Tomcat10-->等待下载时,安装对应的VScode插件-->配置Tomcat10-->配置对应的VScode插件 1、下载Tomcat10 2、安装对应的VScode插件 3…

Codeforce 963

CF 963 B 模拟加贪心 偶数个数C 模拟前缀和 灯能否全亮D 二分DP 中位数尽可能大F1 模拟镜像 题目链接 B 模拟加贪心 偶数个数 考点:贪心 思路:除了全是偶数的情况,其他的情况都需要将偶数转换为奇数。最少的操作步数是偶数个数,…

IOS 15 实现Toast和小菊花Loading提示

本文主要是实现toast和loading两种提示功能,例如:登陆时参数不正确提示,toast提示后会自动隐藏。加载提示:不会自动隐藏,常用于网络请求,上传等。 添加依赖 #提示框架 #https://github.com/jdg/MBProgress…

20240828 每日AI必读资讯

8岁女孩玩转AI编程,45分钟打造聊天机器人,Karpathy都看呆了 - 新晋顶流AI代码编辑器——Cursor,已经进化到了“0手工代码”阶段。 - 提供了多个AI模型,包括GPT-4、GPT-4o和Claude 3.5 Sonnet等,可以通过跟大模型聊天…

一文弄懂MySQL中的锁

MySQL中的锁概述 MySQL中的锁机制是数据库管理系统用于控制并发操作的一种手段,主要用于保证数据的一致性和完整性。当多个事务同时操作同一数据时,锁机制可以防止数据冲突和确保事务的隔离性。 在MySQL中,锁可以分为三大类:全局…

如何用Python Django和Vue构建网络电视剧收视率分析系统?

🎓 作者:计算机毕设小月哥 | 软件开发专家 🖥️ 简介:8年计算机软件程序开发经验。精通Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等技术栈。 🛠️ 专业服务 🛠️ 需求定制化开发源码提…

《计算机操作系统》(第4版)第11章 多媒体操作系统 复习笔记

第11章 多媒体操作系统 一 、多媒体系统简介 1. 多媒体的概念 多媒体 (multimedia) 目前没有统一的定义,一般是指多种方法、多种形态传输(传播)的信息介质、多种 载体的表现形式以及多种存储、显示和传递方式。 2.超文本和超媒体 (1)超文本 (hypertext)。 (2)超链接…

探索Python性能监控的瑞士军刀:psutil的神秘面纱

文章目录 探索Python性能监控的瑞士军刀:psutil的神秘面纱背景:为何psutil不可或缺?什么是psutil?如何安装psutil?五个简单的库函数使用方法场景应用:psutil在实际开发中的妙用常见问题与解决方案总结 探索…

性价比高的开放式耳机?开放式耳机推荐

在开放式耳机市场中,有多个品牌的性价比表现较为突出。以下是一些性价比较高的开放式耳机品牌及其产品特点: 1.虹觅(Holme) 虹觅Fit2: 以其简约而不失精致的设计,首先吸引了众多目光。这款耳机采用可调节…

苹果M4芯片Mac全面曝光 或10月发布

彭博社的马克・古尔曼(Mark Gurman)发布博文,曝料称苹果内部正在测试 4 款采用 M4 芯片的 Mac 设备,有望今年秋季(可能是 10 月)发布。 古尔曼表示苹果计划今年升级 MacBook Pro、Mac mini 和 iMac 产品线&…

驱动:中断底半部 platform平台总线

中断底半部实现方法: 1. 软中断2. tasklet 3. workqueue 解释 workqueue和tasklet是Linux内核中用于处理中断后续任务的两种机制,它们在中断处理流程中扮演着重要的角色。下面是对它们的详细解释: Tasklet 定义与作用: Taskl…