使用Matlab绘制四种基本的信道编码格式

  • 序言
  • 正文
    • 四种经典编码格式
      • 反向不归零编码(NRZ编码)
      • 曼彻斯特编码(Manchester编码)
      • 差动双向编码(DBP编码)
      • PIE编码
    • 模块说明
    • MATLAB代码
  • 程序测试

序言

本人小白一枚,这也是本人的第一篇博客,希望大家可以多多交流。这篇文章是学习物联网课程时老师布置的一个作业:要求输入一个二进制字符串,同时输出NRZ编码、曼彻斯特编码、DBP编码、PIE编码四种编码的方波图。
考虑到图像绘制的方便性,我是在MATLAB编译环境下进行代码编写和调试的。

正文

本次作业代码的核心部分只有两个:解码图像绘制解码就是根据各个编码的原理将输入的二进制字符串转换成表示高低电平的二进制数值数组(0代表低电平“0”,1代表高电平“1”);图像绘制主要是通过MATLAB中的“plot”函数将转换后的二进制数组绘制成方波图。本次作业的 高电平为“1”,低电平为“0”,周期 T 为 1 。

四种经典编码格式

反向不归零编码(NRZ编码)

NRZ编码解码原理: 用高电平表示二进制的 1 ,用低电平表示二进制的0 ,而实际上图形中高电平为“1”,低电平为“0”,故输入的字符串的数值与图形中的数值一一对应。

曼彻斯特编码(Manchester编码)

曼彻斯特编码解码原理: 曼彻斯特编码中,0 和 1 用来表示电平的跳变。输入中的 1表示下降沿,在一个周期 T中由“1”跳变到“0”;输入中的0表示上升沿,在一个周期 T中由“0”跳变到“1”。因此,输入中的 1 表示图像(输出)中的“10”,输入中的 0 表示图像(输出)中的“01”。

差动双向编码(DBP编码)

DBP编码解码原理: 在半个比特周期中的任意的边沿表示二进制“0”,而没有边沿就是二进制“1”。此外在每个比特周期开始时,电平都要反相。因此DBP的解码除了与输入的数值有关,还与前一周期的图像的高低电平状态有关。

PIE编码

PIE编码解码原理: PIE编码符号有4个,分别是数据0、数据1、数据帧开始SOF和数据帧结束EOF。每个符号的解码有固定的标准,如下图1所示。PIE解码有点类似于数据帧,每段编码前必定有数据开始标志SOF,我们输入的二进制字符串相当于数据,之后必定有数据结束标志EOF。

模块说明

  1. 字符输入模块


说明: 定义输入字符串变量input;array是将字符串变量转换后的数值数组,用于之后的循环判断。

  1. NRZ编码解码及图像绘制


说明: 根据上面的原理说明可知,输入的字符串的数值与图形中的数值一一对应,故不用对输入进行处理,只需考虑图像绘制。plot函数是根据输入的坐标x和y在窗口上绘制对应的坐标点。而方波图在边沿(下降沿和上升沿)处是两个坐标,且 xxx 坐标相等;在持续电平中(高、低电平)也是两个坐标,且 yyy 坐标相等。例如输入10110,则输出的 xxx 坐标数组为[1 2 2 3 3 4 4 5 5 6],输出的 yyy 坐标为[1 1 0 0 1 1 1 1 0 0]。在程序中 x1x1x1 , y1y1y1 就是通过上述的原理将原来的坐标扩展成一个 2∗length(input)2*length(input)2∗length(input)(输入字符串长度)的数组,x2x2x2,y2y2y2 是输出 x1x1x1 和 y1y1y1 的值。

注: x2=x1(:)x2=x1(:)x2=x1(:) 是根据 x1x1x1 循环赋值的顺序给 x2x2x2 数值,虽然 x1x1x1 是一个 2∗length(input)2*length(input)2∗length(input)(输入字符串长度)的数组,但是赋值的顺序是先 “x”“x”“x” 后 “x(2:end),x(end)+1”“x(2:end),x(end)+1”“x(2:end),x(end)+1”,是数组的元素依次赋给 x1x1x1 而不是整个数组赋给 x1x1x1(顺序:x(1);x(2),x(2);x(3)...x(end);x(end)+1x(1);x(2),x(2);x(3) ... x(end);x(end)+1x(1);x(2),x(2);x(3)...x(end);x(end)+1)。y2y2y2 同理。
之后的绘图原理同上,除不同外,其与不再赘述。

  1. 曼彻斯特编码解码及图像绘制


