当前位置:文档之家› matlab

matlab

matlab
matlab

Matlab 图像处理

实验一 Matlab语言、数字图象基本操作

一、实验目的

1、复习MATLAB语言的基本用法;

2、掌握MATLAB语言中图象数据与信息的读取方法;

3、掌握在MATLAB中绘制灰度直方图的方法,了解灰度直方图的均衡化的方法。

二、实验原理

MATLAB是集数值计算,符号运算及图形处理等强大功能于一体的科学计算语言。作为强大的科学计算平台,它几乎能够满足所有的计算需求。

MATLAB软件具有很强的开放性和适用性。在保持内核不变的情况下,MATLAB可以针对不同的应用学科推出相应的工具箱(toolbox)。目前,MATLAB已经把工具箱延伸到了科学研究和工程应用的诸多领域,诸如数据采集、概率统计、信号处理、图像处理和物理仿真等,都在工具箱(Toolbox)家族中有自己的一席之地。在实验中我们主要用到MATLAB提供图象处理工具箱(Image Processing Toolbox)。

1、MATLAB与数字图像处理

MATLAB全称是Matrix Laboratory(矩阵实验室),一开始它是一种专门用于矩阵数值计算的软件,从这一点上也可以看出,它在矩阵运算上有自己独特的特点。实际上MATLAB中的绝大多数的运算都是通过矩阵这一形式进行的。这一特点也就决定了MATLAB在处理数字图像上的独特优势。理论上讲,图像是一种二维的连续函数,然而在计算机上对图像进行数字处理的时候,首先必须对其在空间和亮度上进行数字化,这就是图像的采样和量化的过程。二维图像进行均匀采样,就可以得到一幅离散化成M×N样本的数字图像,该数字图像是一个整数阵列,因而用矩阵来描述该数字图像是最直观最简便的了。而MATLAB的长处就是处理矩阵运算,因此用MATLAB处理数字图像非常的方便。

MATLAB支持五种图像类型,即索引图像、灰度图像、二值图像、RGB图像和多帧图像阵列;支持BMP、GIF、HDF、JPEG、PCX、PNG、TIFF、XWD、CUR、ICO等图像文件格式的读,写和显示。MATLAB对图像的处理功能主要集中在它的图像处理工具箱(Image Processing Toolbox)中。图像处理工具箱是由一系列支持图像处理操作的函数组成,可以进行诸如几何操作、线性滤波和滤波器设计、图像变换、图像分析与图像增强、二值图像操作以及形态学处理等图像处理操作。2、MATLAB语言的基本操作

MATLAB语言是一种运算纸型的运算语言,其特点就是与平时在运算纸上书写运算的形式相同,这使得它成为一种比较容易掌握的语言;其变量均以矩阵向量形式表示(单独一个数据可以认为是一维向量);其程序语法类似于C语言,只要有一点C语言基础的人可以很快掌握。针对数字图象处理的需要,可以重点掌握以下几个内容:矩阵、向量的输入和操作(包括如何输入一个矩阵,如何产生一个全零全一的矩阵,如何对一个矩阵的行列元素进行读取、写入);矩阵与向量的基本运算(包括加、减、点乘等)

以下主要介绍一下如何读取矩阵的指定行或指定列,举例说明:

x=4:6 %产生一个一维数组,范围从4到6,步长为1

x =

4 5 6

插入:通过对x进行插入运算创建矩阵A

>> A=[x-3;x;x+3] %当然也可以用别的方法产生A矩阵此处只作为示例

A =

1 2 3

4 5 6

7 8 9

提取:提取A的前两行和后两列形成矩阵C。

>> C=A(1:2,2:3)

C =

2 3

5 6

置零:将矩阵A 的第二行第二列的元素置零

>> A(2,2)=0

A =

1 2 3

4 0 6

7 8 9

将矩阵A的第一列全置1

A(:,1)=1

A =

1 2 3

1 0 6

1 8 9

强调一下矩阵的乘法与矩阵的点乘的不同,举例说明:

A=eye(2) %产生二维单位矩阵

A =

1 0

0 1

>> B=[1,2;3,4] %直接法输入矩阵

B =

1 2

3 4

>> A+B %求A与B的和(符合矩阵求和原则)

ans =

2 2

3 5

