• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

MATLAB及其信号处理基础

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

1.实验目的

(1)掌握MATLAB基本语法

(2)掌握使用MATLAB进行图像、音频文件的基本使用与分析方法

2.实验内容

(1)MATLAB基本语法;

(2)MATLAB信号处理基础;

3.实验原理

(1)MATLAB基本语法

  MATLAB的变量名以字母打头,后最多可跟19个字母或数字,不能使用内部函数或命令名作为变量名;MATLAB中的变量名区分大小写。

  MATLAB的基本单位是矩阵。

常用命令:

dir:列出当前目录下的所有文件

clc:清除命令窗

clear all:清除环境(从内存中清除所有变量)

who:将内存中的当前变量以简单形式列出

close all:关闭所有的Figure窗口

(2)MATLAB信号处理基础

  离散傅里叶、离散余弦和离散小波变换是图像、音频信号常用基础操作,时域信号转换到不同变换域以后,会导致不同程度的能量集中,信息隐藏利用这个原理在变换域选择适当位置系数进行修改,嵌入信息,并确保图像、音频信号经处理后感官质量无明显变化。

4.实验记录

(1)MATLAB基本语法

1、变量赋值

1)表达式赋值

图1.1.1 表达式赋值

2)矩阵赋值

  数值通常按行输入,行之间用分号隔开。

图1.1.2 矩阵赋值

3)通过引用特定的位置可以单独改变某个矩阵元素

图1.1.3 通过特定的位置单独改变某个矩阵元素

4)引用已定义的矩阵,重新定义一个新矩阵

S为3)步骤定义的矩阵

图1.1.4 引用已定义的矩阵,重新定义一个新矩阵

2.整数操作

1)fix(x):截尾取整

图1.2.1 将3.12的小数部分去除只保留整数部分3

2)floor(x):不超过x的最大整数(高斯取整)

图1.2.2 通过高斯取整将3.12、-3.12取没有超过他们的整数

3)ceil(x):大于x的最小整数

图1.2.3 取3.12、-3.12比它们大的最小整数

3.随机序列常用命令

1)rand:均匀分布随机矩阵

rand       无变量输入时只产生一个随机数

y=rand(n)    生成n*n随机矩阵,其元素在(0,1)内

y=rand(m,n)     生成m*n随机矩阵,其元素在(0,1)内

图1.3.1 生成一个3*4的随机矩阵

2)randn:正态分布随机矩阵

randn                           无变量输入时只产生一个正态分布随机数

y=randn(n)                   生成n*n正态分布随机矩阵

y=randn(m,n)                    生成m*n正态分布随机矩阵

图1.3.2 产生一个均值为0.6,方差为0.1的4阶矩阵

3)randsrc:产生均匀分布数组

randsrc                      无变量输入时只产生一个随机数1或者-1

y=randsrc(n)                生成n*n随机数组,其元素为1或者-1

y=randsrc(m,n)            生成m*n随机数组,其元素为1或者-1

图1.3.3 产生一个2*3的随机矩阵

4.矩阵常用操作命令

  MATLAB的基本单位是矩阵,掌握矩阵的输入、各种数值运算以及矩阵函数是学好MATLAB的关键。

1)矩阵的输入

  *直接输入创建矩阵

  以"["和"]"作为首尾,同行的元素用","或空格隔开,不同行的元素用";"或按Enter键来分隔;矩阵的元素可以是数字也可以是表达式,如果是数值计算,表达式中不可包含未知变量。

图1.4.1-1 创建矩阵

  *用矩阵函数来生成矩阵

  MATLAB提供了大量的函数来创建特殊矩阵,表1.1给出MATLAB常用的矩阵函数。

函数名称

函数功能

zero(m,n)

m行n列零矩阵

eye(n)

n阶方矩阵

ones(m,n)

m行n列元素为1的矩阵

rand(m,n)

m行n列随机矩阵

randn(m,n)

m行n列正态随机矩阵

magic(n)

n阶魔方矩阵

图1.4.1-2 生成3*3矩阵全为1

图1.4.1-3 生成2*5矩阵全为0

图1.4.1-4 生成3阶的魔方矩阵

2)操作符":"的说明

j:k

表示步长为1的等差数列构成的数组:[j,j+1,j+2,……,k]

j:i:k

表示步长为i的等差数列构成的数组:[j,j+i,j+2*I,…,k]

A(i:j)

表示A(i),A(i+1),…,A(j)。

3)对矩阵元素的操作

设A是一个矩阵,则在MATLAB中用如下符号表示它的元素:

A(i,j)

表示矩阵A的第i行第j列元素

A(:,j)

表示矩阵A的第j列。

A(i,:)

表示矩阵A的第i行。

