画直线:

mainwindow.h中定义画直线的函数

protected:void paintEvent(QPaintEvent *);

mainwindow.cpp中

void MainWindow::paintEvent(QPaintEvent *)
{QPainter painter(this);painter.setPen(QPen(Qt::blue,4));//设置画笔形式painter.drawLine(100,100,200,100);//画直线}

结果如图所示

三者转换如下:

消息码  :  1 0 0 0     0     1 0 0 0    0     1     1     0 0 0 0     0   0    0         0     1     1

AMI码   : -1 0 0 0     0   +1 0 0 0    0    -1   +1     0 0 0 0     0  0    0          0    -1   +1

HDB3码: -1 0 0 0    -V   +1 0 0 0   +V  -1   +1   -B 0 0 -V  +B  0   0         +V   -1   +1

C++代码实现:

#include<stdio.h>
#include<cmath>
#define M 100
//int origin[M];
int origin[22] = { 1,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,1 };
int AMIcode[M];
void AMI(int n);
void HDB3(int n);
void main()
{int i, n;n = 22;//printf("输入原码位数:\n");//scanf("%d", &n);//printf("输入原码:");//for (i = 0; i < n; i++)scanf("%d", &origin[i]);AMI(n);printf("AMI码:\n");for (i = 0; i < n; i++)printf("%5d", AMIcode[i]);printf("\n");printf("HDB3码:\n");HDB3(n);for (i = 0; i < n; i++)printf("%5d", AMIcode[i]);printf("\n");
}
void AMI(int n)
{int i, k = -1;for (i = 0; i < n; i++){if (origin[i] == 0)AMIcode[i] = 0;else if (origin[i] == 1){AMIcode[i] = k;k = -k;}else;}
}
void HDB3(int n)
{int i = 0, m, j = 0, v, w, x = 0;while (i < n){m = 0;while (AMIcode[i] == 0 && m < 4 && i < n) { m++; i++; }if (m == 4)j++;if (j == 1 && m == 4) { AMIcode[i - 1] = AMIcode[i - 5]; v = AMIcode[i - 1]; }if (j > 1 && m == 4){AMIcode[i - 1] = -v;if (AMIcode[i - 1] != AMIcode[i - 5]){AMIcode[i - 4] = -AMIcode[i - 5];AMIcode[i - 1] = AMIcode[i - 4];w = AMIcode[i - 1];/*while (x < 3 && i < n){if (abs(AMIcode[i]) == 1) { AMIcode[i] = -w; w = AMIcode[i]; }if (AMIcode[i] == 0 && AMIcode[i + 1] == 0)x++;i++;}if (x > 2)i = -2;*/}else;v = AMIcode[i - 1];}if (m == 0)i++;else;}
}

运行结果:

可视化实现:

原理很简单:码为1的时候画上横线,码为0的时候画中横线,码为-1的时候画下横线

原理如下:

    p=0;//AMI 码AMI(M);for(int z=0;z<M;z++){if(AMIcode[z]==1){painter.drawLine(X+p,200,X+10+p,200);}if(AMIcode[z]==0){painter.drawLine(X+p,250,X+10+p,250);//画直线}if(AMIcode[z]==-1){painter.drawLine(100+p,300,110+p,300);}p+=20;}

mainwindow.cpp 代码如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<stdio.h>
#include<cmath>#define M 22
//int origin[M];
int origin[M] = { 1,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,1 };
int AMIcode[M];MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);
}MainWindow::~MainWindow()
{delete ui;
}
void AMI(int n)
{int i, k = -1;for (i = 0; i < n; i++){if (origin[i] == 0)AMIcode[i] = 0;else if (origin[i] == 1){AMIcode[i] = k;k = -k;}else;}
}void HDB3(int n)
{int i = 0, m, j = 0, v, w, x = 0;while (i < n){m = 0;while (AMIcode[i] == 0 && m < 4 && i < n) { m++; i++; }if (m == 4)j++;if (j == 1 && m == 4) { AMIcode[i - 1] = AMIcode[i - 5]; v = AMIcode[i - 1]; }if (j > 1 && m == 4){AMIcode[i - 1] = -v;if (AMIcode[i - 1] != AMIcode[i - 5]){AMIcode[i - 4] = -AMIcode[i - 5];AMIcode[i - 1] = AMIcode[i - 4];w = AMIcode[i - 1];/*while (x < 3 && i < n){if (abs(AMIcode[i]) == 1) { AMIcode[i] = -w; w = AMIcode[i]; }if (AMIcode[i] == 0 && AMIcode[i + 1] == 0)x++;i++;}if (x > 2)i = -2;*/}else;v = AMIcode[i - 1];}if (m == 0)i++;else;}
}int X=100;
int Y=50;
void MainWindow::paintEvent(QPaintEvent *)
{int p=0;QPainter painter(this);painter.setPen(QPen(Qt::blue,4));//设置画笔形式for(int z=0;z<M;z++)    //源 码{if(origin[z]==1){painter.drawLine(X+p,50,X+10+p,50);}if(origin[z]==0){painter.drawLine(X+p,100,X+10+p,100);//画直线}p+=20;}p=0;//AMI 码AMI(M);for(int z=0;z<M;z++){if(AMIcode[z]==1){painter.drawLine(X+p,200,X+10+p,200);}if(AMIcode[z]==0){painter.drawLine(X+p,250,X+10+p,250);//画直线}if(AMIcode[z]==-1){painter.drawLine(100+p,300,110+p,300);}p+=20;}p=0;HDB3(M);for(int z=0;z<M;z++){if(AMIcode[z]==1){painter.drawLine(X+p,400,X+10+p,400);}if(AMIcode[z]==0){painter.drawLine(X+p,450,X+10+p,450);//画直线}if(AMIcode[z]==-1){painter.drawLine(100+p,500,110+p,500);}p+=20;}}

ps:因为通信原理不是我的主科目。。我就懒得写注释了/(ㄒoㄒ)/~~

qt初体验(通信原理:消息码--AMI码--HDB3码低配可视化)相关推荐

  1. 仿微信二维码极速扫描(MLKit及CameraX初体验),安卓消息分发机制

    } <application -> - CameraX的支持当然也要一并加上 // 版本号 def camerax_version = "1.0.0-rc03" // ...

  2. matlab实现通信原理(附上完整仿真源码)

    通信原理是现代通信系统的核心,它涉及到信号的传输.调制.解调.编码.解码等多个方面.在通信原理中,信号的传输是最基本的环节,而MATLAB是一个非常适合用来模拟和实现通信原理的工具.本文将介绍如何使用 ...

  3. 通信原理与MATLAB(十四):HDB3的编解码

    目录 1.HDB3码的编码原理 2.HDB3码的解码原理 3.HDB3码的编解码的代码 4.HDB3码的误码率曲线 4.1原理 4.2 HDB3码的误码率曲线的代码 4.3 HDB3码的误码率曲线图 ...

  4. symbian S60 Qt 初体验

    QT被Nokia收购以后,顿时风声鹊起,似乎Nokia的应用开发将采用Qt已成必然之势:固小体验一把在Symbian s60上完成自己的处女作: 在上一篇Symbian开发环境搭建之事必躬亲的基础上, ...

  5. cGAN/cDCGAN,MNIST数据集初体验(内含原理,代码)

    ​生成式对抗网络(Generative Adversarial Networks, GAN),简称GAN网络.有人说这是21世纪最让人激动的"发明",虽然我忘了我是从哪看到的这句话 ...

  6. SCNU网工通信原理期末复习

    通信原理期末复习 ID3902009 纯手敲好累啊-,敲完感觉自己期末考试又行了hihi 其实我的MD转PDF版本会更加好看一点 我的PDF版本在这,点击跳转 离散信息的平均信息量 H = ∑ i = ...

  7. 通信原理matlab实验课程设计,通信原理matlab课程设计报告

    通信原理matlab课程设计报告 1 目录 一问题描述-----------------------------------------3 二实验原理------------------------- ...

  8. cmi编码实验_【2017年整理】实验及HDB3码CMI码编码.ppt

    [2017年整理]实验及HDB3码CMI码编码 实验地点: 三楼最西边 通信工程系办公室 HDB3码(三阶高密度双极性码) 编码规则: 把消息代码变换成AMI码.检查AMI码的连0串情况. 当没有4个 ...

  9. .NET WebSocket 核心原理初体验

    上个月我写了<.NET gRPC核心功能初体验>, 里面使用gRPC双向流做了一个打乒乓球的Demo, [实时][双向]这两个标签是不是很熟悉,对, WebSockets也可以做实时双向通 ...

  10. QT源码解析(一) QT创建窗口程序、消息循环和WinMain函数

    版权声明 请尊重原创作品.转载请保持文章完整性,并以超链接形式注明原始作者"tingsking18"和主站点地址,方便其他朋友提问和指正. QT源码解析(一) QT创建窗口程序.消 ...