>> A.*B %求A与B的点积(即两矩阵中对应元素分别相乘

ans =

1 0

0 4

>> A*B %求A与B的乘积(符合矩阵乘积原则A的列数与B的行数相等)

ans =

1 2

3 4

注意:请大家在E盘建一个目录(imp),在每次启动时都要将这个目录加入到

MATLAB的搜索路径中,添加的方法为File----Set Path----Tool---Add Path

3、MATLAB中图象数据的读取

A、 imread

imread函数用于读入各种图象文件,其一般的用法为

[X,MAP]=imread(‘filename’,‘fmt’)

其中,X,MAP分别为读出的图象数据和颜色表数据,fmt为图象的格式,filename 为读取的图象文件(可以加上文件的路径)。

例:[X,MAP]=imread(’flowers.tif’,’tif’);

B、 imwrite

imwrite函数用于输出图象,其语法格式为:

imwrite(X,map,filename,fmt)按照fmt指定的格式将图象数据矩阵X和调色板map写入文件filename。

C、 imfinfo

imfinfo函数用于读取图象文件的有关信息,其语法格式为

imfinfo(filename,fmt)

imfinfo函数返回一个结构info,它反映了该图象的各方面信息,其主要数据包括:文件名(路径)、文件格式、文件格式版本号、文件的修改时间、文件的大小、文件的长度、文件的宽度、每个像素的位数、图象的类型等。

例:

imfinfo('rice.tif')

ans =

Filename:

'C:\MATLAB6p5\toolbox\images\imdemos\rice.tif'

FileModDate: '26-Oct-1996 06:11:58'

FileSize: 65966

Format: 'tif'

FormatVersion: []

Width: 256

Height: 256

BitDepth: 8

ColorType: 'grayscale'

FormatSignature: [73 73 42 0]

ByteOrder: 'little-endian'

NewSubfileType: 0

BitsPerSample: 8

Compression: 'Uncompressed'

PhotometricInterpretation: 'BlackIsZero'

StripOffsets: [8x1 double]

SamplesPerPixel: 1

RowsPerStrip: 32

StripByteCounts: [8x1 double]

XResolution: 72

YResolution: 72

ResolutionUnit: 'Inch'

Colormap: []

PlanarConfiguration: 'Chunky'

TileWidth: []

TileLength: []

TileOffsets: []

TileByteCounts: []

Orientation: 1

FillOrder: 1

GrayResponseUnit: 0.0100

MaxSamplev alue: 255

MinSamplev alue: 0

Thresholding: 1

ImageDescription: [1x166 char]

4、MATLAB中图象文件的显示

imshow

imshow函数是最常用的显示各种图象的函数,其语法如下:

imshow(X,map)

其中X是图象数据矩阵,map是其对应的颜色矩阵,若进行图象处理后不知道图象数据的值域可以用[]代替map。

需要显示多幅图象时,可以使用figure语句,它的功能就是重新打开一个图象显示窗口。

例:

I=imread(‘rice.tif’);

Imshow(I);

J=imread(‘flowers.tif’);

figure,imshow(J);

5、MATLAB中灰度直方图的显示

MATLAB图象处理工具箱提供了imhist函数来计算和显示图象的直方图,imhist 函数的语法格式为:

imhist(I,n)

imhist(X,map)

其中imhist(I,n)计算和显示灰度图象I的直方图,n为指定的灰度级数目,默认值为256。imhist(X,map)计算和显示索引色图象X的直方图,map为调色板。例:

I = imread('rice.tif');

imshow(I)

figure, imhist(I)

6、对比度增强

如果原图象f(x,y)的灰度范围是[m,M],我们希望调整后的图象g(x,y)的灰度范围是[n,N],那么下述变换,,就可以实现这一要求。

MATLAB图象处理工具箱中提供的imadjust函数,可以实现上述的线性变换对比度增强。Imadjust函数的语法格式为:

J = imadjust(I,[low_in high_in],[low_out high_out])

J = imadjust(I,[low_in high_in],[low_out high_out])返回图象I经过直方

图调整后的图象J,[low_in high_in]为原图象中要变换的灰度范围,[low_out high_out]指定了变换后的灰度范围。

例:

I = imread('pout.tif');

J = imadjust(I,[0.3 0.7],[]);

imshow(I), figure, imshow(J)

三、实验要求

copy两个图形文件girl1.bmp和girl2.bmp到MATLAB目录下work文件夹中。

1、将MATLAB目录下work文件夹中的girl.bmp图象文件读出.用到imread,imfinfo等文件,观察一下图象数据,了解一下数字图象在MATLAB中的处理就是处理一个矩阵。将这个图象显示出来(用imshow),尝试修改map颜色矩阵的值,再将图象显示出来,观察图象颜色的变化。

2、将MATLAB目录下work文件夹中的girl2.bmp图象文件读出,显示它的图象及灰度直方图,可以发现其灰度值集中在一段区域,用imadjust函数将它的灰度值调整到[0,1]之间,并观察调整后的图象与原图象的差别,调整后的灰度直方图与原灰度直方图的区别。

实验二图像运算

本实验是综合性实验,涵盖Matlab程序设计、图像点运算、代数运算、几何运算等多章基本知识及其应用。需四个学时。

一、实验目的与要求

 理解图像点运算、代数运算、几何运算的基本定义和常见方法;

 掌握在MTLAB中对图像进行点运算、代数运算、几何运算的方法;

 掌握在MATLAB中进行插值的方法

 运用MATLAB语言进行图像的插值缩放和插值旋转

 进一步熟悉了解MATLAB语言的应用。

二、实验原理与功能

点运算是通过对图像中每个像素值进行计算,改善图像显示效果的操作,也称对比度增强,对比度拉伸,灰度变换.可以表示为B(x,y)=f(A(x,y)).进行逐点运算,输入映射为输出,不改变图像像素的空间关系.

代数运算是指对两幅输入图像进行点对点的加、减、乘或除运算而得到输出图像的运算。对于相加和相乘的情形,可能不止有两幅图像参加运算。在一般情况下,输入情况之一可能为常数。

四种图像处理代数运算的数学表达式如下:

C(x,y)=A(x,y)+B(x,y)

C(x,y)=A(x,y)-B(x,y)

C(x,y)=A(x,y)*B(x,y)

C(x,y)=A(x,y)/B(x,y)

其中A(x,y)和B(x,y)为输入图像,而C(x,y)为输出图像。还可以通过适当的组合形成涉及几幅图像的复合代数运算方程。

在MATLAB中,我们可以用函数简单的得到数字图像的图像数据矩阵(即

A(x,y)和B(x,y)),有了这些矩阵后我们只要适当的设计代数运算的形式并写出方程,就可以得到一个输出图像的矩阵(即C(x,y))图像相加的一个重要应

用是对同一场景的多幅图像求平均值。这点被经常用来有效的降低加性随机噪声的影响。在求平均值的过程中,图像的静止部分不会改变,而对每一幅图像,各不相同的噪声图案则过累积很慢。对M幅图像进行平均,使图像中每一点的平方信噪比提高了M倍幅度信噪比是功率信噪比的平方根,因此达到了提高信噪比降低噪声的作用。

几何运算可改变图像中各物体之间的空间关系。这种运算可以被看成是将(各)物体在图像内移动。一个几何运算需要两个独立的算法。首先,需要一个算法来定义空间变换本身,用它来描述每个像素如何从其初始位置“移动”到终止位置,即每个像素的“运动”。同时,还需要一个用于灰度插值的算法,这是因为,在一般情况下,输入图像的位置坐标(x,y)为整数,而输出图像的位置坐标为非整数,反过来也如此。因此插值就是对变换之后的整数坐标位置的像素值进行估计。MATLAB提供了一些函数实现这些功能。

插值是常用的数学运算,通常是利用曲线拟合的方法,通过离散的采样点建立一个连续函数来逼近真实的曲线,用这个重建的函数便可以求出任意位置的函数值。

最近邻插值是最简便的插值,在这种算法中,每一个插值输出像素的值就是在输入图像中与其最临近的采样点的值。最近邻插值是工具箱函数默认使用的插值方法,而且这种插值方法的运算量非常小。当图像中包含像素之间灰度级变化的细微结构时,最近邻插值法会在图像中产生人工的痕迹。

双线性插值法的输出像素值是它在输入图像中2×2领域采样点的平均值,它根据某像素周围4个像素的灰度值在水平和垂直两个方向上对其插值。

双三次插值的插值核为三次函数,其插值邻域的大小为4×4。它的插值效果比较好,但相应的计算量也比较大。

MATLAB图像处理工具箱中的函数imresize可以用上述的3种方法对图像进行插值缩放,如果不指定插值方法,则默认为最邻近插值法。

Imresize函数的语法格式为:

B = imresize(A,m,method)

参数method用于指定插值的方法,可选用的值为'nearest'(最邻近法),'bilinear'(双线性插值),'bicubic'(双三次插值),默认为'nearest'。

B = imresize(A,m,method)返回原图A的m倍放大的图像(m小于1时效果是缩小)。

三实验设计例子与调试

1.完成人为的往一幅图像中加入噪声,并通过多次相加求平均的方法消除所加入的噪声。

在MATLAB中提供了给图像加入噪声的函数imnoise

imnoise的语法格式为

J = imnoise(I,type)

J = imnoise(I,type,parameters)

其中J = imnoise(I,type)返回对原始图像I添加典型噪声的有噪图像J。

参数type和parameters用于确定噪声的类型和相应的参数。

下面的命令是对图像eight.tif分别加入高斯噪声、椒盐噪声和乘性噪声,其结果如图所示:

例:

I=imread('eight.tif');

J1=imnoise(I,'gaussian',0,0.02);

J2=imnoise(I,'salt & pepper',0.02);

J3=imnoise(I,'speckle',0.02);

subplot(2,2,1),imshow(I),title('原图像');

subplot(2,2,2),imshow(J1),title('加高斯噪声');

subplot(2,2,3),imshow(J2),title('加椒盐噪声');

subplot(2,2,4),imshow(J3),title('加乘性噪声');

在上面的例子中使用了一个函数subplot。其作用就是将多幅图像显示再同一幅图像显示对话框中。其语法格式为:

subplot(m,n,p)

其作用就是将一个图像显示对话框分成m行n列,并显示第p幅图像。

在MATLAB程序语言中,分号的用处为不显示程序运算中的中间结果,这在一定程度上使系统运算的效率增高,因此在不需知道中间结果的情况下,可以用分号作为一个句子的结尾,而不显示该句运算的中间结果。

代数运算中需要有若干幅带有随机噪声的图像数据,在这里我们运用MATLAB中的FOR循环语句来完成产生多幅带有噪声的图像数据及将这些图像数据进行相加运算。MATLAB中FOR END循环的用法如下:

for end循环

这种循环允许一组命令以固定的和预定的次数重复,循环的一般形式为:

for variable = expression

statements

end

举例如下:

例:

%一个简单的for循环的例子。

for i=1:10;

y(i)=i;

end;

y %显示y的结果

y =

1 2 3 4 5 6 7 8 9 10

为了得到最大的速度,在for循环被执行之前,应预先分配数组。例如前面所考虑的第一种情况,在for循环内每执行一次命令,向量y的维数增加1。这样就使得MATLAB每通过一次循环对y分配更多的内存,这当然要花费一定的时间。为了可以不执行这个步骤,for循环的例子应重写为:

y=zeros(1,10);

for i=1:10;

y(i)=i;

end;

y

在实际的对图像处理过程中,由于我们读出的图像是unit8型,而在MATLAB 的矩阵运算中要求所有的运算变量为double型(双精度型)。因此读出的图像数据不能直接进行相加求平均,因此必须使用一个函数将图像数据转换成双精度型数据。MATLAB中提供了这样的函数:

im2double函数,其语法格式为:

I2 = im2double(I1)

其中I1是输入的图像数据,它可能是unit8或unit16型数据,通过函数的变化输出I2为一个double型数据,这样两图像数据就可以方便的进行相加等代数运算.

作为一个示例,现将刚刚显示的加有噪声的图像进行相加求平均以消除图像的噪声。在图像中我们给图像加的是均值为0,方差为0.02的高斯噪声,将图像相加了一百遍,再求其平均值。程序如下:

%例图像加噪声再通过多次相加求平均的方法祛除噪声

[I,M]=imread('eight.tif');

J=imnoise(I,'gaussian',0,0.02);

subplot(1,2,1),imshow(I,M),title('原图像');

subplot(1,2,2),imshow(J,M),title('加噪声后图像');

K=zeros(242,308);

for i=1:100

J=imnoise(I,'gaussian',0,0.02);

J1=im2double(J);

K=K+J1;

end

K=K/100; %求图像的平均

figure;imshow(K),title('相加求平均后的图像');

例子2

Imresize函数的语法格式为:

B = imresize(A,m,method)

这里参数method用于指定插值的方法,可选用的值为'nearest'(最邻近法),'bilinear'(双线性插值),'bicubic'(双三次插值),默认为'nearest'。

B = imresize(A,m,method)返回原图A的m倍放大的图像(m小于1时效果是缩小)。

例:

I=imread('ic.tif');

J = imresize(I,1.25);

imshow(I),title('原图像')

figure,imshow(J),title('放大后的图像')

在工具箱中的函数imrotate可用上述三种方法对图像进行插值旋转,默认的插值方法也是最邻近插值法。

Imrotate的语法格式为:

B = imrotate(A,angle,method

函数imrotate对图像进行旋转,参数method用于指定插值的方法,,可选用的值为'nearest'(最邻近法),'bilinear'(双线性插值),'bicubic'(双三次插值),默认为'nearest'。一般说来旋转后的图像会比原图大,超出原图部分值为0。

例:

I=imread('rice.tif');

J=imrotate(I,30,'bilinear');

imshow(I);title('原图像')

figure,imshow(J),title('旋转后的图像')

四、实验任务

实验要求设计一个程序完成下列要求:

1、读出girl.bmp这幅图像,完成基本点运算,并显示各次运算的结果图像;

2、给这幅图像加入椒盐噪声后并与前一张图显示在同一图像对话框中;

3、运用for循环,将100幅加有噪声的图像进行相加并求其平均值,显示求平均后图像。

4、将图像分别放大1.5倍和缩小0.8倍,插值方法使用双线性插值法。将图像顺时针旋转45度,显示旋转后的图像。

5、设计实验步骤,完成实验报告。

实验三傅立叶变换及图象的频域处理

一、实验目的

1、了解离散傅立叶变换的基本原理;

2、掌握应用MATLAB语言进行FFT及逆变换的方法;

3、了解图象在频域中处理方法,应用MATLAB语言作简单的低通滤波器。

二、实验原理

1、傅立叶变换的基本知识。

在图象处理的广泛应用领域中,傅立叶变换起着非常重要的作用,具体表现在包括图象分析、图象增强及图象压缩等方面。

假设f(x,y)是一个离散空间中的二维函数,则该函数的二维傅立叶变换的定义如下:

u=0,1…M-1 v=0,1…N-1 (1)

离散傅立叶反变换的定义如下:

x=0,1…M-1 y=0,1…N-1(3)

F(p,q)称为f(m,n)的离散傅立叶变换系数。这个式子表明,函数f(m,n)可以用无数个不同频率的复指数信号和表示,而在频率(w1,w2)处的复指数信号的幅度和相位是F(w1,w2)。

例如,函数f(m,n)在一个矩形区域内函数值为1,而在其他区域为0.

假设f(m,n)为一个连续函数,则f(m,n)的傅立叶变换的幅度值(即)显示为网格图。

将傅立叶变换的结果进行可视化的另一种方法是用图象的方式显示变换结果的对数幅值。

2、MATLAB提供的快速傅立叶变换函数

(1)fft2

fft2函数用于计算二维快速傅立叶变换,其语法格式为:

B = fft2(I)

B = fft2(I)返回图象I的二维fft变换矩阵,输入图象I和输出图象B大小相同。

例如,计算图象的二维傅立叶变换,并显示其幅值的结果,其命令格式如下load imdemos saturn2

imshow(saturn2)

B = fftshift(fft2(saturn2));

imshow(log(abs(B)),[],'notruesize')

(2)fftshift

MATLAB提供的fftshift函数用于将变换后的图象频谱中心从矩阵的原点移到矩阵的中心,其语法格式为:

B = fftshift(I)

对于矩阵I,B = fftshift(I)将I的一、三象限和二、四象限进行互换。

(2)ifft2

ifft2函数用于计算图象的二维傅立叶反变换,其语法格式为:

B = ifft2(I)

B = ifft2(A)返回图象I的二维傅立叶反变换矩阵,输入图象I和输出图象B

大小相同。其语法格式含义与fft2函数的语法格式相同,可以参考fft2函数的说明。

3、简单低通滤波器的设计

一个图象经过傅立叶变换后,就从空域变到了频域,因此我们可以用信号处理中对于频域信号的处理方法对一幅图象进行处理。比如对图象进行低通滤波等。

虽然在计算机中必定能够模拟一个锐截止频率的理想低通滤波器,但它们不能用电子元件来实现。实际中比较常用的低通滤波器有:巴特沃思(Butterworth)滤波器、指数滤波器(ELPF)、梯形低通滤波器等。

在实验中我们设计一个理想的低通滤波器。

设计理想的低通滤波器由其定义可知只要设计一个与频域图象大小完全相同的矩阵。在某一个域值内该矩阵的值为1,其余为0即可。

例:若图象的大小为128*128,则可以这样设计一个低通滤波器:

H=zeros(128);

H(32:96,32:96)=1; %此处的范围是人为取定的,可以根据需要更改。

若图象矩阵I的傅立叶变换是B(已经用fftshift将频谱中心移至矩阵的中心),则对这幅图象做低通滤波,再做傅立叶逆变换命令为

LOWPASS=B.*H; %此处设变换后的矩阵为LOWPASS,另注意这儿是矩阵的点乘。C=ifft2(LOWPASS);

Imshow(abs(C))

三、实验要求

1、读取图象girl.bmp,显示这幅图象,对图象作傅立叶变换,显示频域振幅图象。作傅立叶逆变换,显示图象,看是否与原图象相同。

2、设计一个低通滤波器,截止频率自选,对图象作低通滤波,再作反变换,观察不同的截止频率下反变换后的图象与原图象的区别。

2、选做:显示一幅频域图象的相位分布图,分别对振幅分布和相位分布作傅立叶逆变换,观察两幅图象,体会频域图象中振幅与位相的作用。

实验四图像的空域滤波

一、实验目的

1、了解图象滤波的基本定义及目的;

2、了解空域滤波的基本原理及方法;

3、掌握用MATLAB语言进行图象的空域滤波的方法。

二、实验原理

1、均值滤波

均值滤波是在空间域对图象进行平滑处理的一种方法,易于实现,效果也挺好。

设噪声η(m,n)是加性噪声,其均值为0,方差(噪声功率)为σ2,而且噪声与图象f(m,n)不相关。

除了对噪声有上述假定之外,该算法还基于这样一种假设:图象是由许多灰度值相近的小块组成。这个假设大体上反映了许多图象的结构特征。(2)式表达的算法是由某像素领域内各点灰度值的平均值来代替该像素原来的灰度值。

可用模块反映领域平均算法的特征。对模版沿水平和垂直两个方向逐点移动,相当于用这样一个模块与图像进行卷积运算,从而平滑了整幅图象。模版内各系数和为1,用这样的模版处理常数图象时,图像没有变化;对一般图象处理后,整幅图像灰度的平均值可不变。

2、中值滤波

中值滤波是一种非线性处理技术,能抑制图象中的噪声。它是基于图象的这样一种特性:噪声往往以孤立的点的形式出现,这些点对应的象素很少,而图象则是由像素数较多、面积较大的小块构成。

在一维的情况下,中值滤波器是一个含有奇数个像素的窗口。在处理之后,位于窗口正中的像素的灰度值,用窗口内各像素灰度值的中值代替。例如若窗口长度为5,窗口中像素的灰度值为80、90、200、110、120,则中值为110,因为按小到大(或大到小)排序后,第三位的值是110。于是原理的窗口正中的灰度值200就由110取代。如果200是一个噪声的尖峰,则将被滤除。然而,如果它是一个信号,则滤波后就被消除,降低了分辨率。因此中值滤波在某些情况下抑制噪声,而在另一些情况下却会抑制信号。

中值滤波很容易推广到二维的情况。二维窗口的形式可以是正方形、近似圆形的或十字形的。在图像增强的具体应用中,中值滤波只能是一种抑制噪声的特殊工具,在处理中应监视其效果,以决定最终是福才有这种方案。实施过程中的关键问题是探讨一些快速算法。

MATLAB中提供了卷积运算的函数命令conv2,其语法格式为:

C = conv2(A,B)

C = conv2(A,B)返回矩阵A和B的二维卷积C。若A为ma×na的矩阵,B为mb×nb 的矩阵,则C的大小为(ma+mb+1)×(na+nb+1)。

例:

A=magic(5)

A =

17 24 1 8 15

23 5 7 14 16

4 6 13 20 22

10 12 19 21 3

11 18 25 2 9

>> B=[1 2 1 ;0 2 0;3 1 3]

B =

1 2 1

0 2 0

3 1 3

>> C=conv2(A,B)

C =

17 58 66 34 32 38 15

23 85 88 35 67 76 16

55 149 117 163 159 135 67

79 78 160 161 187 129 51

23 82 153 199 205 108 75

30 68 135 168 91 84 9

33 65 126 85 104 15 27

MATLAB图像处理工具箱提供了基于卷积的图象滤波函数filter2,filter2的语法格式为:

Y = filter2(h,X)

其中Y = filter2(h,X)返回图像X经算子h滤波后的结果,默认返回图像Y与输入图像X大小相同。例如:

其实filter2和conv2是等价的。MATLAB在计算filter2时先将卷积核旋转180度,再调用conv2函数进行计算。

Fspecial函数用于创建预定义的滤波算子,其语法格式为:

h = fspecial(type)

h = fspecial(type,parameters)

参数type制定算子类型,parameters指定相应的参数,具体格式为:

type='average',为均值滤波,参数为n,代表模版尺寸,用向量表示,默认值为[3,3]。

type= 'gaussian',为高斯低通滤波器,参数有两个,n表示模版尺寸,默认值为[3,3],sigma表示滤波器的标准差,单位为像素,默认值为0.5。

type= 'laplacian',为拉普拉斯算子,参数为alpha,用于控制拉普拉斯算子的形状,取值范围为[0,1],默认值为0.2。

type= 'log',为拉普拉斯高斯算子,参数有两个,n表示模版尺寸,默认值为[3,3],sigma为滤波器的标准差,单位为像素,默认值为0.5

type= 'prewitt',为prewitt算子,用于边缘增强,无参数。

type= 'sobel',为著名的sobel算子,用于边缘提取,无参数。

type= 'unsharp',为对比度增强滤波器,参数alpha用于控制滤波器的形状,范围为[0,1],默认值为0.2。

下面举一个均值滤波的例子:

在MATLAB图像处理工具箱中,提供了medfilt2函数用于实现中值滤波。Medfilt2函数的语法格式为:

B = medfilt2(A) 用3×3的滤波窗口对图像A进行中值滤波。

B = medfilt2(A,[m n]) 用指定大小为m×n的窗口对图像A进行中值滤波。实验五二值形态学操作

一、实验目的

 了解二值形态学的基本运算

 掌握基本形态学运算的Matlab实现

 了解形态操作的应用

二、原理

收缩和膨胀是数学形态学最基本的变换,数学形态学的应用几乎覆盖了图像处理的所有领域,给出利用数学形态学对二值图像处理的一些运算。

膨胀就是把连接成分的边界扩大一层的处理。而收缩则是把连接成分的边界点去掉从而缩小一层的处理。若输出图像为g(i,j),则它们的定义式为二值图像目标X是E的子集。用B代表结构元素,Bs代表结构元素B关于原点(0 , 0)的对称集合:

即Bs是B旋转180°获得的。给出了三种简单的结构元素。膨胀和腐蚀变换的定义式为:

膨胀

腐蚀

Matlab中用imdilate函数实现膨胀。用法为:

Imdilate(X,SE).其中X是待处理的图像,SE是结构元素对象。

例如:

bw = imread('text.tif');

se = strel('line',11,90);

bw2 = imdilate(bw,se);

imshow(bw), title('Original')

figure, imshow(bw2), title('Dilated')

Matlab用imerode函数实现图像腐蚀。用法为:

Imerode(X,SE).其中X是待处理的图像,SE是结构元素对象。

例如:

I = imread('cameraman.tif');

se = strel('ball',5,5);

I2 = imerode(I,se);

imshow(I), title('Original')

figure, imshow(I2), title('Eroded')

三、练习

1 读取一幅图像,进行骨架化操作并得到其边界

2 读取一幅图像,转化为二进制图像,并计算其面积

3读取一幅图像,比较不同距离变换的图像效果

实验六、图像的边缘检测

一、实验目的

1、了解图像边缘提取的基本概念;

2、了解进行边缘提取的基本方法;

3、掌握用MATLAB语言进行图像边缘提取的方法。

二、实验原理

图像理解是图像处理的一个重要分支,研究为完成某一任务需要从图像中提取哪些有用的信息,以及如何利用这些信息解释图像。边缘检测技术对于处理数字图像非常重要,因为边缘是所要提取目标和背景的分界线,提取出边缘才能将

目标和背景区分开来。在图像中,边界表明一个特征区域的终结和另一个特征区域的开始,边界所分开区域的内部特征或属性是一致的,而不同的区域内部的特征或属性是不同的,边缘检测正是利用物体和背景在某种图像特性上的差异来实现的,这些差异包括灰度,颜色或者纹理特征。边缘检测实际上就是检测图像特征发生变化的位置。

由于噪声和模糊的存在,检测到的边界可能会变宽或在某些点处发生间断,因此,边界检测包括两个基本内容:首先抽取出反映灰度变化的边缘点,然后剔除某些边界点或填补边界间断点,并将这些边缘连接成完整的线。边缘检测的方法大多数是基于方向导数掩模求卷积的方法。

导数算子具有突出灰度变化的作用,对图像运用导数算子,灰度变化较大的点处算得的值比较高,因此可将这些导数值作为相应点的边界强度,通过设置门限的方法,提取边界点集。

一阶导数与是最简单的导数算子,它们分别求出了灰度在x和y方向上的变化率,而方向α上的灰度变化率可以用相应公式进行计算;对于数字图像,应该采用差分运算代替求导,差分公式参考相关教材。

函数f在某点的方向导数取得最大值的方向是,方向导数的最大值是称为梯度模。利用梯度模算子来检测边缘是一种很好的方法,它不仅具有位移不变性,还具有各向同性。为了运算简便,实际中采用梯度模的近似形式。另外,还有一些常用的算子,如Roberts算子和Sobel算子。

由于Sobel算子是滤波算子的形式,用于提取边缘。我们可以利用快速卷积函数,简单有效,因此应用很广泛。

拉普拉斯高斯(loG)算法是一种二阶边缘检测方法。它通过寻找图像灰度值中二阶微分中的过零点(Zero Crossing)来检测边缘点。其原理为,灰度级变形成的边缘经过微风算子形成一个单峰函数,峰值位置对应边缘点;对单峰函数进行微分,则峰值处的微分值为0,峰值两侧符号相反,而原先的极值点对英语二阶微分中的过零点,通过检测过零点即可将图像的边缘提取出来。

MATLAB的图像处理工具箱中提供的edge函数可以实现检测边缘的功能,其语法格式如下:

BW = edge(I,'sobel')

BW = edge(I,'sobel',direction)

BW = edge(I,'roberts')

BW = edge(I,'log')

这里BW = edge(I,'sobel')采用Sobel算子进行边缘检测。BW =

edge(I,'sobel',direction)可以指定算子方向,即:

direction=’horizontal’,为水平方向;

direction=’vertical’,为垂直方向;

direction=’both’,为水平和垂直两个方向。

BW = edge(I,'roberts')和BW = edge(I,'log')分别为用Roberts算子和拉普拉斯高斯算子进行边缘检测。

例:用三种算子进行边缘检测。

I=imread('eight.tif');

imshow(I)

BW1=edge(I,'roberts');

figure ,imshow(BW1),title('用Roberts算子')

BW2=edge(I,'sobel');

figure,imshow(BW2),title('用Sobel算子 ')

BW3=edge(I,'log');

figure,imshow(BW3),title('用拉普拉斯高斯算子')

三、实验要求

1、读出MATLAB图像处理工具箱中提供的rice.tif这幅图像,并显示。

2、分别用Roberts,Sobel和拉普拉斯高斯算子对图像进行边缘检测。比较三种算子处理的不同之处。

实验七图像编码

一实验目的

1 了解图像编码的基本方法

2 了解Matlab实现图像编码

二实验原理

1 行程编码

行程编码又称行程长度编码(RLE,Run Length Encoding),是一种熵编码,其编码原理相当简单,即将具有相同值的连续串用其串长和一个代表值来代替,该连续串就称之为行程或行程,串长称为行程长度。例如,有一字符串“aabbbcddddd”,则经行程长度编码后,可以只用“2a3b1c5d”来表示。

2 霍夫曼编码

Huffman方法根据源数据符号发生的概率进行编码。在源数据中出现概率越大的符号,相应的码越短;出现概率越小的符号,其码长越长,从而达到用尽可能少的码符号表示源数据。它在变长编码方法中是最佳的。

通过如下实例来说明这种编码方法。

设有编码输入。其频率分布分别为,P(x2)=0.3,,,,。现求其最佳霍夫曼编码。

具体编码方法是:①把输入元素按其出现概率的大小顺序排列起来,然后把最末两个具有最小概率的元素之概率加起来;②把该概率之和同其余概率由大到小排队,然后再把两个最小概率加起来,再重新排队;③重复②,直到最后只剩下两个概率为止。

3.预测编码

预测编码是基于图像数据的空间或时间冗余特性,用相邻的已知像素(或像素块)来预测当前像素(或像素块)的取值,然后再对预测误差进行量化和编码。

编码方法的Matlab实现参看参考书的相关章节。

控制系统MATLAB仿真基础

系统仿真 § 4.1控制系统的数学模型 1、传递函数模型(tranfer function) 2、零极点增益模型(zero-pole-gain) 3、状态空间模型(state-space) 4、动态结构图(Simulink结构图) 一、传递函数模型(transfer fcn-----tf) 1、传递函数模型的形式 传函定义:在零初始条件下,系统输出量的拉氏变换C(S)与输入量的拉氏变换R(S)之比。 C(S) b1S m+b2S m-1+…+b m G(S)=----------- =- -------------------------------- R(S) a1S n + a2S n-1 +…+ a n num(S) = ------------ den(S) 2、在MATLAB命令中的输入形式 在MATLAB环境中,可直接用分子分母多项式系数构成的两个向量num、den表示系统: num = [b1, b2, ..., b m]; den = [a1, a2, ..., a n]; 注:1)将系统的分子分母多项式的系数按降幂的方式以向量的形式输入两个变量,中间缺项的用0补齐,不能遗漏。 2)num、den是任意两个变量名,用户可以用其他任意的变量名来输入系数向量。 3)当系统种含有几个传函时,输入MATLAB命令状态下可用n1,d1;n2,d2…….。 4)给变量num,den赋值时用的是方括号;方括号内每个系数分隔开用空格或逗号;num,den方括号间用的是分号。 3、函数命令tf( ) 在MATLAB中,用函数命令tf( )来建立控制系统的传函模型,或者将零极点增益模型、状态空间模型转换为传函模型。 tf( )函数命令的调用格式为: 圆括号中的逗号不能用空格来代替 sys = tf ( num, den ) [G= tf ( num, den )]

MATLAB与系统仿真

学习中心/函授站_ 成都学习中心 姓名赵洪学号7020140122093 西安电子科技大学网络与继续教育学院 2015学年上学期 《MATLAB与系统仿真》期末考试试题 (综合大作业) 考试说明: 1、大作业于2015年4月3日公布,2015年5月9日前在线提交; 2、考试必须独立完成,如发现抄袭、雷同、拷贝均按零分计。 3、程序设计题(三(8,10))要求写出完整的程序代码,并在matlab软件环境调试并运行通过,连同运行结果一并附上。 一、填空题(1? ×25=25?) 1、Matlab的全称为矩阵实验室。 2、在Matlab编辑器中运行程序的快捷键是:F5 。 3、Matlab的工作界面主要由以下五个部分组成,它们分别是:菜单栏、 工具栏、当前工作目录窗口、工作空间管理窗口和命令窗口。 4、在Matlab中inf表示:无穷大;clc表示:清空命令窗口中的显示内容;more表示:在命令窗口中控制其后每页的显示内容行数;who表示:查阅Matlad内存变量名;whos表示:列出当前工作空间所有变量。 5、在Matlab命令窗口中运行命令Simulink 可以打开Simulink模块库浏览器窗口。 6、求矩阵行列式的函数:det ;求矩阵特征值和特征向量的函数eig 。 7、Matlab预定义变量ans表示:没有指定输出变量名;eps表示:系统精度 ;nargin表示:函数输入参数的个数。 8、Matlab提供了两种方法进行程序分析和优化,分别为:通过Profiler工具优化和通过tic和toc函数进行优化。 9、建立结构数组或转换结构数组的函数为:struct ; 实现Fourier变换在Matlab中的对应函数为:fourier() ;Laplace变换的函数:Laplace() 。

