Visual Studio+C#实现信道与信息率失真函数

1. 要求

设计一款信道与信息率失真函数计算系统,要求如下:

  1. 系统能够通过输入的转移概率矩阵计算对称以及非对称离散无记忆信道的信道容量
  2. 系统能够通过输入的概率分布以及失真矩阵来计算与信息率失真函数有关的相关参数,例如Dmin,R(Dmin),Dmax,R(Dmax),并且能够给出相应的转移概率矩阵
  3. 系统通过多个窗体组合,通过总菜单点击不同选项会进入到相应的计算中
  4. 窗体中应该包括MenuStrip控件,通过控件中的选项进行不同的操作

2. 过程

 1.首先进行窗体的设计,根据要求需要一个菜单窗口以及三个计算分别对应的窗口,为了使得系统更加完整再添加一个登录窗口,所以一共需要5个窗口。

先通过登录窗口登录,其中密码在输入时设置为不可见的:

图1 登录窗体

登录后需要进入菜单界面,其设计如下:

图2 菜单窗体

通过菜单中的按钮进入不同系统,接下来分别是对三个计算系统的设计:

图3 对称离散无记忆信道

图4 准对称离散无记忆信道

图5 信息率失真函数

以上三个计算窗体中都包含输入与输出,矩阵输入都使用RichTextBox控件,信息率失真函数中多了一个概率分布的输入,使用TextBox控件实现即可。除此之外,它们的MenuStrip控件中都包含有运行、清空、返回菜单、退出共四个选项,其中运行选项可以直接通过快捷键F5来实现。

2.窗体都已经设计完毕,接下来是对相关的按钮或者是选项中的事件进行代码编写。以下只给出准离散信道和信息率失真函数的相关代码及说明。

准离散信道:

private void 运行F5ToolStripMenuItem_Click(object sender, EventArgs e){int a = richTextBox1.Lines.Length; //行数double h = 0; //H(Y|ai)char[] sp = new char[3] { ' ', '\t', '\n' };string[] str1 = new string[100];str1 = richTextBox1.Text.Split(sp);int b = str1.Length / a; //列数string[,] str2 = new string[a, b];double[] tmp = new double[b]; //每一列的和string[,] tp = new string[b, a];double m = 0;//不止一列的子矩阵的行元素求和double z = 0;//只有一列的子矩阵行元素之和乘以列元素之和的对数再求和for (int i = 0; i < a; i++){for (int j = 0; j < b; j++){str2[i, j] = str1[i * b + j];}}for (int i = 0; i < b; i++){tmp[i] = 0;for (int j = 0; j < a; j++){tmp[i] += Convert.ToDouble(str2[j, i]);}if (tmp[i] == tmp[0]){m += Convert.ToDouble(str2[0, i]);}if (tmp[i] != tmp[0]){z += Convert.ToDouble(str2[0, i]) * Math.Log(tmp[i], 2);}}for (int i = 0; i < b; i++){double p = Convert.ToDouble(str2[0, i]);h += p * Math.Log(p, 2);}double C = Math.Log(a, 2) + h - m * Math.Log(tmp[0], 2) - z;//信道容量label3.Text=Convert.ToString(C);}

信息率失真函数:

private void 运行ToolStripMenuItem_Click(object sender, EventArgs e){int a = richTextBox1.Lines.Length;string[] s =textBox1.Text.Split(' ');char[] sp = new char[3] { ' ', '\t', '\n' };string[] str1 = new string[100];str1 = richTextBox1.Text.Split(sp);int b = str1.Length /a;double h = 0;//H(X)double[,] d = new double[a, b];//失真矩阵string[,] pmin = new string[a, b];//Dmin时的转移概率矩阵string[,] pmax = new string[a, b];//Dmax时的转移概率矩阵double[] p=new double[s.Length];//输入概率double[] D=new double[b];//满足R(D)=0中D的值for (int i = 0; i < p.Length; i++){p[i] = Convert.ToDouble(s[i]);h +=-p[i]*Math.Log(p[i],2);}for (int i = 0; i < a; i++){for (int j = 0; j < b; j++){d[i, j] = Convert.ToDouble(str1[i * b + j]);pmax[i, j] = "0";pmin[i, j] = "0";}}for (int i = 0; i < b; i++){D[i] = 0;for (int j = 0; j < a; j++){D[i] += p[j] * d[j, i];}}double min = D[0];//所有满足R(D)=0中D的最小值,即Dmaxfor (int i = 0; i < b; i++)if (D[i] < min)min = D[i];for (int i = 0; i < a; i++){for (int j = 0; j < b; j++){if (d[i, j] == 0)pmin[i, j] = "1";}}for (int i = 0; i < b; i++){if (D[i] == min){for (int j = 0; j < a; j++)pmax[j, i] = "1";break;}}label4.Text = "Dmin=0,R(Dmin)="+Convert.ToString(h)+",转移概率矩阵为";label5.Text="";label6.Text="Dmax="+Convert.ToString(min)+",R(Dmax)=0,转移概率矩阵为";label7.Text="";for (int i = 0; i < a; i++){for (int j = 0; j < b; j++){label5.Text += pmin[i, j]+' ';label7.Text += pmax[i, j]+' ';}label5.Text += '\n';label7.Text += '\n';}}

3.以上实验步骤都完成后,再将每一个窗口中的选项一一实现,其中返回菜单的选项直接再将菜单的窗口调用出来即可如下图3.1所示,注意要使用Show()函数才能够对打开的窗口进行操作。最后再每点击按钮打开一个新窗体的时候要自动关闭旧窗体。

       至此,实验整体设计结束。

3. 测试

       接下来开始对系统进行测试:

登录后进入菜单界面:

图6 菜单界面

点击对称离散无记忆信道进入测试,输入后按下F5运行:

图7 对称离散无记忆信道测试

通过验证,其结果完全正确

此时再点击清空选项发现所有数据都已经清空,可以重新输入。再点击返回菜单选项,系统将会返回菜单。:以下其它两个计算系统的测试中将不再重复该部分功能的测试。

测试准对称离散无记忆信道:

图8 准对称离散无记忆信道测试1

图9 准对称离散无记忆信道测试2

经过验证,两种测试的结果都是正确的,该部分没有问题。

测试信息率失真函数:

图10 信息率失真函数测试1

图11 信息率失真函数测试2

图12 信息率失真函数测试3

依次对上述测试结果进行验证后得知均为正确结果,但是同时也发现,Dmax时的转移概率矩阵可能并不唯一,本程序只给出其中第一个满足条件的结果。

测试完毕,所有要求均已经实现。

4. 总结

在对称和准对称离散无记忆信道的实验中,我只是给出了它们的信道容量,没有进一步给出它们更多的相关属性,而在信息率失真函数的实验中,我给出的结果是Dmin与Dmax两个状态的相应属性,而没有对R(D)这个函数作进一步分析,例如还可以增加R(D)函数的曲线图,然后通过改变参数来进一步增加对比实验进行深入分析。信道容量和信息率失真函数都可以为通信所服务,引入信道容量能够为信道编码服务,提高通信的可靠性,而引入信息率失真函数可以为信源的压缩编码服务,提高通信的有效性。

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

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

相关文章

分布式学习笔记

1. CAP理论 Consistency&#xff08;一致性&#xff09;&#xff1a;用户访问分布式系统中的任意节点&#xff0c;得到的数据必须一致。 Availability&#xff08;可用性&#xff09;&#xff1a;用户访问集群中的任意健康节点&#xff0c;必须得到相应&#xff0c;而不是超时…

vue3-渲染机制

渲染机制 Vue 是如何将一份模板转换为真实的 DOM 节点的&#xff0c;又是如何高效地更新这些节点的呢&#xff1f;我们接下来就将尝试通过深入研究 Vue 的内部渲染机制来解释这些问题。 虚拟 DOM 你可能已经听说过“虚拟 DOM”的概念了&#xff0c;Vue 的渲染系统正是基于这…

基于Java SSM框架实现精准扶贫管理系统项目【项目源码】计算机毕业设计

基于java的SSM框架实现精准扶贫管理系统演示 JSP技术介绍 JSP技术本身是一种脚本语言&#xff0c;但它的功能是十分强大的&#xff0c;因为它可以使用所有的JAVA类。当它与JavaBeans 类进行结合时&#xff0c;它可以使显示逻辑和内容分开&#xff0c;这就极大的方便了用户的需…

一文了解Web3.0真实社交先驱ERA

Web2时代&#xff0c;少数科技巨头垄断了全球近60亿人口的网络社交数据&#xff0c;并用之为自己牟利&#xff0c;用户无法掌控个人数据&#xff0c;打破该局面逐渐成为共识&#xff0c;于是&#xff0c;不少人看到了Web3社交赛道蕴含的巨大机遇&#xff0c;标榜着去中心化和抗…

【STM32】硬件SPI读写W25Q64芯片

目录 基础知识回顾&#xff1a; SPI外设简介 SPI框图 主模式全双工连续传输 非连续传输 初始化SPI外设 核心代码 - 交换一个字节 硬件接线图 Code 程序配置过程 MySPI.c MySPI.h W25Q64.c W25Q64.h W25Q64_Ins.h main.c 基础知识回顾&#xff1a; 【STM32】SP…

php实现讯飞星火大模型3.5

前期准备 vscode下载安装好 composer下载安装好 php环境安装好 &#xff08;以上可以自行网上查阅资料&#xff09; 开始实现 1.注册讯飞星火用户&#xff0c;获取token使用 讯飞星火认知大模型-AI大语言模型-星火大模型-科大讯飞 2.修改对应php文件中的key等 可以参考…

【精选】Java面向对象进阶——接口和抽象类的案例

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏 …

『运维备忘录』之 SSH 命令详解

运维人员不仅要熟悉操作系统、服务器、网络等知识&#xff0c;甚至对于开发相关的也要有所了解。很多运维工作者可能一时半会记不住那么多命令、代码、方法、原理或者用法等等。这里我将结合自身工作&#xff0c;持续给大家更新运维工作所需要接触到的知识点&#xff0c;希望大…

C++学习:list

1.list的定义和结构 list的使用频率不高&#xff0c;在做题时几乎遇不到需要使用list的情景。list是一种双向链表容器&#xff0c;它是标准模板库(STL)提供的一种序列容器。list容器以节点(node的形式存储元素&#xff0c;并使用指针将这些节点链接在一起&#xff0c;形成一个…

苹果电脑深度清理工具CleanMyMac X2025中文版

苹果电脑用户们&#xff0c;你们是否经常感到你们的Mac变得不再像刚拆封时那样迅速、流畅&#xff1f;可能是时候对你的苹果电脑进行一次深度清理了。在这个时刻&#xff0c;拥有一些高效的深度清理工具就显得尤为重要。今天&#xff0c;我将介绍几款优秀的苹果电脑深度清理工具…

java的泛型【详解】

定义类、接口、方法时&#xff0c;同时声明了一个或者多个类型变量&#xff08;如&#xff1a;<E>&#xff09; &#xff0c;称为泛型类、泛型接口&#xff0c;泛型方法、它们统称为泛型。 作用&#xff1a;泛型提供了在编译阶段约束所能操作的数据类型&#xff0c;并自…

【Python】【Pycharm】Python Script头文件设置

1、步骤&#xff1a;File->settings->Editor->File and CodeTemplates->Python Script 2、复制粘贴以下代码&#xff0c;应用即可&#xff1a; #!/usr/bin/env python # -*- coding: utf-8 -*-# Time :${DATE} ${TIME} # Author : admin # Site :${SITE} …

数据库应用:kylin 部署 达梦数据库DM8

目录 一、实验 1.环境 2.部署前规划 3.部署达梦数据库DM8 4.创建数据库及数据库事例管理 5.达梦数据库的基本操作 二、问题 1.xhost命令报错 2.执行安装程序DMInstall.bin 报错 3.解压安装程序报错 4.安装程序找不到文件 5.图像化界面打不开 6.安装内存太小 7.打开…

【HarmonyOS】【DevEco ohpm ERROR: NOTFOUND package “@ohos/hypium“如何解决

参考 &#xff1a;&#xff08;无效&#xff09; 华为开发者论坛 DevEco创建项目时的错误解决_6 月 优质更文活动_路北路陈_InfoQ写作社区 解决&#xff1a; HormonyOS-DevEco Studio新建空项目ERROR解决_oh_modules\ohos\hypium-CSDN博客 将 .ohpm文件夹中的hypium文件夹复…

【Node-RED】安全登陆时,账号密码设置

【Node-RED】安全登陆时&#xff0c;账号密码设置 前言实现步骤密码生成setting.js 文件修改 安全权限 前言 Node-RED 在初始下载完成时&#xff0c;登录是无账号密码的。基于安全性考虑&#xff0c;本期博文介绍在安全登陆时&#xff0c;如何进行账号密码设置。当然&#xff…

相机图像质量研究(35)常见问题总结:图像处理对成像的影响--运动噪声

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结&#xff1a;光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结&#xff1a;光学结构对成…

备战蓝桥杯 Day5

1191&#xff1a;流感传染 【题目描述】 有一批易感人群住在网格状的宿舍区内&#xff0c;宿舍区为n*n的矩阵&#xff0c;每个格点为一个房间&#xff0c;房间里可能住人&#xff0c;也可能空着。在第一天&#xff0c;有些房间里的人得了流感&#xff0c;以后每天&#xff0c;得…

【python】python入门之计算

“数字”&#xff1a; 介绍一下不同形式的数字们 字符串“6”数字6浮点数6.0 注意&#xff1a;输入时的内容自定义为字符串&#xff0c;需要用int&#xff08;&#xff09;进行强制转换 优先级&#xff1a; 常见优先级如下&#xff08;优先级指的是一个算式中先算的部分&…

产品经理学习-产品运营《流程管理》

如何进行流程管理 信息可视化 甘特图-流程管理思维导图-方案讨论原型图-活动文档 明确责任制 分工明确&#xff0c;关键环境有主负责人通过时间倒推督促管理 沟通技巧 明确共同利益以结果激励做好信息同步 如何进行监控活动效果 监控活动的效果是要监控数据 活动每个环境的…

06 分频器设计

分频器简介 实现分频一般有两种方法&#xff0c;一种方法是直接使用 PLL 进行分频&#xff0c;比如在 FPGA 或者 ASIC 设计中&#xff0c;都可以直接使用 PLL 进行分频。但是这种分频有时候受限于 PLL 本身的特性&#xff0c;无法得到频率很低的时钟信号&#xff0c;比如输入 …