A(:,:)

表示A的所有元素构造2维矩阵

A(:)

表示以矩阵A的所有元素按列构成的一个列矩阵

A(i)

表示矩阵A(:)的第i个元素

[ ]

表示空矩阵

4)矩阵的运算

A+B:

矩阵加法

A-B:

矩阵减法

A*B:

矩阵乘法

A\':

A的转置

k*A:

数k乘以A

det(A):

A的行列式

rank(A):

A的秩

   
5)数组

  在MATLAB中数组是一行或者一列的矩阵,对矩阵输入、修改和保存都适用于数组,同时MATLA还提供了一些创建数组的特殊指令。

  *特殊数组的创建

linspace(a,b,n)            给出区间[a,b]的n个等分点数据

图1.4.5-1 区间[0,1]的6个等分点数据

 

*数组运算

 

  数组运算除作为1*n的矩阵应遵循矩阵的运算规则外,MATLAB中还为数组提供了一些特殊的运算:乘法为:.*、乘幂为:.^。数组运算强调元素对元素的运算。

图1.4.5-2 数组运算

5.位操作

1)bitand:按位与

  C=bitand(A,B)命令将返回两个非负整数数组A和B的相应元素按位与操作的结果。为了确保A和B的元素都是整数,可以使用ceil、fix、floor和round函数来生成A和B。

图1.5.1 按位与操作

2)bitor:按位或

  C=bitor(A,B)命令将返回两个非负整数数组A和B的相应元素按位或操作的结果。为了确保A和B的元素都是整数,可以使用ceil、fix、floor和round函数来生成A和B。

图1.5.2 按位或操作

3)  bitxor:按位异或

  C=C=bitxor(A,B)返回两个非负整数数组 A 和 B 的相应元素进行按位异或的结果,为了确保 A 和 B 的元素都是整数,可以使用 ceil、fix、floor 和 round 函数来生成 A 和 B。

图1.5.3 按位异或

4)  bitset:设置指定位的值

  C=bitset(A,bit,v)命令将 A 中元素第 bit 位设为 v,其中 v 必须为 0 或 1,A 中的元素必须为非负整数,bit 必须为 1 到 A 中元素浮点整数表示法的位数之间的一个数字。

图1.5.4 设置指定位的值

 

5)bitget:获取指定位的值

 

  C=bitget(A,bit)命令将返回 A 中元素用 bit 指定位的值,A 中的元素必须为非负整数,bit 必须为 1 到 A 中元素浮点整数表示法位数之间的一个数字。

图1.5.5 获取指定位的值

6.绘图操作

1)图形标注

title(\'string\',\'属性名\',\'属性值\',…)------给图形加标题

xlabel(\'string\',\'属性名\',\'属性值\',…)------给x轴加标注

ylabel(\'string\',\'属性名\',\'属性值\',…)------给y轴加标注

legend(\'string1\',\'string2\',…)------添加图例,其顺序对应于绘图指令中的顺序

axis([xmin,xmax,ymin,ymax])------控制坐标轴的刻度范围

2)二维图像

 

  * plot(x,y)

 

  功能:以向量x,y为轴,绘制曲线。

   注:plot(x,y)命令可用来绘制函数f(x)图形,此时可通过向量x常用命令x=a:h:b的形式获得f(x)函数在绘图区间[a,b]上的自变量点向量数据,对应的函数向量值取位y=f(x)。步长h可以任意选取,一般步长越小,曲线越光滑,但是步长太小,会增加计算量,运算速度也要降低。通常步长h取值0.1可达到较好的绘图效果。

例:绘制函数y = sin x2 在-5 x 5的图形。

图1.6.2-1 命令

图1.6.2-2 生成的绘图

 

* plot(x1,y1,x2,y2,x3,y3…)

 

功能:在同一图形窗口绘制多条不同颜色曲线,曲线关系为

y1 =f(x1),y2=f(x2),y3=f(x3)

例:在同一图形窗口画出三个函数y=cos2x,y=x2,y=x的图形,-2 x 2

图1.6.2-3 脚本代码

图1.6.2-4 生成的绘图结果

3)二维特殊图形

 

  * bar

 

图1.6.3-1 代码

图1.6.3-2 直方图显示结果

 

  * Hist表示生成直方图

 

  M=hist(N)表示将N中的最大最小值找出来,然后,平均取十个等间隔点,看以每个间隔点为中心,向两边各扩展1/2间隔的范围内,包括N的元素个数,因此M返回值都是1*10大小。

图1.6.3-3 代码

图1.6.3-4 生成直方图

7.文件操作

1)fopen打开文件

fopen函数的调用格式为:fid=fopen(文件名,打开方式)

  其中文件名用字符串形式,表示待打开的数据文件。常见的打开方式有:\'r\'表示对打开的文件读数据,\'w\'表示对打开的文件写数据,\'a\'表示在打开的文件末尾添加数据。fid用于存储文件句柄值,句柄值用来表示该数据文件,其他函数可利用它对该数据文件进行操作。文件数据格式有两种形式,一种是二进制文件,另一种是文本文件。在打开文件时需要进一步指定文件格式类型,即指定是二进制文件还是文本文件。

2)fclose关闭文件

  文件读、写等操作完成后,应及时关闭。关闭文件用fclose函数,调用格式为:sta=fclose(fid),该函数关闭fid所表示的文件。sta表示关闭文件操作的返回代码,若关闭成功,返回0,否则返回-1.