matlab控制系统仿真课程设计

课程设计报告 题目PID控制器应用 课程名称控制系统仿真院部名称机电工程学院专业 班级 学生姓名 学号 课程设计地点 课程设计学时 指导教师 金陵科技学院教务处制成绩

一、课程设计应达到的目的 应用所学的自动控制基本知识与工程设计方法,结合生产实际,确定系统的性能指标与实现方案,进行控制系统的初步设计。 应用计算机仿真技术,通过在MATLAB软件上建立控制系统的数学模型,对控制系统进行性能仿真研究,掌握系统参数对系统性能的影响。 二、课程设计题目及要求 1.单回路控制系统的设计及仿真。 2.串级控制系统的设计及仿真。 3.反馈前馈控制系统的设计及仿真。 4.采用Smith 补偿器克服纯滞后的控制系统的设计及仿真。 三、课程设计的内容与步骤 (1).单回路控制系统的设计及仿真。 (a)已知被控对象传函W(s) = 1 / (s2 +20s + 1)。 (b)画出单回路控制系统的方框图。 (c)用MatLab的Simulink画出该系统。 (d)选PID调节器的参数使系统的控制性能较好,并画出相应的单位阶约响应

曲线。注明所用PID调节器公式。PID调节器公式Wc(s)=50(5s+1)/(3s+1) 给定值为单位阶跃响应幅值为3。 有积分作用单回路控制系统 无积分作用单回路控制系统

