lab01Matlab平台使用记得带耳机文档格式.docx

上传人:b****6 文档编号:21624390 上传时间:2023-01-31 格式:DOCX 页数:13 大小:113.55KB
下载 相关 举报
lab01Matlab平台使用记得带耳机文档格式.docx_第1页
第1页 / 共13页
lab01Matlab平台使用记得带耳机文档格式.docx_第2页
第2页 / 共13页
lab01Matlab平台使用记得带耳机文档格式.docx_第3页
第3页 / 共13页
lab01Matlab平台使用记得带耳机文档格式.docx_第4页
第4页 / 共13页
lab01Matlab平台使用记得带耳机文档格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

lab01Matlab平台使用记得带耳机文档格式.docx

《lab01Matlab平台使用记得带耳机文档格式.docx》由会员分享,可在线阅读,更多相关《lab01Matlab平台使用记得带耳机文档格式.docx(13页珍藏版)》请在冰豆网上搜索。

lab01Matlab平台使用记得带耳机文档格式.docx

cos(pi/5)%<

---assignedtowhat?

yy=sqrt(1-xx*xx)

ans

注意观察语句末尾有分号和无分号有什么差别。

6.Matlab中的复数运算的基本操作,试试:

zz=3+4i,ww=-3+4j

real(zz),imag(zz)

abs([zz,ww])%<

--Vectorconstructor

conj(zz+ww)

angle(zz)

exp(j*pi)

exp(j*[pi/4,0,-pi/4])

3.再识Matlab

3.1Matlab数组索引

(a).冒号的含义

试试如下命令的结果:

jkl=0:

6

jkl=2:

4:

17

jkl=99:

-1:

88

ttt=2:

(1/9):

4

tpi=pi*[0:

0.1:

2];

%注意这里有分号

(b).从向量提取数字和/或插入数字,思考如下xx的定义:

xx=[zeros(1,3),linspace(0,1,5),ones(1,4)]

xx(4:

6)

size(xx)

length(xx)

xx(2:

2:

length(xx))

end))

解释以上代码最后4行的结果

 

(c).观察如下赋值的结果:

yy=xx;

yy(4:

6)=pi*(1:

3)

现在写一条语句,xx用(b)中定义的方法,把xx的偶数索引的元素(即xx

(2),xx(4)等)的值替换为常数ππ。

使用向量替换,不要用循环。

length(xx))=pi^pi

3.2Matlab脚本文件

(a)看看关于向量的实验。

把向量看作一个数字集合,试试:

xk=cos(pi*(0:

11)/4)%<

---comment:

computecosines

解释一下余弦函数的值是怎样存储在向量xk中的。

xk

(1)是什么意思?

有定义xk(0)吗?

注:

语句后没有分号,所以语句会把xk的计算结果依次显示在命令窗口,在百分号%后面的文字是注释,可以忽略。

(b)Matlab中可以写循环,但是这不是最有效率的解决办法。

尽量避免循环,并使用冒号会提高效率。

下面的代码是用一个循环来计算余弦函数的值的:

yy=[];

%<

---initializetheyyvectortobeempty

fork=-5:

5

yy(k+6)=cos(k*pi/3)

end

yy

解释为什么需要写yy(k+6)。

如果用yy(k)会发生什么?

因为括号里面的数值必须大于0,如果用yy(k),k从-5开始到5,软件会提示错误.

不使用循环,而用3.1的方法,利用冒号,重新实现这个功能。

(c)Matlab中实数和复数的绘制都很容易。

基本绘图命令绘制向量yy和向量xx的关系,试试:

xx=[-3-1013];

yy=xx.*xx-3*xx;

plot(xx,yy)

zz=xx+yy*sqrt(-1)

plot(zz)%<

----complexvalues:

plotimagvs.real

在命令窗口输入“helpwinarith”,了解当xx是一个向量时,操作xx.*xx是如何工作的。

当xx是一个矩阵时,操作xx.*xx又是如何工作的。

当你没把握某个命令时,可随时使用帮助系统。

(d)使用Matlab的编译器创建脚本文件,命名为mylab1.m,文件内容如下:

clearall;

closeall;

tt=-1:

0.01:

1;

xx=cos(5*pi*tt);

zz=1.4*exp(j*pi/2)*exp(j*5*pi*tt);

plot(tt,xx,'

b-'

tt,real(zz),'

r--'

)%<

