matlab 代码 规范

matlab 代码 规范
matlab 代码 规范

1.标识符命名原则

标识符的名字应当直观,其长度应当符合“最小长度,最大信息量”原则。

1)非矩阵变量:

变量名应该以小写字母开头的大小写混合形式譬如:shadowFadingTable,servingSector,rxBufferForRe userID,userPriorityProfile,mcsOneRetrieval等 循环变量应该以i、j、k等为前缀,如

for i_File = 1:nFiles

for j_Position = 1:nPositions

避免仅用最后的字母s(表示单复数)区别两个变量, 例如point和points. 可以用类似pointArray的形式加以区别。

避免使用一个关键字或者特殊意义的字作为变量名

结构体的命名应该以一个大写字母开头,结构体的命名应该是暗示性的,并且不需要包括字段名(fieldname)应采用Segment.length,避免用Segment.SegmentLength 2)常数:

命名常数(包括全局变量)应该采用大写字母,用下划线分割单词,如MAX_ITERA TIONS,COLOR_RED

参数可以以某些通用类型名作为前缀,如COLOR_RED,COLOR_GREEN

3)草稿变量,含矩阵,结构体,元胞:

应用范围比较大的变量应该具有有意义的变量名,作为“草稿变量”的的临时存储空间或者索引可以用短名字。程序员在读到这样的变量的时候,可以假定这个变量

的值在没有几行之后的代码中就不会再用到。通常的“草稿变量”整数的时候用i,

j,k,m,n(最好少用i,j,因为他们作为MA TLAB中的永久性常量表示虚数单

位的)。双精度数的时候常用x,y和z。m表示矩阵,没有m表示标量 命名上将cell, struct与MA TLAB中最常见的numeric array, 即数值矩阵区分开来.

n用于整数变量, 如n_File.

m用于一般的矩阵,如matrix_channelHFResponse;

c用于cell array, 如cell_temp= cell(1, 4);

s用于struct array, 如stuct_user= struct('field', {});

matrix,cell,stuct后面的channelHFResponse,user用来表示有特定含义的中间变量,比如matrix_channelHFResponse,用来表示计算channelHFResponse时中间变量。4)函数:

函数名应该采用小写字母,函数名应该是具有意义的,下划线分割单词

如采用:compute_total_width()避免compwid()

前缀get/set 应该作为访问对象或者属性的保留前缀,如getobj(.)。

前缀compute应该用在计算某些量的函数的地方computespread()。

前缀is应该用在布尔函数的命名的地方,如iscomplete()。

Find,initialize类似。

2.编码及文档注释要求及实例

2.1代码版式

2.1.1M文件函数说明

function [ 函数输出参数] = 函数名( 函数输入)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %此处为函数名,如果不是函数文件就取消此行

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %创建人:

%日期:

%修改人:

%日期:

%函数变量及功能的简单描述

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --函数主体

2.1.2编码设计

本部分说明了M文件编码的设计,包括以下几个方面:

垂直间隔,水平间隔,缩进与对齐,注释。

2.1.2.1垂直间隔

1、空行

空行起着分割块或段落的作用,块(段落)之间一般留一个或两个空行。

空行使用规则:

逻辑块之间要留空行;

结构体定义之间要留空行;

函数定义体之间要留空行;

函数体内,完整的控制结构和单独的语句块之间要留空行;

逻辑上密切相关的语句序列之间不要留空行;

2、换行注意事项

不在一行使用多个语句。唯一的例外是for语句。For语句的初始化,条件和循环都可以在一行中。例如

for (bcnl_num = 0; bcnl_num < count; bcnl_num++)

或者还有switch语句,如果动作很短并且相同的话(后面有详细描述)。

If语句并不是例外:执行语句总是另起一行。例如:

if (bcnl_num > count)

bcnl_num = count;

{}与case总是独占一行。

2.1.2.2水平间隔

逗号后面要有空格,但是不要在结构的成员与指针操作符前后有空格。例如:

foo.index

在=,&&,+,-,>, <与|| 前后加上空格,包括:如

simpleA verage = (firstTerm + secondTerm) / two;

1 : nIterations

另起一行时,后面一行和前面一行中要继续的地方对齐:

weithedPopulation = (doctorWeight * nDoctors) + …

(layerWeight * nLawyers) + …

(chiefWeight * nChiefs);...

function (param1,param2,…

param3)

2.1.2.3长行拆分

一行代码不能超过180个字符。长行拆分时,在逻辑断点处分行。拆分时,运算符放在被拆分行的尾部,而不是新行的首部。拆分后的新行应与被拆分行采用能够表现出逻辑关系的对齐方式。

示例:

if (((new_shape.x > left_border) &&

(new_shape.x < right_border)) &&

( (new_shape.y > bottom_border) &&

(new_shape.y < top_border))) {

d raw(new_shape);

}

2.1.2.4代码行及行内空格

(1)代码行中不运行出现中文。

(2)关键字后要留空格。像const、inline、case等关键字后要留空格,以辨析关键字;像if、for、do、while、switch等关键字后要留空格再跟左括号“(”,以突出关键字。

(3)“(”若不在一行的开始,应与前面的字符空格。例如,if、while、do-while、switch、for 语句等控制结构块的“(”应与这些关键字语句之间空格。

(4)“,”之后要留空格;若“;”不是一行的结束符,后面也要留空格。

(5)“?”、“:”前后都要留空格。

(6)“(”、“[”向后紧跟,“]”、“,”、“;”、“)”向前紧跟,紧跟处不留空格。

(7)一元运算符与所作用的操作数之间不要加空格,如“!”、“~”、“++”、“&”、“*”等。(8)“.”、“->”这类运算符前后都不要留空格。

2.1.2.5缩进与对齐

缩进的水平是一个TAB键,可将编辑器的TAB符定义为4个空格。

嵌套块之间使用4个空格(一个TAB键)的缩进方式。

模块和子程序头以及子程序声明从第一列起。

下列情况下缩进一个水平:

?子程序声明

?条件(看下面)

?循环的结构

?switch语句

?case labels

条件的else与if有相同的缩进。因此格式就是:

fid = fopen(fileName);

if(fid~ = -1)

statements

else

statements

end

switch语句的一般格式:

switch(condition)

case ABC

处理语句;

case DEF

处理语句;

otherwise

处理语句;

end

注释与它们作注释的代码部分有相同的缩进(见Comments)。

2.1.2.6注释

1)程序内部不同功能模块要空一行,同时附注释说明模块的作用、功能。这样程序结构清晰易

懂,便于同学间学习交流。

例如:

%% 注释说明下模块一的功能

…模块一…代码…

此处为空行

%% 注释说明下模块二的功能

…模块二…代码…

2)多层循环嵌套要在每一个结束的end 后加注释说明该层循环结束

例:

for %循环1

for %循环2

for %循环3

……

代码段

……

end %循环3结束

end %循环2结束

end %循环1结束

3)用于理解一小段代码含义的注释,统一写在代码上方,如