大比例作用单回路控制系统 (e)修改调节器的参数,观察系统的稳定性或单位阶约响应曲线,理解控制器参数对系统的稳定性及控制性能的影响? 答:由上图分别可以看出无积分作用和大比例积分作用下的系数响应曲线,这两个PID调节的响应曲线均不如前面的理想。增大比例系数将加快系统的响应,但是过大的比例系数会使系统有比较大的超调,并产生振荡,使稳定性变坏;增大积分时间有利于减小超调,减小振荡,使系统的稳定性增加,但是系统静差消除时间变长,加入微分环节,有利于加快系统的响应速度,使系统超调量减小,稳定性增加。 (2).串级控制系统的设计及仿真。 (a)已知主被控对象传函W 01(s) = 1 / (100s + 1),副被控对象传函W 02 (s) = 1 / (10s + 1),副环干扰通道传函W d (s) = 1/(s2 +20s + 1)。 (b)画出串级控制系统方框图及相同控制对象下的单回路控制系统的方框图。(c)用MatLab的Simulink画出上述两系统。

MATLAB回归预测模型

MATLAB---回归预测模型 Matlab统计工具箱用命令regress实现多元线性回归,用的方法是最小二乘法,用法是:b=regress(Y,X) [b,bint,r,rint,stats]=regress(Y,X,alpha) Y,X为提供的X和Y数组,alpha为显着性水平(缺省时设定为0.05),b,bint为回归系数估计值和它们的置信区间,r,rint为残差(向量)及其置信区间,stats是用于检验回归模型的统计量,有四个数值,第一个是R2,第二个是F,第三个是与F对应的概率 p ,p <α拒绝 H0,回归模型成立,第四个是残差的方差 s2 。 残差及其置信区间可以用 rcoplot(r,rint)画图。 例1合金的强度y与其中的碳含量x有比较密切的关系,今从生产中收集了一批数据如下表 1。 先画出散点图如下: x=0.1:0.01:0.18; y=[42,41.5,45.0,45.5,45.0,47.5,49.0,55.0,50.0]; plot(x,y,'+') 可知 y 与 x 大致上为线性关系。 设回归模型为y =β 0+β 1 x

用regress 和rcoplot 编程如下: clc,clear x1=[0.1:0.01:0.18]'; y=[42,41.5,45.0,45.5,45.0,47.5,49.0,55.0,50.0]'; x=[ones(9,1),x1]; [b,bint,r,rint,stats]=regress(y,x); b,bint,stats,rcoplot(r,rint) 得到 b =27.4722 137.5000 bint =18.6851 36.2594 75.7755 199.2245 stats =0.7985 27.7469 0.0012 4.0883 即β 0=27.4722 β 1 =137.5000 β 的置信区间是[18.6851,36.2594], β 1 的置信区间是[75.7755,199.2245]; R2= 0.7985 , F = 27.7469 , p = 0.0012 , s2 =4.0883 。可知模型(41)成立。

MATLAB仿真教程

一、设计目的 通过运用MATLAB对函数进行Z域分析和单边带信号的调制与解调,使我们进一步加深对MATLAB的认识和运用,以实现以下目的: 1.本次试验进一步熟悉了MATLAB软件的使用方法及相关的操作。 2.对Z变换及其反变换函数在MATLAB中的调用有了掌握。 3.理论与实际的仿真相结合,更直观的看到结果。 4.观察了单边带信号调制与解调后的图像,加深认识。 二、设计原理 MATLAB是The MathWorks公司在1984年推出的一种商品化软件,它提供了大量丰富的应用函数,并且具有扩充的开放性结构。目前,该软件包涵盖了控制系统应用、数字信号处理、数字图像处理、通讯、神经网络、小波理论分析、优化与统计、偏微分方程、动态系统实时仿真等多学科专业领域。 其中单边带调制信号是将双边带信号中的一个边带滤掉而形成的。根据方法的不同,产生单边带调制信号的方法有:滤波和相移法。 由于滤波法在技术上比较难实现所以在此我们将用相移法对单边带调制与解调系统进行讨论与设计。 三、设计内容和MATLAB图像

1、数字系统的响应 源代码如下: b=[0 1 2 1 0]; a=[1 -0.5 0 0.3 -0.005]; subplot(421);zplane(b,a); title('系统的零极点图'); subplot(422);impz(b,a,21); title('单位脉冲响应'); subplot(423);stepz(b,a,21); title('单位阶跃响应');

N=21;n=0:N-1; x=exp(-n); x0=zeros(1,N); y0=[1,-1]; xi=filtic(b,a,y0); y1=filter(b,a,x0,xi); xi0=filtic(b,a,0); y2=filter(b,a,x,xi0); y3=filter(b,a,x,xi); [h w]=freqz(b,a,21); subplot(424);stem(n,y1); title('零输入响应');grid on; subplot(425);stem(n,y2); title('零状态响应');grid on; subplot(426);stem(n,y3); title('系统的全响应');grid on; subplot(427);plot(w,abs(h)); title('幅频特性曲线');grid on; subplot(428);plot(w,angle(h)); title('相频特性曲线');grid on;

利用MATLAB实现循环卷积.doc