说明: 由于输入中的 1 表示图像中的“10”,输入中的 0 表示图像中的“01”,故解码后的二进制码长度变成之前的两倍,即定义的MCoutput为原来字符串的2倍。由于判断次数与输入的二进制字符串长度一样,而每次判断指针都要移两位,故我将循环的范围扩大两倍且每次循环的步进数变成2,这样就避免了之前判断的值被之后判断的值覆盖。图像绘制如NRZ所示,只是不同的是边沿触发是在半个周期内完成的,故我将步进数改成了0.5。

  1. DBP编码解码及图像绘制


说明: DBP编码与前一个时刻的电平状态有关,故我定义了DBPoutput使用了randint函数(后续版本randint函数被删除,改用randi,使用方法可以用help查看),让其随机生成一个元素只有0,1的数组,以第一个元素为判断标准,依次修改之后的值。这样后面会多出一个数值,只需将其删除即可。由于其随机性,故每次输出的图像可能不一样,取决于第一个元素是0还是1。绘制图像除了步进数为0.5外,其余与NRZ编码绘图原理相同。

  1. PIE编码解码及图像绘制


说明: PIE编码由于0和1代表的电平图长度不一样,故引用了MATLAB中的胞元数组cell(可以理解为字符串数组),这里的PIEoutput要先预留第一位和最后一位由于输入SOF和EOF。num是用来记录周期数Tari的,方便之后的绘图。绘制图像除了步进数为0.5外,其余与NRZ编码绘图原理相同。

MATLAB代码

function IOT( input )
%IOT 输入一个二进制字符串,输出四种编码的电平图%% 定义输入字符
char input;
array = input-'0'; %将字符串转换成数值数组%% NRZ编码图像绘制
x=1:length(input);
x1=[x;x(2:end),x(end)+1];
x2=x1(:);
y1=[array;array];
y2=y1(:);
figure(1)
plot(x2,y2);
ylim([0,2]);
title('NRZ编码输出图像')%% 曼彻斯特编码解码
MCoutput=zeros(1,2.*length(input));
for i=2:2:2*length(input)if array(i./2)==1MCoutput(i-1)=1;MCoutput(i)=0;else if array(i./2)==0MCoutput(i-1)=0;MCoutput(i)=1;endend
end
MCoutput%% 曼彻斯特编码图像绘制
x=0.5:0.5:length(input);
x1=[x;x(2:end),x(end)+0.5];
x2=x1(:);
y1=[MCoutput;MCoutput];
y2=y1(:);
figure(2)
plot(x2,y2);
ylim([0,2]);
title('曼彻斯特编码输出图像')%% DBP编码解码
DBPoutput=randi([0,1],1,2.*length(input));
for i=2:2:2*length(input)if array(i./2)==1DBPoutput(i)=DBPoutput(i-1); if DBPoutput(i)==1DBPoutput(i+1)=0;else if DBPoutput(i)==0DBPoutput(i+1)=1;endendelse if array(i./2)==0if DBPoutput(i-1)==1DBPoutput(i)=0;DBPoutput(i+1)=1;else if DBPoutput(i-1)==0DBPoutput(i)=1;DBPoutput(i+1)=0;endendendend
end%% DBP编码图像绘制
DBPoutput = DBPoutput(1:length(DBPoutput)-1)
x=0.5:0.5:length(input);
x1=[x;x(2:end),x(end)+0.5];
x2=x1(:);
y1=[DBPoutput;DBPoutput];
y2=y1(:);
figure(3)
plot(x2,y2);
ylim([0,2]);
title('DBP编码输出图像')%% PIE编码解码
num=8;  %SOF和EOF一共占8个Tari
PIEoutput = cell(1,length(input)+2);
PIEoutput{1,1}='01011111';
PIEoutput{1,length(input)+2}='01111111';
for i=1:1:length(input)if array(i)==0PIEoutput{1,i+1}='01';num=num+1;else if array(i)==1PIEoutput{1,i+1}='0111';num=num+2;endend
end%% PIE编码图像绘制
A = cell2mat(PIEoutput);
PIEoutput=A-'0'
x=0.5:0.5:num;
x1=[x;x(2:end),x(end)+0.5];
x2=[0.5;x1(:)];
y1=[PIEoutput;PIEoutput];
y2=[1;y1(:)];
figure(4)
plot(x2,y2);
ylim([0,2]);
title('PIE编码输出图像')end

程序测试

测试输入
命令行窗口输入“IOT(‘10110010100’)”

输出结果
输出解码后的数组MCoutput(曼彻斯特编码)、DBPoutput、PIEoutput(NRZ由于跟输入一致就没有输出),在对应行加“;”可取消输出



输出图像


(此时第一个元素为0)

(此时第一个元素为1)