---plotasinusoid

gridon

title('

TESTPLOTofaSINUSOID'

xlabel('

TIME(sec)'

解释为什么real(zz)的图形是一个正弦曲线。

它的相位和幅度是多少?

由所绘图形的时移量计算相位。

ZZ的实部应该是一个余弦曲线,但是因为初相位是π/2,所以变成了正弦曲线.

相位是π/2,幅度是1.4.

(e)在命令窗口输入“mylab1”即可运行上述m文件,即

mylab1%<

---willrunthecommandsinthefile

typemylab1%<

---willtypeoutthecontentsof

%mylab1.mtothescreen

3.3Matlab与声音相关的函数命令

这一节练习是关于声音信号的,所以需要带耳机来机房听效果。

(a)运行Matlab的声音demo:

在命令窗口输入“xpsound”。

你可以听到多种声音,并可以查看对应的时间序列,功率谱密度和声谱图(声谱图详见7.3)。

(b)现在在Matlab中生成一个音调(例如正弦),用soundsc()命令听一听

在3.2(d)的第2行和第3行创建了一个向量xx为2.5Hz的正弦序列。

而你们要生成的正弦信号的频率为2000Hz,时长为0.9秒,采样率fs为11025个样本/秒。

采样率说明了采样点之间的时间间隔,所以时间向量应定义为:

tt=0:

(1/fs):

dur;

其中fs为采样率,dur为时长(以秒为单位)。

可以在帮助系统中查找sound()和soundsc()了解它们的用法和含义。

那么,你们的tt向量的长度(即样本数)是多少?

4.用Matlab处理正弦信号

在实验报告中要包括本节的图形和实验结果描述。

写一个Matlab的m文件来完成步骤(a)到步骤(d)。

你们的实验报告也要包括这个m文件的代码。

(a)生成一个时间向量tt,需要覆盖下面的(b)中频率为4000Hz的正弦信号的两个周期。

tt的定义方式使用3.2(d)的方式。

如果我们使用T表示正弦的周期,定义向量tt的开始时间为-T,结束时间为+T,那两个周期就会包括tt=0。

最后,确保你们正弦波的每个周期有至少25个样本。

也就是说,当你们使用冒号操作符定义时间变量时,要使增量足够小,才能保证每个周期可以产生至少25个样本。

(b)生成以下两个4000Hz的正弦序列:

x1(t) 

A1 

cos(2π(4000)(t 

− 

tm1)) 

x2(t) 

A2 

tm2)) 

其中A1是你的年龄,A2=1.2A1,tm1 

(37.2/M)T 

,tm2 

−(41.3/D)T 

,这里M和D分别是你生日的月和日,T是周期

绘制以上两个信号在-T≤t≤T的图形。

为了输出下面(d)的要求,使用subplot(3,1,1)和subplot(3,1,2)来使图在一个图形窗口内,详见helpwinsubplot

一般用法是:

subplot(2,1,2);

plot(xx);

(c)创建第3个正弦信号为 

x3(t) 

x2(t). 

在Matlab中,这表示把两个正弦向量中的值对应相加。

绘制 

在-T≤t≤T的图形,使用subplot(3,1,3)绘图。

(d)对每个图都添加一个图名,图名都要包含你的姓名,用title函数

tt=-0.00025:

0.00001:

0.00025;

x1=20*cos(8000*pi*tt-(37.2/4)*2*pi);

x2=24*cos(8000*pi*tt+(41.3/3)*2*pi);

x3=x1+x2;

subplot(3,1,1)

plot(tt,x1)

杨泽雄1'

subplot(3,1,2)

plot(tt,x2)

杨泽雄2'

subplot(3,1,3)

plot(tt,x3)

杨泽雄3'

time(sec)'

详见helpwintitle,helpwinsubplot

4.1复数幅度

用一条语句生成以上正弦信号x1(t) 

的值,可以使用复数幅度表示方法:

Re{Xejωt} 

其中X和w为某个常数。

5.复指数简介

本节目标是让大家熟悉复数,并了解怎么使用它们表示正弦信号(例如 

x(t) 

Acos(ωt 

φ) 

)为复指数形式(例如z(t) 

Aejφejωt),方法如下所示:

Re{Aejφejωt} 

5.2Matlab中的复数

Matlab可用于计算复值式子,并可以向量显示结果,以下是一些Matlab的复数操作符:

conj—复共轭