最新文章

  1. 【直播预告】7月18日3D游戏引擎免费公开课答疑,參与送C币!
  2. 找到表中某一列值相同的记录,而且只要其中一条记录的sql
  3. [ASP.NET 控件实作 Day28] 图形验证码控件
  4. 使用ASIHTTPRequest进行http 请求bug
  5. linux查看并口设备,如何在LINUX下实现硬件的自动检测(下)
  6. OpenGL使用链表进行顺序独立的透明度
  7. HTML文件撰写的注意事项有哪些,CSS及HTML 常见误区和注意事项(一)
  8. 汇编基础知识之输入输出
  9. Forward团队-爬虫豆瓣top250项目-模块开发过程
  10. php 路由 隐藏index,CI中路由与伪静态、隐藏index.php(十四)
  11. 清华大学 lt;现代软件工程gt; 项目小组名单
  12. 7-9 N个数求和 (20 分)
  13. php绕过验证,PHP-Nuke绕过识别码验证漏洞
  14. Office Word 使用笔记
  15. tornado autoreload 模式
  16. 思科模拟器5506防火墙配置_企业办公网络配置不求人之三——端口映射
  17. Unity 之自动化打包ipa
  18. 26设计模式之建造者模式
  19. 中国历史上10大经典遗言
  20. miceforest插补

热门文章

  1. 《系统集成项目管理》第八章 项目进度管理
  2. 关于ReWrite配置及iis重启命令
  3. 视频文件格式--视频封装格式--视频编码格式区分
  4. 记录片《货币》- 有价星球笔记
  5. Dijkstra算法--斐波那契堆,Python实现
  6. ipad上html语言编辑,Html编辑器iPad版
  7. tp1900芯片对比7621a_MT7621A和MT7620A两个芯片各有什么特点?
  8. spring注解原理:从Controller注解切入了解spring注解原理
  9. 怎么删除远程桌面连接IP记录 删除连接信息
  10. 拼多多上架助手用哪个?拼多多商家必备工具