一、实验目的 1.利用MATLAB 实现循环卷积。 2.比较循环卷积与线性卷积的区别。 二、实验条件 PC 机,MATLAB7.0 三、实验内容 1)循环卷积的定义:两个序列的N 点循环卷积定义为: )0()()()]()([1 0N n m n x m h n x n h N k N N <≤-=?∑-= 利用MATLAB 实现两个序列的循环卷积可以分三个步骤完成: (1)初始化:确定循环点数N ,测量输入2个序列的长度。 (2)循环右移函数:将序列x(n)循环右移,一共移N 次(N 为循环卷积的循环次数),最后将每次循环成的新序列组成一个矩阵V 。 (3)相乘:将x(n)移位后组成的矩阵V 与第二个序列h(n)对应相乘,即得循环卷积结果。程序如下: 程序一: clear;close all ; N=10; x1=[6 15 -6 3 5 7 0 1]; x2=[7 1 2 9 4 3 20 6]; xn1=length(x1); xxn1=0:xn1-1; xn2=length(x2); xxn2=0:xn2-1; subplot(3,1,1); stem(xxn1,x1); subplot(3,1,2); stem(xxn2,x2); x11=fft(x1,N);

x12=fft(x2,N); y11=x11.*x12; y1=ifft(y11,N); subplot(3,1,3); n=0:length(y1)-1; stem(n,y1,'.'); title('循环卷积的结果'); xlabel('n');ylabel('y1(n)'); 运行后所得图形如下: 观察所得的循环卷积结果发现并没有呈现周期性的序列,因此将程序做下列改变。程序二: clear;close all; N=40; x1=[6 15 -6 3 5 7 0 1]; x2=[7 1 2 9 4 3 20 6]; x2=[x2,x2,x2,x2]; xn1=length(x1); xxn1=0:xn1-1; xn2=length(x2); xxn2=0:xn2-1; subplot(3,1,1);

自控-二阶系统Matlab仿真

自动控制原理 二阶系统性能分析Matlab 仿真大作业附题目+ 完整报告内容

设二阶控制系统如图1所示,其中开环传递函数 ) 1(10 )2()(2+=+=s s s s s G n n ξωω 图1 图2 图3 要求: 1、分别用如图2和图3所示的测速反馈控制和比例微分控制两种方式改善系统的性能,如果要求改善后系统的阻尼比ξ =0.707,则和 分别取多少? 解: 由)1(10 )2()(2 += +=s s s s s G n n ξωω得10 21,10,102===ξωωn t K d T

对于测速反馈控制,其开环传递函数为:) 2()s (2 2n t n n K s s G ωξωω++=; 闭环传递函数为:2 2 2)2 (2)(n n n t n s K s s ωωωξωφ+++= ; 所以当n t K ωξ2 1+=0.707时,347.02)707.0(t =÷?-=n K ωξ; 对于比例微分控制,其开环传递函数为:)2()1()(2 n n d s s s T s G ξωω++=; 闭环传递函数为:) )2 1(2)1()(2 22 n n n d n d s T s s T s ωωωξωφ++++=; 所以当n d T ωξ2 1 +=0.707时,347.02)707.0(=÷?-=n d T ωξ; 2、请用MATLAB 分别画出第1小题中的3个系统对单位阶跃输入的响应图; 解: ①图一的闭环传递函数为: 2 22 2)(n n n s s s ωξωωφ++=,10 21 ,10n ==ξω Matlab 代码如下: clc clear wn=sqrt(10); zeta=1/(2*sqrt(10)); t=0:0.1:12; Gs=tf(wn^2,[1,2*zeta*wn,wn^2]); step(Gs,t)

matlab仿真模拟

中国地质大学长城学院 本科课程设计题目:双手协调机器人 系别信息工程系 学生姓名 专业电气工程及其自动化 学号 指导教师王密香 职称研究生 2015年12 月22日

双手协调机器人 摘要 多机器人的协同作业是制造业发展的必然要求,双臂机器人就是适应这一要求而开发出的一种新型机器人,相对于单臂机器人它可以大大增强机器人对复杂装配任务的适应性,同时可以提高工作空间的利用效率。当前大多数工业机器人的应用是为单臂机器人独自工作的能力准备的。一般地,单臂机器人只适合于刚性工件的操作,并受制于环境,随着现代工业的发展和科学技术的进步,对于许多任务而言单臂操作是不够的。为了适应任务的复杂性、智能性的不断提高以及系统柔顺性的要求而扩展为双手协调控制。即由两个单臂机器人相互协调、相互配合的去完成某种作业,但由于组成双手协调控制系统的是两个机器人它们不可能是两个单手机器人的简单组合,除了它们各自共同目标的控制实现外,它们相互间的协调控制以及对环境的适应性就成为组合的关键,这样双手协调控制机器人系统的进一步应用就受到了限制。而双臂机器人能完成对于人来说易于实现的功能,它比双手协调机器人更具有实用价值,它的高自律性以及学习性,能够适应许多环境,使其在工业生产、危险处理、国防、航天航空等方面运用广泛采用了Matlab/Simulink 仿真软件,分别用模块法和程序法对双手协调机器人系统进行了PID 控制器的校正仿真设计。 关键词:双手协调机器人;Matlab/Simulink;PID 校正;仿真 Using the Matlab/Simulink simulation software, using method of module and the procedural law on hands coordinate robot system has carried on the correction for the simulation of PID controller design simulation results show that these two kinds of design method is not only convenient and quick, and the correction effect is satisfactory to people Keywords:Hands coordinate robot; Matlab/Simulink; PID correction; The simulation

matlab循环语句

matlab 基本语句 1.循环语句for for i=s1:s3:s2 循环语句组 end 解释:首先给i赋值s1;然后,判断i是否介于s1与s2之间;如果是,则执行循环语句组,i=i+s3(否则,退出循环.);执行完毕后,继续下一次循环。 例:求1到100的和,可以编程如下: sum=0 for i=1:1:100 sum=sum+i end 这个程序也可以用while语句编程。 注:for循环可以通过break语句结束整个for循环. 2.循环语句while 例:sum=0;i=1; while(i<=100) sum=sum+i;i=i+1; end 3.if语句 if(条件) 语句 end if(条件) 语句 else 语句 end if(条件) 语句 elseif 语句 end 4.关系表达式:

=,>,<,>=,<=,==(精确等于) 5.逻辑表达式:|(或),&(且) 6.[n,m]=size(A)(A为矩阵) 这样可以得到矩阵A的行和列数 n=length(A),可以得到向量A的分量个数;如果是矩阵,则得到矩阵A的行与列数这两个数字中的最大值。 7.!后面接Dos命令可以调用运行一个dos程序。 8.常见函数: poly():为求矩阵的特征多项式的函数,得到的为特征多项式的各个系数。如 a=[1,0,0;0,2,0;0,0,3],则poly(a)=1 -6 11 -6。相当于poly(a)=1入^3+(-6)入^2+11入+(-6)。 compan():可以求矩阵的伴随矩阵. sin()等三角函数。 MATLAB在数学建模中的应用(3) 一、程序设计概述 MATLAB所提供的程序设计语言是一种被称为第四代编程语言的高级程序设计语言,其程序简洁,可读性很强,容易调试。同时,MATLAB的编程效率比C/C++语言要高得多。 MATLAB编程环境有很多。常用的有: 1.命令窗口 2.word窗口 3.M-文件编辑器,这是最好的编程环境。 M-文件的扩展名为“.m”。M-文件的格式分为两种: ①λ M-脚本文件,也可称为“命令文件”。 ② M-函数文件。这是matlab程序设计的主流。λ 保存后的文件可以随时调用。 二、MATLAB程序结构 按照现代程序设计的观点,任何算法功能都可以通过三种基本程序结构来实现,这三种结构是:顺序结构、选择结构和循环结构。其中顺序结构是最基本的结构,它依照语句的自然顺序逐条地执行程序的各条语句。如果要根据输入数据的实际情况进行逻辑判断,对不同的结果进行不同的处理,可以使用选择结构。如果需要反复执行某些程序段落,可以使用循环结构。 1 顺序结构 顺序结构是由两个程序模块串接构成。一个程序模块是完成一项独立功能的逻辑单元,它可以是一段程序、一个函数,或者是一条语句。 看图可知,在顺序结构中,这两个程序模块是顺序执行的,即先执行<程序

matlab软件的使用方法

MATLAB 软件使用简介 默认分类2007-03-15 21:26:49 阅读4106 评论8 字号:大中小订阅 MATLAB 软件使用简介 MATLAB 是一个功能强大的常用数学软件, 它不但可以解决数学中的数值计算问题, 还可以解决符号演算问题, 并且能够方便地绘出各种函数图形。MATLAB自1984年由美国的MathWorks公司推向市场以来,历经十几年的发展和竞争,现已成为国际最优秀的科技应用软件之一。这里主要以适用于Windows操作系统的MATLAB5.3版本向读者介绍MATLAB 的使用命令和内容。 一、MATLAB 的进入/退出 MA TLAB 的安装成功后, 系统会在Windows【开始】菜单的【程序】子菜单中加入启动MATLAB命令的图标, 用鼠标单击它就可以启动MATLAB系统,见图2.1。 图2.1 启动MA TLAB 启动MATLAB后, 屏幕上出现MATLAB命令窗口: 图2.2 MA TLAB命令窗口 图2.2的空白区域是MATLAB 的工作区(命令输入区), 在此可输入和执行命令。 退出MATLAB系统像关闭Word文件一样, 只要用鼠标点击MATLAB系统集成界面右上角的关闭按钮即可。 二、MATLAB 操作的注意事项 l 在MA TLAB工作区输入MATLAB命令后, 还须按下Enter键, MA TLAB才能执行你输入的MA TLAB命令, 否则MA TLAB不执行你的命令。 l MATLAB 是区分字母大小写的。 l 一般,每输入一个命令并按下Enter键, 计算机就会显示此次输入的执行结果。(以下用↙表示回车)。如果用户不想计算机显示此次输入的结果,只要在所输入命令的后面再加上一个分号“;”即可以达到目的。如: x= 2 + 3 ↙x=5 x = 2 + 3 ; ↙不显示结果5 l 在MA TLAB工作区如果一个表达式一行写不下,可以用在此行结尾处键入三个英文句号的方法达到换行的目的。如: q=5^6+sin(pi)+exp(3)+(1+2+3+4+5)/sin(x)… -5x+1/2-567/(x+y) l MATLAB 可以输入字母、汉字,但是标点符号必须在英文状态下书写。 l MATLAB 中不需要专门定义变量的类型,系统可以自动根据表达式的值或输入的值

系统仿真的MATLAB实现.

第七章系统仿真的MATLAB实现 由于计算机技术的高速发展,我们可以借助计算机完成系统的数字仿真。综前所述,数字仿真实质上是根据被研究的真实系统的模型,利用计算机进行实验研究的一种方法。仿真的主要过程是:建立模型、仿真运行和分析研究仿真结果。仿真运行就是借助一定的算法,获得系统的有关信息。 MATLAB是一种面向科学与工程计算的高级语言,它集科学计算、自动控制、信号处理、神经网络和图像处理等学科的处理功能于一体,具有极高的编程效率。MATLAB是一个高度集成的系统,MATLAB提供的Simulink是一个用来对动态系统进行建模、仿真和分析的软件包,它支持线性和非线性系统,能够在连续时间域、离散时间域或者两者的混合时间域里进行建模,它同样支持具有多种采样速率的系统。在过去几年里,Simulink已经成为数学和工业应用中对动态系统进行建模时使用得最为广泛的软件包。 MATLAB仿真有两种途径:(1)MATLAB可以在SIMULINK窗口上进行面向系统结构方框图的系统仿真;(2)用户可以在MATLAB的COMMAND窗口下,用运行m文件,调用指令和各种用于系统仿真的函数,进行系统仿真。这两种方式可解决任意复杂系统的动态仿真问题,前者编辑灵活,而后者直观性强,实现可视化编辑。 下面介绍在MATLAB上实现几类基本仿真。 7.1 计算机仿真的步骤 在学习计算机仿真以前,让我们先总结一下计算机仿真的步骤。 计算机仿真,概括地说是一个“建模—实验—分析”的过程,即仿真不单纯是对模型的实验,还包括从建模到实验再到分析的全过程。因此进行一次完整的计算机仿真应包括以下步骤:

(1)列举并列项目 每一项研究都应从说明问题开始,问题由决策者提供或由熟悉问题的分析者提供。 (2)设置目标及完整的项目计划 目标表示仿真要回答的问题、系统方案的说明。项目计划包括人数、研究费用以及每一阶段工作所需时间。 (3)建立模型和收集数据 模型和实际系统没有必要一一对应,模型只需描述实际系统的本质或者描述系统中所研究部分的本质。因此,最好从简单的模型开始,然后进一步建立更复杂的模型。 (4)编制程序和验证 利用数学公式、逻辑公式和算法等来表示实际系统的内部状态和输入/输出的关系。建模者必须决定是采用通用语言如MATLAB、FORTRAN、C还是专用仿真语言来编制程序。在本教材中,我们选择的是MATLAB和其动态仿真工具Simulink。 (5)确认 确认指确定模型是否精确地代表实际系统。它不是一次完成,而是比较模型和实际系统特性的差异,不断对模型进行校正的迭代过程。 (6)实验设计 确定仿真的方案、初始化周期的长度、仿真运行的长度以及每次运行的重复次数。 (7)生产性运行和分析 通常用于估计被仿真系统设计的性能量度。利用理论定性分析、经验定性分析或系统历史数据定量分析来检验模型的正确性,利用灵敏度分析等手段来检验模型的稳定性。 (8)文件清单和报表结果 (9)实现

MATLAB仿真实验全部

实验一 MATLAB 及仿真实验(控制系统的时域分析) 一、实验目的 学习利用MATLAB 进行控制系统时域分析,包括典型响应、判断系统稳定性和分析系统的动态特性; 二、预习要点 1、 系统的典型响应有哪些? 2、 如何判断系统稳定性? 3、 系统的动态性能指标有哪些? 三、实验方法 (一) 四种典型响应 1、 阶跃响应: 阶跃响应常用格式: 1、)(sys step ;其中sys 可以为连续系统,也可为离散系统。 2、),(Tn sys step ;表示时间围0---Tn 。 3、),(T sys step ;表示时间围向量T 指定。 4、),(T sys step Y =;可详细了解某段时间的输入、输出情况。 2、 脉冲响应: 脉冲函数在数学上的精确定义:0 ,0)(1)(0 ?==?∞ t x f dx x f 其拉氏变换为:)()()()(1 )(s G s f s G s Y s f === 所以脉冲响应即为传函的反拉氏变换。 脉冲响应函数常用格式: ① )(sys impulse ; ② ); ,();,(T sys impulse Tn sys impulse ③ ),(T sys impulse Y = (二) 分析系统稳定性 有以下三种方法: 1、 利用pzmap 绘制连续系统的零极点图; 2、 利用tf2zp 求出系统零极点; 3、 利用roots 求分母多项式的根来确定系统的极点 (三) 系统的动态特性分析 Matlab 提供了求取连续系统的单位阶跃响应函数step 、单位脉冲响应函数impulse 、零输入响应函数initial 以及任意输入下的仿真函数lsim.

MATLAB仿真程序

窗型选择仿真程序: clear,clc bw=3e6;% 信号带宽 T=1e-4;%信号脉冲宽度 A=2;%信号幅度 fs=4*bw; lfft=round(T*fs);%采样点数 lfft=2^nextpow2(lfft); dt=1/fs;%采样间隔 f0=1e6; t=(0:lfft-1)*dt;%时域采样点 q=(0:lfft-1)*2*pi/lfft; s=A*exp(j*2*pi*f0*t+j*pi*bw*t.*t/T);%产生线性调频信号 S=(fft(s));%线性调频信号的傅立叶变换fft H=conj(S);%匹配滤波器的频率响应 Y=S.*H;%线性调频信号的频域匹配滤波输出 y=fftshift(ifft(Y));%线性调频信号的时域匹配滤波输出 %对chirp信号进行时域加权 h1=(triang(lfft))';%三角窗函数 s1=s.*h1;S1=fft(s1);H1=conj(S1); Y1=S1.*H1; y1=fftshift(ifft(Y1));%加三角窗后的线性调频信号的时域匹配滤波输出h2=(hanning(lfft))';%汉宁窗函数 s2=s.*h2;S2=fft(s2);H2=conj(S2); Y2=S2.*H2; y2=fftshift(ifft(Y2));%加汉宁窗后的线性调频信号的时域匹配滤波输出h3=(hamming(lfft))';%海明窗函数 s3=s.*h3;S3=fft(s3);H3=conj(S3); Y3=S3.*H3; y3=fftshift(ifft(Y3));%加海明窗后的线性调频信号的时域匹配滤波输出 figure; subplot(3,1,1), plot(t,real(s)),title('chirp signal'); subplot(3,1,2), plot(q,abs(S)),title('线性调频信号幅度谱'); subplot(3,1,3), plot(q,angle(S)),title('线性调频信号相位谱');

二阶系统matlab仿真

simulink仿真 -1<ξ<0 >> step(tf(4^2,[1,2*(-0.5)*4,4^2])) ξ<-1 >> step(tf(4^2,[1,2*(-1.5)*4,4^2])) ξ=0 >> step(tf(4^2,[1,2*0*4,4^2])) 0<ξ<1 >> figure >> step(tf(4^2,[1,2*0.1*4,4^2])) >> step(tf(4^2,[1,2*0.2*4,4^2])) >> step(tf(4^2,[1,2*0.3*4,4^2])) >> step(tf(4^2,[1,2*0.4*4,4^2])) >> step(tf(4^2,[1,2*0.5*4,4^2])) >> step(tf(4^2,[1,2*0.6*4,4^2])) >> step(tf(4^2,[1,2*0.7*4,4^2])) >> step(tf(4^2,[1,2*0.8*4,4^2])) >> step(tf(4^2,[1,2*0.9*4,4^2])) ωn不变,ζ减小

ξ=1 >> figure >> step(tf(4^2,[1,2*1*4,4^2])) ξ>1 >> hold on >> step(tf(4^2,[1,2*2.0*4,4^2])) >> step(tf(4^2,[1,2*4.0*4,4^2])) >> step(tf(4^2,[1,2*8.0*4,4^2])) ωn不变,ζ减小 ξ=0.5,改变ωn时的情况: >> figure >> step(tf(1^2,[1,2*0.5*1,1^2])) (ωn=1)

>> hold on >> step(tf(2^2,[1,2*0.5*2,2^2])) (ωn=2)>> step(tf(4^2,[1,2*0.5*4,4^2])) (ωn=4)>> step(tf(8^2,[1,2*0.5*8,8^2])) (ωn=8) ζ不变,ωn增大 曲线拟合程序 >> figure >> x=[0,0.2,0.4,0.6,0.8,1.0,1.2]; >> y=[1.135,1.135,1.216,1.351,1.534,1.737,2.0,]; >> plot(x,y,'.') >> hold on >> x1=[0:0.1:1.2]; >> y1=1+0.6*x1+0.2*x1.^2; >> plot(x1,y1) >> y1=1+0.7*x1; >> plot(x1,y1)

MATLAB仿真技术

MATLAB仿真技术 作 业 合 集

第1章 习题 5.利用直接输入法和矩阵编辑器创建矩阵A=? ? ? ? ??642531。 解:⑴利用直接输入法输入程序 A=[1 3 5;2 4 6] 按Enter 键后,屏幕显示 A = 1 3 5 2 4 6 ⑵用矩阵编辑器创建矩阵,如图1.1所示。 图1.1 MATLAB 编辑器 7.用矩阵编辑器创建矩阵a,使a 具有如下矩阵形式。 a=??????642531?a=??????????654321?a=??????????987654321?a=???? ??????098706540321?a=????? ???????00 00 09870654 0321 解:用矩阵编辑器创建矩阵a 的过程如图1.2、1.3、1.4、1.5、1.6所示。 图1.2 图1.3 图1.4 图1.5

图1.6 9.已知矩阵B=????? ?? ?????????922518113211912102201304161475231501017,试:①提取矩阵B 的第一行和第二行的第2、4、5个元素组成新矩阵1B ;②提取矩阵B 的第三行和第一行的全部元素组成新矩阵2B ;③使矩阵B 的第一行和第三行的第2;4个元素为0;④标出矩阵B 的第一行中小于5的元素。 解:①如上题,用矩阵编辑器生成矩阵B ,再输入程序 B1=B([1,2],[2,4,5]) 按Enter 键后,屏幕显示 B1 = 0 0 15 5 14 16 ②输入程序 B2=B([1,3],:) 按Enter 键后,屏幕显示 B2 = 17 0 1 0 15 4 0 13 0 22 ③第一行和第三行的第2;4个元素原本就为0。 ④输入程序如下 C=B(1,:)<5; %将B 矩阵第一行中小于5 的值标记为1 D=B(1,C) %去B 矩阵第一行中标为1的元素 按Enter 键后,屏幕显示 D= 0 1 0 11.已知矩阵a 为4阶魔方阵,令a+3赋值给b ,a+b 赋值给c ,求b 和c 。 解:程序如下。 >> a=magic(4) %建立4阶魔方矩阵 a = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 >> b=a+3 %将a 中各元素加3 b = 19 5 6 16 8 14 13 11 12 10 9 15 7 17 18 4

matlab中循环语句用法

循环结构:for语句 格式: for 循环变量=表达式1:表达式2:表达式3 循环体 end 【注】:表达式1:循环变量初值, 表达式2:步长,为1时,可省略; 表达式3:循环变量终值。 或: for循环变量=矩阵表达式 循环体 end 【注】:执行过程是依次将矩阵的各列元素赋给循环变量,然后执行循环体语句,直至各列元素处理完毕。 2 while语句: 格式: while(条件) 循环体 end 【注】:条件成立时,执行循环体 3

break语句&& continue语句: break:破坏,破坏循环,终止循环的进行,跳出循环,程序将执行循环语句的下一语句。 continue:继续,循环继续,程序将跳过循环体中剩下的语句,继续下一次循环。 4 循环的嵌套—多重循环结构 5 选择结构:if-else语句 格式: if 表达式 程序模块 end 或 if 表达式 程序模块1 else 程序模块2 end 6 switch语句: 格式:

switch 表达式 case 数值1 程序模块1 case 数值2 程序模块2 case 数值3 程序模块3 ...... otherwise 程序模块n end 执行过程:首先计算表达式的值, 然后将其结果与每一个case后面的数值依次进行比较, 如果相等,则执行该case的程序模块; 如果都不相等,则执行otherwise模块中的语句。 switch语句可以替代多分支的if语句,而且switch语句简洁明了,可读性更好。 7 matlab中一些基本知识: END 注意事项 for循环可以通过break语句结束整个for循环

控制系统Matlab仿真 (传递函数)

控制系统仿真 [教学目的] 掌握数字仿真基本原理 控制系统的数学模型建立 掌握控制系统分析 [教学内容] 一、控制系统的数学模型 sys=tf(num,den)%多项式模型,num为分子多项式的系数向量,den为分母多项式的系%数向量,函数tf()创建一个TF模型对象。 sys=zpk(z,p,k)%z为系统的零点向量,p为系统的极点向量,k为增益值,函数zpk()创建一个ZPK模型对象。 (一)控制系统的参数模型 1、TF模型 传递函数 num=[b m b m-1b m-2…b1b0] den=[a m a m-1a m-2…a1a0] sys=tf(num,den) 【例1】系统的传递函数为。 >>num=[01124448]; >>den=[11686176105]; >>sys=tf(num,den); >>sys Transfer function: s^3+12s^2+44s+48 ------------------------------------- s^4+16s^3+86s^2+176s+105 >>get(sys) >>set(sys) >>set(sys,'num',[212])

>>sys Transfer function: 2s^2+s+2 ------------------------------------- s^4+16s^3+86s^2+176s+105 【例2】系统的传递函数为。 >>num=conv([20],[11]); >>num num= 2020 >>den=conv([100],conv([12],[1610])); >>sys=tf(num,den) Transfer function: 20s+20 ------------------------------- s^5+8s^4+22s^3+20s^2 【例3】系统的开环传递函数为,写出单位负反馈时闭环传递函数的TF模型。>>numo=conv([5],[11]); >>deno=conv([100],[13]); >>syso=tf(numo,deno); >>sysc=feedback(syso,1) Transfer function: 5s+5 ---------------------- s^3+3s^2+5s+5 【例4】反馈系统的结构图为: R

预测控制MATLAB仿真与设计

动态矩阵控制算法实验报告 院系:电子信学院 姓名:郝光杰 学号:172030039 专业:控制理论与控制工程 导师:俞孟蕻

MATLAB环境下动态矩阵控制实验 一、实验目的: 对于带有纯滞后、大惯性的研究对象,通过动态控制矩阵的MATLAB的直接处理与仿真实验,具有较强的鲁棒性和良好的跟踪性。输入已知的控制模型,通过对参数的选择,来取的良好的控制效果。 二、实验原理: 动态矩阵控制算法是一种基于被控对象非参数数学模型的控制算法,它是一种基于被控对象阶跃响应的预测控制算法,以对象的阶跃响应离散系统为模型,避免了系统的辨识,采用多步预估技术,解决时延问题,并按照预估输出与给定值偏差最小的二次性能指标实施控制,它适用于渐进稳定的线性对象,系统动态特性中存在非最小相位特性或纯滞后都不影响算法的直接使用。 三、实验环境: 计算机 MATLAB2016b 四、实验步骤: 影响控制效果的主要参数有: 1)采样周期T与模型长度N 在DMC中采样周期T与模型长度N的选择需要满足香农定理和被控对象的类型及其动态特性的要求,通常需要NT后的阶跃响应输出值接近稳定值。 2)预测时域长度P P对系统的快速性和稳定性具有重要影响。为使滚动优化有意义,应使P 包含对象的主要动态部分,P越小,快速性提高,稳定性变差;反之,P越大,系统实时性降低,系统响应过于缓慢。 3)控制时域长度M

M控制未来控制量的改变数目,及优化变量的个数,在P确定的情况下,M越小,越难保证输出在各采样点紧密跟踪期望输出值,系统响应速度缓慢, 可获得较好的鲁棒性,M越大,控制机动性越强,改善系统的动态性能,但是稳定性会变差。 五、实例仿真 (一)算法实现 设GP(s)=e-80s/(60s+1),采用DMC后的动态特性如图1所示,采样周期 T=20s,优化时域P=10,M=2,建模时域N=20。 MATLAB程序1: g=poly2tfd(1,[60 1],0,80);%通用传函转换为MPC模型 delt=20; %采样周期 nt=1; %输出稳定性向量 tfinal=1000; %截断时间 model=tfd2step(tfinal,delt,nt,g);%传函转换为阶跃响应模型 plant=model;%进行模型预测控制器设计 p=10; m=2; ywt=[];uwt=1;%设置输入约束和参考轨迹等控制器参数 kmpc=mpccon(plant,ywt,uwt,m,p);%模型预测控制器增益矩阵计算 tend=1000;r=1;%仿真时间 [y,u,yrn]=mpcsim(plant,model,kmpc,tend,r);%模型预测控制仿真 t=0:20:1000;%定义自变量t的取值数组 plot(t,y) xlabel(‘图一DMC控制动态响应曲线(time/s)’); ylabel(‘响应曲线’); 结果如下: Percent error in the last step response coefficient