4)用于理解一句代码的意思可以写在代码后方,但是注意不能超过180字符。太长可以考虑写在代码上方。

5)大段代码,有完整的阶段性的运行结果,需要使用%% 形式,使用单元来注释。

3.软件编写说明写作规范

作为软件工程过程的一个阶段,程序编码是设计的继续。然而,在编码中所遇到的问题,如程序设计语言的特性和程序设计风格会深刻地影响软件的质量和可维护性。

3.1对源程序的质量要求

为了保证程序编码的质量,程序员必须深刻理解、熟练地掌握并正确运用程序设计语言的特性。然后,软件工程项目对代码编写的要求绝不仅仅是源程序语法上的正确性,也不只是源程序中没有各种错误,此外,还要求源程序具有良好的结构性和良好的程序设计风格。

例如写出的源程序便于阅读,又便于测试和排除所发现的程序故障,就能够有效地在开发期间消除绝大多数在程序中隐藏的故障,使得程序可以做到正常稳定地运行,极大地减小了运行期间软件失效的可能性,大大提高了软件的可靠性。

3.2结构化程序设计

程序编码这一阶段的工作是把软件的详细设计变换成用某一种程序设计语言编写的可实现的源程序,结构化程序设计就是在编写程序时首先必须考虑的问题。

3.2.1结构化程序设计的原则

1)使用语言中的顺序、选择、重复等有限的基本控制结构表示程序逻辑。

2)选用的控制结构只准许有一个入口和一个出口。

3)程序语句组成容易识别的块,每块只有一个入口和一个出口。

4)复杂结构应该用基本控制结构进行组合嵌套来实现。

5)语言中没有的控制结构,可用一段等价的程序段模拟,但要求该程序在整个系统中

应前后一致。

3.3程序设计风格

随着软件规模的增大,复杂性增加,人们逐渐看到,在软件生存期中需要经常阅读程序。特别是在软件测试段和维护段,编写程序的人与参与测试、维护的人都要阅读程序。人们认识到,阅读程序是软件开发和维护过程中的重要组成部分,而且读程序的时间比写程序的时间还要多。

因此,程序实际上也是一种供人阅读的文章,所以就有风格问题。程序设计风格包括四个方面:源程序的文档化,数据说明的方法,语句结构和输入/输出方法中值得注意的问题。

3.3.1程序的文档化

源程序的文档化包括选择标识符(变量和标号)的名字、安排注释以及程序的视觉组织

等。

1)符号的命名

符号即标识符,包括模块名、变量名、子程序名以及数据区名、缓冲区名等。

这些名字应能反应它所代表的实际东西,应有一定的实际意义,使其能够见名知意,有助于对程序功能的理解。

2)程序的注释

夹在程序中的注释是程序员与日后的程序读者之间通信的重要手段。正确注释能够帮助读者理解程序,可为后续阶段进行测试和维护,提供明确的指导。大多数

程序设计语言允许用自然语言来注释,这就给阅读程序带来了很大的方便。一些正

规的程序文本中,注释行数量占到整个源程序的1/3到1/2,甚至更多。

注释分为序言性注释和功能性注释。

序言性注释通常置于每个程序模块的开头部分,它应当给出程序的整体说明,对于

理解程序具有引导作用。有关项目包括:程序标题;有关该模块功能和目的的说明;

主要算法;接口说明:包括调用形式,参数描述,子程序清单;有关数据描述(重

要的变量及其用途,约束或限制条件,以及其他有关信息);模块的位置(在那一个

源文件中,或隶属于哪一个软件包);开发简历:模块设计者,复审者,复审日期,

修改日期及有关的说明等。(参照软件工程中相应的例子)

功能性注释嵌在源程序体中,用以描述其后的语句或程序段是在做什么工作,也就

是解释下面要“做什么”,或是执行了下面的语句会怎么样。而不需要解释下面怎么做,因为解释怎么做常常是与程序重复的,并且对阅读者理解程序没有什么帮助。书写

功能性注释,要注意以下几点:

用于描述一段程序,而不是每一个语句;

用缩进和空行,使程序与注释容易区别;

注释要正确。

3)视觉组织――空格、空行和缩进

一个程序如果写得密密麻麻,分不出层次来常常是很难看懂的。优秀的程序员在利

用空格、空行和缩进的技巧上显示了他们的经验。恰当的利用空格,可以突出运算

的优先性,避免发生运算的错误。

3.3.2数据说明

虽然在设计阶段已经确定了数据结构的组织及其复杂性。在编写程序时,则需要注意数据说明的风格。为了是程序中数据说明更易于理解和维护,必须注意以下几点:

1)数据说明的次序应当规范化。使数据属性容易查找,也有利于测试,排错和维护。

原则上,数据说明的次序与语法无关,其次序是任意的。但出于阅读、理解和维护

的需要,最好使其规范化,是说明的次序先后次序固定。

推荐,

常量说明->简单变量类型说明->数组说明->公用数据块说明->所有文件说明。类型说明还可以按照以下顺序:整型变量说明->实型变量说明->字符变量说

明->逻辑变量说明。

2)当多个变量名用一个语句说明时,应当对这些变量按字母的顺序排序。

3)如果设计了一个复杂的数据结构,应使用注释说明在程序实现时这个数据结构的特

点。例如对C链表结构等都应当在注释中做必要的补充说明。

3.3.3语句结构

在设计阶段确定了软件的逻辑结构,但构造单个语句则是编码阶段的任务。语句构造力求简单,直接,不能为了片面追求效率而使语句结构复杂化。