3)二进制文件的读写操作

 

  * fread读二进制文件

 

  fread函数可以读取二进制文件的数据,并将数据存入矩阵。其调用格式为:[A,COUNT]=fread(fid,size,precision)。

  其中A用于存放读取的数据,COUNT返回所读取的数据元素个数。fid为文件句柄,size为可选项,若不选用则表示读取整个文件内容,若选用则它的值可为以下选项:N表示读取N个元素到一个列向量;Inf表示读取整个文件;[M,N]表示读数据到M*N的矩阵中,数据按列存放。precision代表读写数据的类型。

 

  * fwrite写二进制文件

 

  fwrite函数按照指定的数据类型将矩阵中的元素写入文件中。其调用格式为:COUNT=fwrite(fid,A,precision),其中COUNT返回所写的数据元素个数,fid为文件句柄,A用来存放写入文件的数据,precision用于控制所写数据的类型,其形式与fread函数相同。

8.M文件的建立与使用

  M文件有命令文件和函数文件两种形式,这两种文件的拓展名相同,都是.m。当用户要运行的命令较多时,直接从键盘上逐条输入较为繁琐。可利用命令文件来解决多行输入问题。用户可将一组相关命令编辑在同一个命令文件中,运行时只需输入文件名字,MATLAB就会自动按顺序执行文件中的命令。函数文件是另一种形式的M文件,它的第一句可执行语句是以function引导的定义语句,在函数文件中的变量都是局部变量。

 

1)命令文件

 

  M文件有两种运行方式:一是在命令窗口直接输入文件名,按Enter键;二是在编辑窗口打开菜单TOOLS,再单击Run。M文件保存的路径一定要在搜索路径上,否则M文件不能运行。

图1.8.1-1 showlena.m文件

图1.8.1-2 在命令行输入showlena,可以正常打开图像

 

2)函数文件

 

M函数文件的一般形式为:function<因变量>=<函数名>(<自变量>)

M函数文件可以有多个因变量和多个自变量,当有多个因变量时用[]括起来。

图1.8.2-1 showimage.m文件

图1.8.2-2 命令行命令

图1.8.2-3 成功打开图像文件

(2)信号处理基础

1.用离散傅里叶变换分析合成音频和图像

1)分析合成音频文件包括以下步骤:

 

  * 读取音频文件数据

 

 

  * 一维离散傅里叶变换

 

 

  * 一维离散傅里叶逆变换

 

 

  * 观察结果

 

图2.1.1-1 example11.m文件代码

uigetfile是文件对话框函数,提供图像界面供用户选择所需文件,返回目标的目录名和文件名。

函数原型:y=wavread(FILE)

功能:读取微软音频格式(wav)文件内容

输入参数:file表示音频文件名,字符串

返回参数:y表示音频样点给,浮点型

图2.1.1-2 example12.m文件代码

fft函数对输入参数进行一维离散傅里叶变换并返回其系数,对应频率从0到fs(采样频率),使用fftshift将零频对应系数移至中央。上述代码还计算了离散样点对应的频率值,以便更好地观察频谱。

图2.1.1-3 example13.m文件代码

ifft函数对输入参数进行一维离散傅里叶逆变换并返回其系数。

图2.1.1-4 example14.m 文件代码

figure(n)表示创建第n个图形窗;

  subplot 是子绘图函数,第一、二个参数指明子图像布局方式,例如,若参数为 2,3 则表示画面共分为 2 行,每行有 3 个子图像。第三个参数表明子图像序号,排序顺序为从左至右,从上至下。

  plot 是绘图函数,默认使用方式为 plot(y),参数 y 是要绘制的数据;如果需要指明图像横轴显示序列,则命令行为 plot(x, y),默认方式等同于 plot([0..len-1], y),len 为序列 y 的长度。

图2.1.1-5 用离散傅里叶变换分析合成音频文件

2)分析合成图像文件包括以下步骤:

 

  * 读取图像文件数据

 

 

  * 二维离散傅里叶变换

 

 

  * 二维离散傅里叶逆变换

 

 

  * 观察结果

 