最小拍系统matlab仿真

X x理工大学 课程设计任务书 2010 ~2011 学年第2学期 学生姓名: xxx 专业班级: 指导教师:工作部门: 一、课程设计题目 《控制系统建模、分析、设计和仿真》 本课程设计共列出10个同等难度的设计题目,编号为:[0号题]、[1号题]、[2号题]、[3号题]、[4号题]、[5号题]、[6号题]、[7号题]、[8号题]、[9号题]。 学生必须选择与学号尾数相同的题目完成课程设计。例如,学号为8xxxxxxxxx2的学生必须选做[2号题]。 二、课程设计内容 (一)《控制系统建模、分析、设计和仿真》课题设计内容 最少拍有波纹控制系统

[2号题] 控制系统建模、分析、设计和仿真 设连续被控对象的实测传递函数为: 用零阶保持器离散化,采样周期取0.1秒,分别设计一单位加速度信号输入时的最少拍有波纹控制器Dy(z)和一单位速度信号输入时的最少拍无波纹控制器Dw(z)。具体要求见(二)。 (二)《控制系统建模、分析、设计和仿真》课题设计要求及评分标准【共100分】 1、求被控对象传递函数G(s)的MATLAB 描述。(2分) 2、求被控对象脉冲传递函数G(z)。(4分) 3、转换G(z)为零极点增益模型并按z-1形式排列。(2分) 4、确定误差脉冲传递函数Ge(z)形式,满足单位加速度信号输入时闭环稳态误差为零和实际闭环系统稳定的要求。(6分) 5、确定闭环脉冲传递函数Gc(z)形式,满足控制器Dy(z)可实现、最少拍和实际闭环系统稳定的要求。(8分) 6、根据4、5、列写方程组,求解Gc(z)和Ge(z)中的待定系数并最终求解Gc(z)和Ge(z) 。(12分) 7、求针对单位加速度信号输入的最少拍有波纹控制器Dy(z)并说明Dy(z)的可实现性。 (3分) 8、用程序仿真方法分析加速度信号输入时闭环系统动态性能和稳态性能。(7分) 9、用图形仿真方法(Simulink)分析单位加速度信号输入时闭环系统动态性能和稳态性能。 (8分) 8) +(s 5)+(s 1)+(s s 6) +(s 2)+(s 668)(2 s G

相关主题
文本预览
相关文档 最新文档