1)在一行内只写一条语句,并采取适当的缩进格式,是程序的逻辑和功能变得更加明

确。

2)程序编写首先应当考虑清晰性,不要刻意追求技巧性,使程序编写的过于紧凑。软

件工程技术要求软件生产工程化、规范化,为了提高程序的可读性,减少出错的可能性,提高测试与维护的效率,要求把程序的清晰性放在首位。因此写出的程序必须让人很容易读懂。

3)除非对效率有特殊的要求,程序编写要做到清晰第一,效率第二。

4)程序编写得要简单清楚,直截了当地说明程序员的用意。

5)首先要保证程序的正确,然后才要求提高速度。

6)尽量使用库函数。

7)避免使用临时变量而使可读性下降。

8)尽量使用公共过程或子程序去代替重复的功能代码段。要注意,这段代码应具有一

个独立的功能,不要只因代码形式一样便将其抽出组成一个公共过程或子程序。

9)用调用公共函数去代替重复使用的表达式。

10)使用括号来清晰地表达算术表达式和逻辑表达式的运算顺序。

11)尽量只采用三种基本的控制结构来编写程序。

12)采用逻辑表达式代替分支嵌套。

13)尽量减少使用“否定”条件的条件语句。

14)避免采用过于复杂的条件测试。

15)避免使用空ELSE语句和IF…THEN…IF的语句。

16)避免过多的循环嵌套和条件嵌套。

17)数据结构要有利于程序的简化。

18)要模块化,使模块功能尽可能单一化,模块间的耦合能够清晰可见。

19)不要修补不好的程序,要重新编写。也不要一味地追求代码的重用,要重新组织。

20)利用信息隐蔽,确保每一模块的独立性。

21)对太大的程序,要分块编写,测试,然后集成。

22)注意计算机浮点运算的特点。

23)不要单独进行浮点数的比较。

24)避免不恰当地追求程序效率,在改进效率前,要作出有关效率的定量估计。

25)确保所有变量在使用前都进行初始化。

26)经常反躬自省:“如果自己不是编码的人,那么能看懂它吗?”

3.3.4输入和输出

输入输出信息是与用户的使用直接相关的。输入和输出的方式和格式应当尽可能的方便用户的使用。一定要避免因设计不当给用户带来的麻烦。因此,在软件需求分析阶段和设计阶段,就应基本确定输入和输出的风格。系统能否为用户接受,有时就取决于输入和输出的风格。

在设计和程序编码时都应考虑下列原则:

1)对所有的输入数据都进行检验,从而识别错误的输入,以保证每个数据的有效性。

2)检查输入项的各种重要组合的合理性,必要时报告输入状态信息。

3)使得输入的步骤和操作尽可能简单,并保持简单的输入格式。

4)输入数据时,应允许使用自由格式输入。

5)应允许缺省值。

6)输入一批数据时,最好使用输入结束标志,而不要由用户指定输入数据数目。

7)在以交互式输入方式进行输入时,要在屏幕上使用提示符明确提示交互输入的请求,

指明可使用选择项的种类和取值范围。同时,在数据输入的过程中和输入结束时要

要在屏幕上给出状态信息;

8)当程序语言对输入格式有严格的要求时,应保持输入格式与输入语句要求的一致性。

9)给所有的输出加注释,并设计输出报表格式。

在交互式系统中(网管可能需要),这些要求应称为软件需求的一部分,并通过设计和编码,在用户和系统之间建立良好的通信接口。

总之,要从程序编码的实践中,积累编制程序的经验,培养和学习良好的程序设计风格,使编写出来的程序清晰易懂,易于测试和维护。在程序编码阶段改善和提高软件的质量。

数字图像处理_旋转与幅度谱(含MATLAB代码)

数字图像处理实验一 15生医 一、实验内容 产生右图所示图像 f1(m,n),其中图像大小为256 ×256,中间亮条为128×32,暗处=0,亮处=100。 对其进行FFT: ①同屏显示原图f1(m,n)和FFT(f1)的幅度谱图; ②若令f2(m,n)=(-1)^(m+n)f1(m,n),重复 以上过程,比较二者幅度谱的异同,简述理由; ③若将f2(m,n)顺时针旋转90度得到f3(m,n),试显示FFT(f3)的 幅度谱,并与FFT(f2)的幅度谱进行比较; ④若将f1(m,n) 顺时针旋转90度得到f4(m,n),令f5(m,n) = f1(m,n) + f4(m,n),试显示FFT(f5)的幅度谱,指出其与 FFT(f1)和FFT(f4)的关系; ⑤若令f6(m,n)=f2(m,n)+f3(m,n),试显示FFT(f6)的幅度谱,并指出其与 FFT(f2)和FFT(f3)的关系,比较FFT(f6)和FFT(f5)的幅度谱。 二、运行环境 MATLAB R2014a 三、运行结果及分析 1.同屏显示原图f1(m,n)和FFT(f1)的幅度谱图:

50100150200250 100150200250 50100150200250 100150200250 2.令f2(m,n)=(-1)^(m+n )f1(m,n),对其进行FFT ,比较f2与f1幅度谱的异同,简述理由: 50100150200250 100150200250 50100150200250 100150200250 异同及理由:①空域:f2由于前边乘了系数(-1)^(m+n ),导致灰度值有正有负,而在MATLAB 的imshow 函数中默认把负值变为0(有些情况是取反),所以形成了如左图所示的黑白花纹。②频域:FFT(2)

matlab常用操作命令

matlab常用操作备忘(1)2007-11-30 22:01:06 分类: 北京理工大学 20981 陈罡 帮助朋友做几个数据的卷积的仿真,一用才知道,呵呵,发现对不住偶的导师了。。。好多matlab的关键字和指令都忘记了。特意收集回顾一下: (1)管理命令和函数 addpath :添加目录到MATLAB搜索路径 doc :在Web浏览器上现实HTML文档 help :显示Matlab命令和M文件的在线帮助 helpwin helpdesk :help 兄弟几个 lookfor :在基于Matlab搜索路径的所有M文件中搜索关键字 partialpath:部分路径名 8*) path :所有关于路径名的处理 pathtool :一个不错的窗口路径处理界面 rmpath :删除搜索路径中指定目录 type :显示指定文件的内容 ver :版本信息 version :版本号 web :打开web页 what :列出当前目录吓所有的M文件 Mat文件和 Mex文件 whatsnew :显示readme文件 which :显示文件位置 (2)管理变量和工作区 clear :从内存中删除所有变量,clear x y z是删除某个变量 disp :显示文本或数组内容 length :数组长度(最长维数) load :重新载入变量(从磁盘上) mlock :锁定文件,防止文件被错误删除 munlock :解锁文件 openvar :在数组编辑器中打开变量 pack :整理内存空间 save :保存变量到文件 8*) size :数组维数

who whos :列出内存变量 workspace :显示工作空间窗口 (3)管理命令控制窗口(command窗口) clc :清空命令窗口 echo :禁止或允许显示执行过程 format :设置输出显示格式 home :光标移动到命令窗口左上角 more :设置命令窗口页输出格式 (4)文件和工作环境 cd :改变工作目录 copyfile :复制文件 delete :删除文件和图形对象 diary :把命令窗口的人机交互保存到文件 dir :显示目录 edit :编辑文本文件 fileparts :返回文件的各个部分 fullfile :使用指定部分建立文件全名 inmem :返回内存(伪代码区)的matlab函数名 ls :在unix系统中列出目录(win中亦可) matlabroot :根目录 mkdir :新建目录 open :打开文件 pwd :显示当前目录 tempdir :返回系统临时目录的名字 tempname :随机给出一个临时字符串(可用作文件名) ! :直接调用操作系统command命令 (5)启动和推出matlab matlabrc :Matlab的启动M文件 exit quit :退出Matlab startup :运行matlab启动文件 (6)程序设计 builtin :从可重载方法中调用内置函数 eval :执行包含可执行表达式的字符串

matlab程序大全答案

频率特性类题目 1 一个系统的开环传递函数为 ,试绘制其当K=5、30时系统的开环频率特性Nyquist 图,并判断系统的稳定性。 w=linspace(0.5,5,1000)*pi; sys1=zpk([],[0 -10 -2],100) sys2=zpk([],[0 -10 -2],600) figure(1) nyquist(sys1,w) title('system nyquist charts with k=5') figure(2) nyquist(sys2,w) title('system nyquist charts with k=30') 由图可知K=5时,开环Nyquist 曲线没有包围(-1,j0)点,所以系统稳定。 K=30时,开环Nyquist 曲线包围(-1,j0)点,所以系统不稳定。 2系统开环传递函数为 ,建立其零极点增益模型, 然后分别绘制当K=5、K=30时系统的开环频率特性Bode 图,并判断系统的稳定性。 sys1=zpk([],[0 -10 -2],100) sys2=zpk([],[0 -10 -2],600) figure(1) [Gm1,Pm1,Wcg1,Wcp1]=margin(sys1) bode(sys1) title('system bode charts with k=5'),grid figure(2) [Gm2,Pm2,Wcg2,Wcp2]=margin(sys2) bode(sys2) title('system bode charts with k=30'),grid 因为K=5时,Wcg>Wcp,所以系统稳定。 K=10时,Wcg

matlab相关图形实现代码

根据数据点绘制饼图和针状图: x=[1 2 3 4 5 6]; >> subplot(2,2,1);pie(x); >> subplot(2,2,2);pie3(x); >> subplot(2,2,3);stem(x); >>subplot(2,2,4);stem3(x); 5% 10% 14% 19% 24% 29% 24% 29% 19% 5%14% 10%0 2 4 6 2 4 6 5 10 01 2 05 10

根据数据点绘制向量场图、羽状图和罗盘图: x=[1 2 3 4 5 6];y=[1 2 3 4 5 6]; u=[1 2 3 4 5 6];v=[1 2 3 4 5 6]; subplot(2,2,1);quiver(x,y,u,v); subplot(2,2,2);quiver(x,y,u,v,'r'); subplot(2,2,3);feather(u,v); subplot(2,2,4);compass(u,v); 024680 246 802468 246 80 5 10 15 2 4 6 5 10 30 210 60240 90270 120 300 150330 180

rand(m,n)产生m ×n 均匀分布的随机矩阵,元素取值在0.0~1.0。 randn 函数:产生标准正态分布的随机数或矩阵的函数。 Y = randn(m,n) 或 Y = randn([m n])返回一个m*n 的随机项矩阵。 > theta=10*rand(1,50); %确定50个随机数theta >> Z=peaks; %确定Z 为峰值函数peaks >> x=0:0.01:2*pi;y=sin(x); %确定正弦函数数据点x.y >> t=randn(1000,1); %确定1000个随机数t >> subplot(2,2,1);rose(theta); %关于(theta )的玫瑰花图 >> subplot(2,2,2);area(x,y); %关于(x,y)的面积图 >> subplot(2,2,3);contour(Z); %关于Z 的等值线图(未填充) >> subplot(2,2,4);hist(t); %关于t 的柱状图 5 10 30 210 60 240 90270 120300150330 18000246 -1 -0.500.5 110 20 30 40 10 2030 40-4 -2 2 4 100 200 300

matlab图像处理代码

附录 MATLAB图像处理命令  1.applylut  功能: 在二进制图像中利用lookup表进行边沿操作。 语法: A = applylut(BW,lut) 举例 lut = makelut('sum(x(:)) == 4',2); BW1 = imread('text.tif'); BW2 = applylut(BW1,lut); imshow(BW1) figure, imshow(BW2) 相关命令: makelut 2.bestblk  功能: 确定进行块操作的块大小。 语法: siz = bestblk([m n],k) [mb,nb] = bestblk([m n],k) 举例 siz = bestblk([640 800],72) siz = 64 50 相关命令: blkproc 3.blkproc  功能:

MATLAB 高级应用——图形及影像处理 320 实现图像的显式块操作。 语法: B = blkproc(A,[m n],fun) B = blkproc(A,[m n],fun,P1,P2,...) B = blkproc(A,[m n],[mborder nborder],fun,...) B = blkproc(A,'indexed',...) 举例 I = imread('alumgrns.tif'); I2 = blkproc(I,[8 8],'std2(x)*ones(size(x))'); imshow(I) figure, imshow(I2,[]); 相关命令: colfilt, nlfilter,inline 4.brighten  功能: 增加或降低颜色映像表的亮度。 语法: brighten(beta) newmap = brighten(beta) newmap = brighten(map,beta) brighten(fig,beta) 相关命令: imadjust, rgbplot 5.bwarea  功能: 计算二进制图像对象的面积。 语法: total = bwarea(BW) 举例 BW = imread('circles.tif'); imshow(BW);