abs—幅度 

angle—以弧度为单位的角度或相位 

real 

–实部

imag—虚部 

i,j 

–已预定义为

x=3+4i 

exp(j*theta)– 

复指数函数 

ejθ 

每个函数都以向量或矩阵作为输入参量。

注意:

Matlab中没有 

mag()和phase() 

函数。

5.3向量化

Matlab最重要的部分就是矩阵-向量语法。

大多数情况下,循环都可以用向量操作代替,因为形如exp() 

和cos() 

等函数都被定义为向量输入,例如

cos(vv)=[cos(vv

(1)),cos(vv

(2)),cos(vv(3)),...cos(vv(N))]

其中vv是N个元素的行向量。

向量化可用于简化代码。

如果有如下代码来绘制某个信号:

M=200;

fork=1:

M

x(k)=k;

y(k)=cos(0.001*pi*x(k)*x(k));

plot(x,y,'

ro-'

你可以把循环替换掉,而只用如下3行代码即可:

y=cos(0.001*pi*(1:

M).*(1:

M));

plot(1:

M,y,'

用这种向量化的方法编写2-3行代码完成以下Matlab代码,不使用循环。

(注:

当xx是向量时,xx*xx和xx.*xx是不同的)

N=(1:

200)/50;

rk=sqrt(N.*N+2.25);

plot(N,real(exp(j*2*pi*rk)),'

mo-'

%---makeaplotofaweirdsignal

N=200;

N

xk(k)=k/50;

rk(k)=sqrt(xk(k)*xk(k)+2.25);

sig(k)=exp(j*2*pi*rk(k));

plot(xk,real(sig),'

5.4函数

函数是一种特别的M-文件,可以接受输入(矩阵或向量),也可以得到输出。

关键词function必须是文件的第一个词,并且定义了函数,M-文件的第一行定义函数如何传递输入和输出参量。

文件扩展名必须使用小写的“m”,例如my_func.m。

如下函数有一些小错误,请找找错在哪里:

(至少有3处错误)

matlabmfile[xx,tt]=badcos(ff,dur)

%BADCOSFunctiontogenerateacosinewave

%usage:

%xx=badcos(ff,dur)

%ff=desiredfrequencyinHz

%dur=durationofthewaveforminseconds

%

1/(100*ff):

%--gives100samplesperperiod

badcos=cos(2*pi*freeq*tt);

错误有:

第一个词必须是“function”。

而且“freeq”在使用前没有定义。

最后,第一行指明要“xx”作输出,因此“xx”需要在函数体中出现在至少一个赋值行的左边。

正确的函数写法应该是:

function[xx,tt]=goodcos(ff,dur)

xx=cos(2*pi*ff*tt);

可在命令窗口输入函数的文件名(注意不是函数名)来调用它(也可以在另一个m文件调用它),例如,如果以上goodcos函数的文件名为testcos.m,且ff=1,dur=10,则调用时应输入testcos(1,10)。

你可以尝试一下,如果你输入goodcos(1,10),matlab会有什么反应。

6.复指数6.1生成正弦信号的M-文件

写一个可以生成单一正弦信号x(t) 

Acos(ωt+φ)的函数,使用4个输入参量:

幅度A,频率ω,相位φ和时长dur。

函数应当返回两个输出参量:

正弦信号的值x和对应的时间t。

确保函数生成的正弦信号在每个周期有20个值,函数名为one_cos()。

提示:

可借鉴上面的goodcos()函数。

绘制你们的one_cos()函数,参数选为:

A=95,ω=200π弧度/秒,φ=π/5弧度,时长为0.025秒。

推导所绘图形的周期和相位是否正确。

如果周期以毫秒为单位是多少?

function[xx,tt]=onecos(A,w,a,dur)

tt=0:

2*pi/(20*w):

xx=A*cos(w*tt+a);

7线性调频脉冲chirp

线性调频脉冲chirp信号(或线性扫频信号)是一个正弦信号,其频率从一个初值线性变化到终值。

Chirp信号的表达式可写为:

x(t)=cos(ψ(t)),其中ψ(t) 

2π 

μ 

t2+ 

f0 

φ 

对ψ(t) 

求导后得到随时间线性变化的瞬时频率:

fi 

(t) 

2μt 

的斜率等于 

2μ,截距为f0。

如果信号于t=0开始,f0也是初始频率。

这种时变角度造成的频率变化称为频率调制。

这类信号是频率调制FM信号的一个例子。

更一般的,我们通常考虑它们为更大一类的角度调制信号。

最后,因为频率的线性变化可以生成一个类似汽笛声或鸟叫声(chirp),所以线性FM信号也可以称为chirp信号。

7.1chirp信号的Matlab合成方法

以下的Matlab代码可以合成一个chirp信号

fsamp=11025;

dt=1/fsamp;

dur=1.8;

tt=0:

dt:

dur;

psi=2*pi*(100+200*tt+500*tt.*tt);

xx=real(7.7*exp(j*psi));

soundsc(xx,fsamp);

(a)确定合成信号的总时长(秒),确定tt向量的长度(样本数)

(b)在Matlab中,只能合成离散时间信号,所以对于chirp信号,我们处理为:

x(tn)=Acos( 

tn2+ 

tn+ 

φ)

其中,tn=nTs表示离散时间值。

在以上的Matlab代码中,tn的值是多少?

A,μ,f0和φ的值是多少?

(c)确定以上Matlab代码合成的频率的范围(Hz为单位)。

手绘瞬时频率随时间的变化情况。

听到的最小频率和最大频率是多少?

(d)听听信号的频率是上升还是下降(使用soundsc())。

注意soundsc()需要知道信号创建时的采样率。

详见帮助。

7.2chirp的函数

使用以下代码来写一个可以合成chirp信号的函数,根据注释的提示编写。

function[xx,tt]=mychirp(f1,f2,dur,fsamp)

%MYCHIRPgeneratealinear-FMchirpsignal

xx=mychirp(f1,f2,dur,fsamp)

%f1=startingfrequency

%f2=endingfrequency

%dur=totaltimeduration

%fsamp=samplingfrequency(OPTIONAL:

defaultis11025)

%xx=(vectorof)samplesofthechirpsignal

%tt=vectoroftimeinstantsfort=0tot=dur

if(nargin<

4)%--Allowoptionalinputargument

请生成一个chirp,其频率起始于2500Hz,终止于500Hz。

时长应当为1.5秒。

听听你的chirp。

7.3声谱图

考虑信号的频谱非常有用。

信号频谱是信号所含频率的表示方式。

固定单一频率的正弦信号的频谱包含两个成分,一个在2πf0,一个在-2πf0。

对于更复杂的信号,频谱会非常有趣,FM信号的频谱可以认为是时变的。

一种表示时变频谱信号的方式就是声谱图。

声谱图可通过估计信号短时的频率成分得到。

把频谱在每个部分的幅度画成关于频率和时间的二维的密度或颜色,即可得到一幅声谱图。

关于声谱图需要知道:

1.Matlab的函数specgram可计算声谱图。

详见帮助,了解语法和所需参量。

2.声谱图是数值计算出来的,仅提供一个信号的时变频率成分的估计。

3.一般调用形式为specgram(xx,1024,fs)。

第二个参量是窗长度,可以选用不同的长度观察不同尺度的声谱图。

如果窗更长,例如1024或2048,声谱图可以查看单独的谱线。

为了看看声谱图是什么样,可以在命令窗口运行如下代码:

fs=8000;

xx=cos(3000*pi*(0:

1/fs:

0.5));

specgram(xx,1024,fs);

注意声谱图在正弦的频率处有一条水平的线。

7.4chirp的声谱图

使用mychirp函数合成chirp信号。

实验参数为:

1.总时长为3秒,D/A转换率为fs=11025Hz

2.瞬时频率起始于5000Hz,终止于300Hz

听一听信号。

Chirp信号的声音频率是否线性变化,频率变高还是变低?

7.5有趣的chirp

再合成一个chirp信号,使用如下参数:

1.总时长为3秒,采样率为fs=11025Hz

2.频率起始于3000Hz,终止于-2000Hz(负频率)

频率是怎么变化的?

显示这个chirp信号的声谱图。

使用频谱理论(正频率成分和负频率成分)解释你听到的声音和看到的声谱图。

function[xx,tt]=mychirp(f1,f2,dur,fsamp)

dt=1/fsamp;

dt:

u=(f2-f1)/(2*dur);

xx=cos(2*pi*u*tt.*tt+2*pi*f1*tt);

soundsc(xx,fsamp);

specgram(xx,1024,fsamp);

音调由高到低,再由低到高.

声谱图:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1