Maltlab代码:四种基本的信道编码格式相关推荐

  1. DL之DNN优化技术:DNN优化器的参数优化—更新参数的四种最优化方法(SGD/Momentum/AdaGrad/Adam)的案例理解、图表可视化比较

    DL之DNN优化技术:DNN优化器的参数优化-更新参数的四种最优化方法(SGD/Momentum/AdaGrad/Adam)的案例理解.图表可视化比较 目录 四种最优化方法简介 优化器案例理解 输出结 ...

  2. Proteus 8微机接口仿真模拟实验,8086,8255A,DAC0832输出四种波形

    Proteus 8微机接口仿真模拟实验,8086,8255A,DAC0832输出四种波形 文章目录 Proteus 8微机接口仿真模拟实验,8086,8255A,DAC0832输出四种波形 一.设计名 ...

  3. Linux进程通信的四种方式——共享内存、信号量、无名管道、消息队列|实验、代码、分析、总结

    Linux进程通信的四种方式--共享内存.信号量.无名管道.消息队列|实验.代码.分析.总结 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须 ...

  4. 【MIMO】两种空间相关信道生成方式的记录(公式+MATLAB代码)

    文章目录 前言 一. Kronecker相关信道模型 二.生成方式1 1.公式 2.MATLAB代码 三.生成方式2-complex correlation 1.公式 2.MATLAB代码 四.生成方 ...

  5. 硬核!Python 四种变量的代码对象和反汇编分析

    作者 | 大奎 整理 | 阳哥 来源丨Python数据之道 在Python基础的学习过程中,对变量和参数的理解有助于我们从更基础层面了解Python语言的运行.在这个过程中,还是有不少冷门和细节的地方 ...

  6. Android代码规范----按钮单击事件的四种写法

    [前言] 按钮少的时候用第三种的匿名内部类会比较快,比如写demo测试的时候或者登陆界面之类. 按钮多的时候一般选择第四种写法. 一.第一种写法:在XML文件中声明onClick属性(很少用) 在XM ...

  7. 独家 | 机器学习中的四种分类任务(附代码)

    作者:Jason Brownlee 翻译:陈丹 校对:杨毅远 全文约4400字,建议阅读18分钟 本文为大家介绍了机器学习中常见的四种分类任务.分别是二分类.多类别分类.多标签分类.不平衡分类,并提供 ...

  8. 后台CS代码中创建四种常用的SL动画效果

    http://www.cnblogs.com/chengxingliang/archive/2011/03/07/1974436.html后台CS代码中创建四种常用的动画效果[附带源码实例] 转载于: ...

  9. 四种ASP网页跳转代码

    时间:2012-06-12 21:12来源:未知 输入:铜都风尘 点击: 32987 次 如果你要在服务器端跳转,可以这样: Response.Redirect(http://blog.163.com ...

  10. 四种高性能数据类型,Python collections助你优化代码、简洁任务

    在这篇文章中,机器学习工程师 George Seif 介绍了 Python collections 模块最受欢迎的四种数据类型以及它们各自的使用方法.这些数据类型可以对代码进行优化,进而实现更简洁的任 ...

最新文章

  1. 【译文】怎样让一天有36个小时
  2. 扩增子三部曲:2分析流程(共7节万字)
  3. python内存管理错误的是_关于Python内存管理,下列说法错误的是
  4. educational round 前缀和_总结分析634个以re为前缀的单词得出了re为前缀组合单词意思规律
  5. XML配置里的Bean自动装配与Bean之间的关系
  6. android horizontalscrollview 动画,Android HorizontalScrollView左右滑动效果
  7. stm32运行linux,新出的STM32F750成功运行Linux
  8. iTerm2、Oh My Zsh、主题等
  9. (20)Xilinx PCIE中断调试成功(学无止境)
  10. 嵌入式系统——软件知识产权
  11. 2007以学习软件设计开始
  12. 看不出svp补帧_SVP4免费版|SVP4(视频补帧软件)下载v4.2.0.122免费版 附教程 - 欧普软件下载...
  13. VLAN简介交换机VLAN配置
  14. 什么是软件开发生命周期?
  15. 自媒体怎么做?5个操作步骤,普通人也可以做
  16. 教你用迅雷下载百度网盘的文件
  17. vue路由SPA的介绍
  18. 2022年浙江省中职组“网络空间安全”编码信息获取
  19. CPU消耗高,tps低问题排查分析
  20. python3基础(廖雪峰)

热门文章

  1. ftp 命令访问 ftp服务器
  2. Python基础班就业免费视频教程分享
  3. matlab怎么对语音信号处理,语音信号处理MATLAB程序
  4. Cry with DX11
  5. matlab 空间解析几何,Matlab 数学软件包在向量代数—空间解析几何中的应用
  6. 联想启天 M7150 刷 bios 方法_七夕小子_新浪博客
  7. Win10任务栏卡死,无响应,点不动解决方法集锦
  8. CodeSmith 简单使用和常用模板
  9. 使用python处理wps表格_Python处理Word文件的实用姿势
  10. Windows开机自动运行.py文件