matlab代码大全

MATLAB主要命令汇总 MATLAB函数参考 附录1.1 管理用命令 函数名功能描述函数名功能描述 addpath 增加一条搜索路径 rmpath 删除一条搜索路径 demo 运行Matlab演示程序 type 列出.M文件 doc 装入超文本文档 version 显示Matlab的版本号 help 启动联机帮助 what 列出当前目录下的有关文件 lasterr 显示最后一条信息 whatsnew 显示Matlab的新特性 lookfor 搜索关键词的帮助 which 造出函数与文件所在的目录 path 设置或查询Matlab路径 附录1.2管理变量与工作空间用命令 函数名功能描述函数名功能描述 clear 删除存中的变量与函数 pack 整理工作空间存 disp 显示矩阵与文本 save 将工作空间中的变量存盘 length 查询向量的维数 size 查询矩阵的维数 load 从文件中装入数据 who,whos 列出工作空间中的变量名 附录1.3文件与操作系统处理命令 函数名功能描述函数名功能描述 cd 改变当前工作目录 edit 编辑.M文件 delete 删除文件 matlabroot 获得Matlab的安装根目录 diary 将Matlab运行命令存盘 tempdir 获得系统的缓存目录 dir 列出当前目录的容 tempname 获得一个缓存(temp)文件 ! 执行操作系统命令 附录1.4窗口控制命令 函数名功能描述函数名功能描述 echo 显示文件中的Matlab中的命令 more 控制命令窗口的输出页面format 设置输出格式 附录1.5启动与退出命令 函数名功能描述函数名功能描述 matlabrc 启动主程序 quit 退出Matlab环境 startup Matlab自启动程序 附录2 运算符号与特殊字符附录 2.1运算符号与特殊字符 函数名功能描述函数名功能描述 + 加 ... 续行标志 - 减 , 分行符(该行结果不显示) * 矩阵乘 ; 分行符(该行结果显示) .* 向量乘 % 注释标志 ^ 矩阵乘方 ! 操作系统命令提示符 .^ 向量乘方矩阵转置 kron 矩阵kron积 . 向量转置 \ 矩阵左除 = 赋值运算 / 矩阵右除 == 关系运算之相等 .\ 向量左除 ~= 关系运算之不等 ./ 向量右除 < 关系运算之小于

数字图像处理matlab代码

一、编写程序完成不同滤波器的图像频域降噪和边缘增强的算法并进行比较,得出结论。 1、不同滤波器的频域降噪 1.1 理想低通滤波器(ILPF) I1=imread('eight.tif'); %读取图像 I2=im2double(I1); I3=imnoise(I2,'gaussian',0.01); I4=imnoise(I3,'salt & pepper',0.01); figure,subplot(1,3,1); imshow(I2) %显示灰度图像 title('原始图像'); %为图像添加标题 subplot(1,3,2); imshow(I4) %加入混合躁声后显示图像 title('加噪后的图像'); s=fftshift(fft2(I4)); %将灰度图像的二维不连续Fourier 变换的零频率成分 移到频谱的中心 [M,N]=size(s); %分别返回s的行数到M中,列数到N中n1=floor(M/2); %对M/2进行取整 n2=floor(N/2); %对N/2进行取整 d0=40; %初始化d0 for i=1:M for j=1:N d=sqrt((i-n1)^2+(j-n2)^2); %点(i,j)到傅立叶变换中心的距离 if d<=d0 %点(i,j)在通带内的情况 h=1; %通带变换函数 else %点(i,j)在阻带内的情况 h=0; %阻带变换函数 end s(i,j)=h*s(i,j); %ILPF滤波后的频域表示

end end s=ifftshift(s); %对s进行反FFT移动 s=im2uint8(real(ifft2(s))); %对s进行二维反离散的Fourier变换后,取复 数的实部转化为无符号8位整数 subplot(1,3,3); %创建图形图像对象 imshow(s); %显示ILPF滤波后的图像 title('ILPF滤波后的图像(d=40)'); 运行结果: 1.2 二阶巴特沃斯低通滤波器(BLPF) I1=imread('eight.tif'); %读取图像 I2=im2double(I1); I3=imnoise(I2,'gaussian',0.01); I4=imnoise(I3,'salt & pepper',0.01); figure,subplot(1,3,1); imshow(I2) %显示灰度图像 title('原始图像'); %为图像添加标题 subplot(1,3,2); imshow(I4) %加入混合躁声后显示图像 title('加噪后的图像'); s=fftshift(fft2(I4));%将灰度图像的二维不连续Fourier 变换的零频率成分 移到频谱的中心 [M,N]=size(s); %分别返回s的行数到M中,列数到N中n=2; %对n赋初值

MATLAB简单程序大全

MATLAB简单程序大全 求特征值特征向量 A=[2 3 4;1 5 9;8 5 2] det(A) A' rank(A) inv(A) rref(A) eig(A)%求特征值和特征向量 卫星运行问题 h=200,H=51000,R=6378; a=(h+H+2*R)/2; c=(H-h)/2; b=(a^2-c^2)^(1/2); e=c/a; f=sqrt(1-exp(2).*cos(t)^2); l=int(f,t,0,pi/2) L=4*a.*l 动态玫瑰线 n=3;N=10000; theta=2*pi*(0:N)/N; r=cos(n*theta); x=r.*cos(theta); y=r.*sin(theta); comet(x,y) 二重积分 syms x y f=x^2*sin(y); int(int(f,x,0,1),y,0,pi) ezmesh(f,[0,1,0,pi]) 函数画图 syms x;f=exp(-0.2*x)*sin(0.5*x); ezplot(f,[0,8*pi])

玫瑰线 theta=0:0.01:2*pi; r=cos(3*theta); polar(theta,r,'r') 求x^2+y^2=1和x^2+z^2=1所围成的体积 syms x y z R r=1; Z=sqrt(1-x^2); y0=Z; V=8*int(int(Z,y,0,y0),x,0,1) 求导数及图像 f='1/(5+4*cos(x))'; subplot(1,2,1);ezplot(f) f1=diff(f) subplot(1,2,2);ezplot(f1) 绕x轴旋转 t=(0:20)*pi/10; r=exp(-.2*t).*sin(.5*t); theta=t; x=t'*ones(size(t)); y=r'*cos(theta); z=r'*sin(theta); mesh(x,y,z) colormap([0 0 0]) 某年是否闰年 year=input('input year:='); n1=year/4; n2=year/100; n3=year/400; if n1==fix(n1)&n2~=fix(n2) disp('是闰年') elseif n1==fix(n1)&n3==fix(n3) disp('是闰年') else

遗传算法经典MATLAB代码

遗传算法实例: 也是自己找来的,原代码有少许错误,本人都已更正了,调试运行都通过了的。 对于初学者,尤其是还没有编程经验的非常有用的一个文件 遗传算法实例 % 下面举例说明遗传算法% % 求下列函数的最大值% % f(x)=10*sin(5x)+7*cos(4x) x∈[0,10]% % 将x 的值用一个10位的二值形式表示为二值问题,一个10位的二值数提供的分辨率是每为(10-0)/(2^10-1)≈。% % 将变量域[0,10] 离散化为二值域[0,1023], x=0+10*b/1023, 其 中 b 是[0,1023] 中的一个二值数。% % % %--------------------------------------------------------------------------------------------------------------% %--------------------------------------------------------------------------------------------------------------% % 编程

%----------------------------------------------- % 初始化(编码) % 函数的功能是实现群体的初始化,popsize表示群体的大小,chromlength 表示染色体的长度(二值数的长度), % 长度大小取决于变量的二进制编码的长度(在本例中取10位)。 %遗传算法子程序 %Name: %初始化 function pop=initpop(popsize,chromlength) pop=round(rand(popsize,chromlength)); % rand随机产生每个单元 为{0,1} 行数为popsize,列数为chromlength的矩阵, % roud对矩阵的每个单元进行圆整。这样产生的初始种群。 % 计算目标函数值 % 将二进制数转化为十进制数(1) %遗传算法子程序 %Name: %产生[2^n 2^(n-1) ... 1] 的行向量,然后求和,将二进制转化为十进制

图像处理实例(含Matlab代码)

信号与系统实验报告——图像处理 学院:信息科学与工程学院 专业:2014级通信工程 组长:** 组员:** 2017.01.02

目录 目录 (2) 实验一图像一的细胞计数 (3) 一、实验内容及步骤 (3) 二、Matlab程序代码 (3) 三、数据及结果 (4) 实验二图像二的图形结构提取 (5) 一、实验内容及步骤 (5) 二、Matlab程序代码 (5) 三、数据及结果 (6) 实验三图像三的图形结构提取 (7) 一、实验内容及步骤 (7) 二、Matlab程序代码 (7) 三、数据及结果 (8) 实验四图像四的傅里叶变化及巴特沃斯低通滤波 (9) 一、实验内容及步骤 (9) 二、Matlab程序代码 (9) 三、数据及结果 (10) 实验五图像五的空间域滤波与频域滤波 (11) 一、实验内容及步骤 (11) 二、Matlab程序代码 (11) 三、数据及结果 (12)

实验一图像一的细胞计数 一、实验内容及步骤 将该图形进行一系列处理,计算得到途中清晰可见细胞的个数。 首先,由于原图为RGB三色图像处理起来较为麻烦,所以转为灰度图,再进行二值化化为黑白图像,得到二值化图像之后进行中值滤波得到细胞分布的初步图像,为了方便计数对图像取反,这时进行一次计数,发现得到的个数远远多于实际个数,这时在进行一次中值滤波,去掉一些不清晰的像素点,剩下的应该为较为清晰的细胞个数,再次计数得到大致结果。 二、Matlab程序代码 clear;close all; Image = imread('1.jpg'); figure,imshow(Image),title('原图'); Image=rgb2gray(Image); figure,imshow(Image),title('灰度图'); Theshold = graythresh(Image); Image_BW = im2bw(Image,Theshold); Reverse_Image_BW22=~Image_BW; figure,imshow(Image_BW),title('二值化图像'); Image_BW_medfilt= medfilt2(Image_BW,[3 3]); figure,imshow(Image_BW_medfilt),title('中值滤波后的二值化图像'); Reverse_Image_BW = ~Image_BW_medfilt; figure,imshow(Reverse_Image_BW),title('图象取反'); Image_BW_medfilt2= medfilt2(Reverse_Image_BW,[20 20]); figure,imshow(Image_BW_medfilt2),title('第二次中值滤波的二值化图像'); [Label, Number]=bwlabel(Image_BW_medfilt,8);Number [Label, Number]=bwlabel(Image_BW_medfilt2,8);Number

matlab快捷键大全

1.使用“Tab”键可以在Matlab进行命令输入时补全变量名或者命令名; 2.使用“Ctrl+C”组合键能够强制从运行的或者进入死循环的Matlab程序中退出; 3.使用“上”“下”方向键能够调用Matlab的历史命令; 4.Matlab的变量命名规则注意: a.区分大小写; b.必须以字母开头; c.中间不能有空格、标点符号等; 5.在一条命令或语句的末尾加上一个分号,则Matlab就不会在屏幕上显示这条命令计算的结果; 6.在Matlab中,“...”(3个句点)称为“续行符”,表示同一语句的延续输入; 注意:只有当续行符出现在变量名和运算符之间,才能起到语句延续的作用。出现在一个变量名中间时,是不能实现语句延续的。换句话说,变量名不能分割成两行书写。 7.在进行三角函数运算时,Matlab使用的是“弧度制”而不是“角度制”; 8.选择需要注释的语句块以后,使用“Ctrl+R”可以进行Matlab语句注释;使用“Ctrl+T”可以进行语句块的解注释; 9.Matlab数组的下标是从“1”开始的,这点与C语言不同; 1 0.使用空格和逗号隔开的元素指定的是同一行的元素,使用分号或者回车分开的元素指定的是不同行的元素。 Q1:matlab有没有监视内存的方法? A:用函数whos。 Q2:如何解决matlab7.0命令窗口跳出一大堆java错误...

A:换matlab7的sp2。 Q3:自从安装matlab,一开机就在进程里有matlab。 能不能开机的时候进程就不运行matlab? A:开始-->控制面板-->管理工具-->服务 把MATLAB Server的属性改成“手动”就行了。 Q4:退出matlab7程序运行的快捷键。 A:ctrl+q Q5:matlab7远程控制是否有限制? A:不能远程控制,不过你可以先在你的remote机器上打开,然后就可以用了。 Q6:Matlab占用资源太多怎么办? A:用matlab-nojvm启动(如果不需要图形界面)。 Q7:怎样给matlab添加新的toolbox? A:在matlab的文件菜单里边添加路径,选set path。 Q8:请问matlab有没有命令可以调出历史输入啊? A:command history窗口。 Q9:matlab7.0不能在64位的cpu下运行? A:matlab应该是依赖于自己的虚拟机的 但是好像这个虚拟机是在IA32里面作出来的,所以,应该找个带64位的java虚拟机替换原来的,不过不一定能行or so,记不清了) Q10:matlab有没有注释一段的功能? A:选中一段代码,ctrl r就是区段注释 选中一段代码,ctrl t取消区段注释

遗传算法经典MATLAB代码资料讲解

遗传算法经典学习Matlab代码 遗传算法实例: 也是自己找来的,原代码有少许错误,本人都已更正了,调试运行都通过了的。 对于初学者,尤其是还没有编程经验的非常有用的一个文件 遗传算法实例 % 下面举例说明遗传算法% % 求下列函数的最大值% % f(x)=10*sin(5x)+7*cos(4x) x∈[0,10]% % 将x 的值用一个10位的二值形式表示为二值问题,一个10位的二值数提供的分辨率是每为(10-0)/(2^10-1)≈0.01。% % 将变量域[0,10] 离散化为二值域[0,1023], x=0+10*b/1023, 其 中 b 是[0,1023] 中的一个二值数。% % % %--------------------------------------------------------------------------------------------------------------% %--------------------------------------------------------------------------------------------------------------% % 编程 %----------------------------------------------- % 2.1初始化(编码) % initpop.m函数的功能是实现群体的初始化,popsize表示群体的大小,chromlength表示染色体的长度(二值数的长度),

% 长度大小取决于变量的二进制编码的长度(在本例中取10位)。 %遗传算法子程序 %Name: initpop.m %初始化 function pop=initpop(popsize,chromlength) pop=round(rand(popsize,chromlength)); % rand随机产生每个单元 为{0,1} 行数为popsize,列数为chromlength的矩阵, % roud对矩阵的每个单元进行圆整。这样产生的初始种群。 % 2.2 计算目标函数值 % 2.2.1 将二进制数转化为十进制数(1) %遗传算法子程序 %Name: decodebinary.m %产生[2^n 2^(n-1) ... 1] 的行向量,然后求和,将二进制转化为十进制 function pop2=decodebinary(pop) [px,py]=size(pop); %求pop行和列数 for i=1:py pop1(:,i)=2.^(py-i).*pop(:,i); end pop2=sum(pop1,2); %求pop1的每行之和 % 2.2.2 将二进制编码转化为十进制数(2) % decodechrom.m函数的功能是将染色体(或二进制编码)转换为十进制,参数spoint表示待解码的二进制串的起始位置

基于MATLAB图像处理报告

基于M A T L A B图像处理报告一、设计题目 图片叠加。 二、设计要求 将一幅礼花图片和一幅夜景图片做叠加运算,使达到烟花夜景的美图效果。 三、设计方案 、设计思路 利用matlab强大的图像处理功能,通过编写程序,实现对两幅图片的像素进行线性运算,利用灰度变换的算法使图片达到预期的效果。 、软件介绍 MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。 MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。 MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB 也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户直接进行下载就可以用。

基于matlab的车牌号码识别程序代码

基于matlab的汽车牌照识别程序 摘要:本次作业的任务是设计一个基于matlab的汽车牌照识别程序,能够实现车牌图像预处理,车牌定位,字符分割,然后通过神经网络对车牌进行字符识别,最终从一幅图像中提取车牌中的字母和数字,给出文本形式的车牌号码。 关键词:车牌识别,matlab,神经网络 1 引言 随着我国交通运输的不断发展,智能交通系统(Intelligent Traffic System,简称ITS)的推广变的越来越重要,而作为ITS的一个重要组成部分,车辆牌照识别系统(vehicle license plate recognition system,简称LPR)对于交通管理、治安处罚等工作的智能化起着十分重要的作用。它可广泛应用于交通流量检测,交通控制于诱导,机场,港口,小区的车辆管理,不停车自动收费,闯红灯等违章车辆监控以及车辆安全防盗等领域,具有广阔的应用前景。由于牌照是机动车辆管理的唯一标识符号,因此,车辆牌照识别系统的研究在机动车管理方面具有十分重要的实际意义。 2 车辆牌照识别系统工作原理 车辆牌照识别系统的基本工作原理为:将摄像头拍摄到的包含车辆牌照的图像通过视频卡输入到计算机中进行预处理,再由检索模块对牌照进行搜索、检测、定位,并分割出包含牌照字符的矩形区域,然后对牌照字符进行二值化并将其分割为单个字符,然后输入JPEG或BMP格式的数字,输出则为车牌号码的数字。 3 车辆牌照识别系统组成 (1)图像预处理:对汽车图像进行图像转换、图像增强和边缘检测等。 (2)车牌定位:从预处理后的汽车图像中分割出车牌图像。即在一幅车辆图像中找到车牌所在的位置。 (3)字符分割:对车牌图像进行几何校正、去噪、二值化以及字符分割以从车牌图像中分离出组成车牌号码的单个字符图像

matlab代码大全教学文案

m a t l a b代码大全

MATLAB主要命令汇总 MATLAB函数参考 附录1.1 管理用命令 函数名功能描述函数名功能描述 addpath 增加一条搜索路径 rmpath 删除一条搜索路径 demo 运行Matlab演示程序 type 列出.M文件 doc 装入超文本文档 version 显示Matlab的版本号 help 启动联机帮助 what 列出当前目录下的有关文件 lasterr 显示最后一条信息 whatsnew 显示Matlab的新特性 lookfor 搜索关键词的帮助 which 造出函数与文件所在的目录 path 设置或查询Matlab路径 附录1.2管理变量与工作空间用命令 函数名功能描述函数名功能描述 clear 删除内存中的变量与函数 pack 整理工作空间内存 disp 显示矩阵与文本 save 将工作空间中的变量存盘 length 查询向量的维数 size 查询矩阵的维数 load 从文件中装入数据 who,whos 列出工作空间中的变量名 附录1.3文件与操作系统处理命令 函数名功能描述函数名功能描述 cd 改变当前工作目录 edit 编辑.M文件 delete 删除文件 matlabroot 获得Matlab的安装根目录 diary 将Matlab运行命令存盘 tempdir 获得系统的缓存目录 dir 列出当前目录的内容 tempname 获得一个缓存(temp)文件 ! 执行操作系统命令 附录1.4窗口控制命令 函数名功能描述函数名功能描述 echo 显示文件中的Matlab中的命令 more 控制命令窗口的输出页面format 设置输出格式 附录1.5启动与退出命令 函数名功能描述函数名功能描述 matlabrc 启动主程序 quit 退出Matlab环境 startup Matlab自启动程序 附录2 运算符号与特殊字符附录

matlab信道仿真经典源程序

% % % Rayleigh Fading Channel Signal Generator % Using the Dent Model (a modification to the Jakes Model) % % Last Modified 10/18/05 % % Author: Avetis Ioannisyan (avetis@https://www.360docs.net/doc/7d12760268.html,) % % % Usage: % [omega_mTau, Tk] = % ai_RayCh(NumAngles, Length, SymbolRate, NumWaveforms, CarrierFreq, Velocity) % % Where the output omega_mTau is a time scaling factor for plotting % normalized correlations. The LAGS value output by [C,LAGS] = XCORR(...) % should be multiplied by the omega_mTau scaling factor to properly display % axis. Tk is a two dimensional vector [M, N] = SIZE(Tk) with % M=numWaverorms and N=Length specified in the RayCh(...) function call % % And the input variables are: % % NumAngles - scalar power of 2, NumAngles > 2^7 is used to specify the % number of equally strong rays arriving at the receiver. It used to % compute the number of oscillators in the Dent model with N0 = numAngles/4 % % Length - scalar preferably power of 2 for faster computation, Length > 2^17 % is used to specify the length of the generated sequence. Lengths near 1E6 % are close to realistic signals % % SymbolRate - scalar power of 2 and is in kilo-symbols-per-sec is used to % specify what should be the transmission data rate. Slower rates will % provide slowly fading channels. Normal voice and soem data rates are % 64-256 ksps % % NumWaveforms - scalar used to specify how many 'k' waveforms to generate % in the model. NumWaveforms > 2 to properly display plots % % CarrierFreq - scalar expressed in MHz is the carrier frequency of the % tranmitter. Normally 800 or 1900 MHz for mobile comms % % Velocity - scalar expressed in km/hr is the speed of the receiver. % 100 km/hr = 65 mi/hr. Normal values are 20-130 km/hr %

基于matlab的计算器编程附代码

1.需求分析 本次的实验要求是设计一个计算器,主要功能如下: (1)实现基本数学运算(加减乘除等),而且要能进行混合运算 (2)实现部分函数功能,如求平方根、求倒数等 (3)能实现小数运算 界面与标准计算器界面类似 根据要求以及以前的学习情况,决定使用matlab进行编程。Matlab强大的计算功能以及便捷的GUI设计,可以较为简便的实现所要求的功能。按照要求,数据输入和输出支持小数点,支持四则混合运算,决定使用如下几个数据进行分析:(1+3)*5 Sqrt(4) 1/2 Sin4 用以检验是否可以进行加减乘除四则运算、平方根、倒数、正弦的运算。 2.程序设计 M atlab的程序设计较为简便,用GUI设计出一个计算器的模型,然后系统会自动生成一个框架,在框架中,写入每一个按键对应的程序就可以实现功能。 3.调式分析 编程的过程中遇到的问题不是很多,基本就是找要实现各个功能的子程序,通过上网和去图书馆,加上自己的编写,终于实现了实验要求的功能。但是有一点很重要,matlab不支持中文,所以从路径到文件名必须是全英文的,不然就无法识别。此外,给每个按键命名也是很重要的,不然在生成的程序框架里面,就无法识别各个按键的作用,编写程序的时候也就无法做到一一对应。 4.使用说明 程序的使用比较简单,由于是可视化界面,直接打开matlab,然后建立一个GUI 工程,再打开生成的fig文件,就是一个计算器的界面,直接按照市面上卖的计算器的

方法,按键使用即可。 5.测试结果 计算结果为20 4sqrt=2 Sin4结果为 1/2=0.5 经过计算,这些结果均与实际结果相吻合,计算器的功能实现的较为完好。 6.心得体会 本次试验由于不限制语言,于是计算功能强大,操作简便的matlab变成了首选,matlab的GUI设计,操作是较为简单的,首先建立一个GUI工程,然后用可视化界面,

matlab的编码大全

附录Matlab源程序 附录A 信息熵 % 函数说明:% % H=entropy(P,r) 为信息熵函数% % P为信源的概率矢量, r为进制数% % H为信息熵% %****************************** % function H=entropy(P,r) if (length(find(P<=0))~=0) error('Not a prob.vector,negative component'); % 判断是否符合概率分布条件end if (abs(sum(P)-1)>10e-10) error('Not a prob.vector,component do not add up to 1'); end H=(sum(-P.*log2(P)))/(log2(r)+eps); 附录B 离散无记忆信道容量的迭代计算 % 信道容量C的迭代算法% % 函数说明:% % [CC,Paa]=ChannelCap(P,k) 为信道容量函数% % 变量说明:% % P:输入的正向转移概率矩阵,k:迭代计算精度% % CC:最佳信道容量,Paa:最佳输入概率矩阵% % Pa:初始输入概率矩阵,Pba:正向转移概率矩阵% % Pb:输出概率矩阵,Pab:反向转移概率矩阵% % C:初始信道容量,r:输入符号数,s:输出符号数% %************************************************** % function [CC,Paa]=ChannelCap(P,k) % 提示错误信息 if (length(find(P<0)) ~=0) error('Not a prob.vector,negative component'); % 判断是否符合概率分布条件end

相关文档
最新文档