图2.1.2-1 example21.m文件代码

函数原型:A=imread(filename,fmt)

功能:读取fmt指定格式的图像文件内容

输入参数:filename表示图像文件名,字符串

fmt表示图像文件格式名,字符串,函数支持的图像格式包括:JPEGG,TIFF,GIF,BMP等等,当参数中不包括文件格式名时,函数尝试推断出文件格式。

返回参数;A表示图像数据内容,整型

rgb2gray将RGB图像转换为灰度图。

图2.1.2-2 example22.m文件代码

fft2函数对输入参数进行二维离散傅里叶变换并返回其系数,使用fftshift将零频对应系数移至中央。

图2.1.2-3 example23.m文件代码

ifft2函数对输入参数进行二维离散傅里叶逆变换并返回其系数。

图2.1.2-4 example24文件代码

imshow时二维数据绘图函数,mesh通过三维平面显示数据。

图2.1.2-5 用离散傅里叶变换分析合成图像文件

2.用离散余弦变换分析合成音频和图像

1)分析合成音频文件包括以下步骤:

  * 读取音频文件数据

  * 一维离散余弦变换

  * 一维离散余弦逆变换

  * 观察结果

先运行example11.m文件,用来打开音频。

图2.2.1-1 example31.m文件代码

dct函数对输入参数进行一维离散余弦变换并返回其系数,对应频率从0到fs(采样频率)。

图2.2.1-2 example32.m文件代码

idct函数对输入参数进行一维离散余弦逆变换并返回其系数。离散余弦变换常用于图像压缩,可以尝试只使用部分系数重构语言,通过观察可发现,原始音频和合成后音频两者差别不大。

图2.2.1-3 example33.m文件代码

图2.2.1-4 用离散余弦变换分析合成音频文件

2)分析合成图像文件包括以下步骤:
  * 读取图像文件数据

  * 二维离散余弦变换

  * 二维离散余弦逆变换

  * 观察结果

先通过example21.m文件打开图像。

图2.2.2-1 example41.m文件代码

dct2函数对输入参数进行二维离散余弦变换并返回其系数。

图2.2.2-2 example42.m文件代码

idct2 函数对输入参数进行二维离散余弦逆变换并返回其系数。可以尝试使用部分系数重构图像,本例中使用了系数矩阵中 4/5 的数据,其它部分置零。为了保证图像能正确显示,使用 uint8 对重构图像原始数据进行了数据类型转换,确保其取值范围在 0 到 255 之间。

图2.2.2-3 example43.m文件代码

图2.2.2-4 用离散余弦变换分析合成图像文件

3.用离散小波变换分析合成音频和图像

1)分析合成音频文件包括以下步骤:

  * 读取音频文件数据

  * 一维离散小波变换

  * 一维离散小波逆变换

  * 观察结果

先使用example11.m文件打开音频文件

图2.3.1-1 example51.m文件代码

wavedec函数对输入参数进行一维离散小波变换并返回其系数C和各级系数长度L。第二个参数指明小波变换的级数,第三个参数指明小波变换使用的小波基名称。

图2.3.1-2 example52.m文件代码

waverec 函数对输入参数进行一维离散小波逆变换并返回其系数。appcoef 返回小波系数近似分量,第一个参数 C、第二个参数 L 是 wavedec 的返回参数,为各级小波系数和其长度,第三个参数指明小波基名称,第四个参数指明级数。detcoef返回小波系数细节分量,第一个参数 C、第二个参数 L 是 wavedec 的返回参数,为各级小波系数和其长度,第三个参数指明级数。

图2.3.1-3 example53.m文件代码

图2.3.1-4 用离散小波变换分析合成音频文件

2)分析合成图像文件包括以下步骤:

  * 读取图像文件数据

  * 二维离散小波变换

  * 二维离散小波逆变换

  * 观察结果

先使用example21.m文件打开图像。

图2.3.2-1 example61.m文件代码

dwt2 函数对输入参数进行二维一级离散小波变换并返回近似分量,水平细节分量,垂直细节分量和对角线细节分量。如果要对图像进行多级小波分解,使用wavedec2 函数。

图2.3.2-2 example62文件代码

idwt2 函数对输入参数进行二维离散小波逆变换并返回其系数。可以尝试仅使用近似分量、水平细节分量、垂直细节分量或对角线细节分量重构图像。

图2.3.2-3 example63文件代码

输入命令显示六个子图,分别是原始图像、使用全部系数恢复的图像、小波系数近似分量、水平细节分量、垂直细节分量和对角线细节分量。

图2.3.2-4 用离散小波变换分析合成图像文件


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap