数字信号实验.docx

上传人:b****4 文档编号:5094897 上传时间:2023-05-08 格式:DOCX 页数:28 大小:361.17KB
下载 相关 举报
数字信号实验.docx_第1页
第1页 / 共28页
数字信号实验.docx_第2页
第2页 / 共28页
数字信号实验.docx_第3页
第3页 / 共28页
数字信号实验.docx_第4页
第4页 / 共28页
数字信号实验.docx_第5页
第5页 / 共28页
数字信号实验.docx_第6页
第6页 / 共28页
数字信号实验.docx_第7页
第7页 / 共28页
数字信号实验.docx_第8页
第8页 / 共28页
数字信号实验.docx_第9页
第9页 / 共28页
数字信号实验.docx_第10页
第10页 / 共28页
数字信号实验.docx_第11页
第11页 / 共28页
数字信号实验.docx_第12页
第12页 / 共28页
数字信号实验.docx_第13页
第13页 / 共28页
数字信号实验.docx_第14页
第14页 / 共28页
数字信号实验.docx_第15页
第15页 / 共28页
数字信号实验.docx_第16页
第16页 / 共28页
数字信号实验.docx_第17页
第17页 / 共28页
数字信号实验.docx_第18页
第18页 / 共28页
数字信号实验.docx_第19页
第19页 / 共28页
数字信号实验.docx_第20页
第20页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数字信号实验.docx

《数字信号实验.docx》由会员分享,可在线阅读,更多相关《数字信号实验.docx(28页珍藏版)》请在冰点文库上搜索。

数字信号实验.docx

数字信号实验

实验一:

信号的表示

一、实验目的:

1、了解MATLAB程序设计语言的基本特点,熟悉MATLAB软件运行

环境。

2、掌握各种信号的建模方式。

3、掌握各种信号的图形表示方法。

4、掌握变量等有关概念,具备初步的将一般数学模型转化为对应的计算机

模型并进行处理的能力

二、实验设备:

PC机

MATLAB7.0软件

三、实验内容

学习使用MATLAB7.0软件。

学习信号的图形表示方法,掌握各种信号的建

模方式。

实现单位采样序列δ(n)、单位阶跃序列u(n)、矩形序列()NRn、三角波、

方波、锯齿波、Sinc函数。

四、参考实例:

常用的MATLAB绘图语句有figure、plot、subplot、stem等,图形修饰语具有title、axis、

text等。

(1)figure语句

figure有两种用法。

当只有一句figure命令时,程序会创建一个新的图形窗口,并返回

一个整数型的窗口编号。

当采用figure(n)时,表示将第n个图形窗口作为当前的图形窗口,

将其显示在所有窗口的最前面。

如果该图形窗口不存在,则新建一个窗口,并赋以编号n。

(2)plot语句

线形绘图函数。

用法为plot(x,y,’s’)。

参数x为横轴变量,y为纵轴变量,s用以控制图

形的基本特征如颜色、粗细等,通常可以省略,常用方法如表1-1所示。

表1-1plot命令的参数及其含义

参数含义参数含义参数含义

y黄色.点-实线

m紫色o圆:

虚线

c青色x打叉-.点划线

r红色+加号--破折线

g绿色*星号^向上三角形

b蓝色s正方形<向左三角形

w白色d菱形>向右三角形

k黑色v向下三角形p五角星形

(3)subplot语句

subplot(m,n,i)是分割显示图形窗口命令,它把一个图形窗口分为m行n列共m×n个小

窗口,并指定第i个小窗口为当前窗口。

(4)二维统计分析图

在MATLAB中,二维统计分析图形很多,常见的有条形图、阶梯图、杆图和填充图等,

所采用的函数分别是:

bar(x,y,选项)

stairs(x,y,选项)

stem(x,y,选项)

fill(x1,y1,选项1,x2,y2,选项2,…)

例1-1分别以条形图、阶梯图、杆图和填充图形式绘制曲线y=2sin(x)。

程序如下:

x=0:

pi/10:

2*pi;

y=2*sin(x);

subplot(2,2,1);bar(x,y,'g');

title('bar(x,y,''g'')');axis([0,7,-2,2]);

subplot(2,2,2);stairs(x,y,'b');

title('stairs(x,y,''b'')');axis([0,7,-2,2]);

subplot(2,2,3);stem(x,y,'k');

title('stem(x,y,''k'')');axis([0,7,-2,2]);

subplot(2,2,4);fill(x,y,'y');

title('fill(x,y,''y'')');axis([0,7,-2,2]);

0246

-2

-1

0

1

2

bar(x,y,'g')

0246

-2

-1

0

1

2

stairs(x,y,'b')

0246

-2

-1

0

1

2

stem(x,y,'k')

0246

-2

-1

0

1

2

fill(x,y,'y')

(5)图形保持

holdon/off命令控制是保持原有图形还是刷新原有图形,不带参数的hold命令在两种状

态之间进行切换。

例1-2采用图形保持,在同一坐标内绘制曲线y1=0.2e-0.5xcos(4πx)和y2=2e-0.5xcos(πx)。

《数字信号处理实验》

第3页共39页

程序如下:

x=0:

pi/100:

2*pi;

y1=0.2*exp(-0.5*x).*cos(4*pi*x);

plot(x,y1)

holdon

y2=2*exp(-0.5*x).*cos(pi*x);

plot(x,y2);

holdoff

01234567

-1.5

-1

-0.5

0

0.5

1

1.5

2

(6)绘图修饰命令

title(图形名称)

xlabel(x轴说明)

ylabel(y轴说明)

text(x,y,图形说明)

legend(图例1,图例2,…)

例1-3在0≤x≤2π区间内,绘制曲线y1=2e-0.5x和y2=cos(4πx),并给图形添加图形标注。

程序如下:

x=0:

pi/100:

2*pi;

y1=2*exp(-0.5*x);

y2=cos(4*pi*x);

plot(x,y1,x,y2)

title('xfrom0to2{\pi}');%加图形标题

xlabel('VariableX');%加X轴说明

ylabel('VariableY');%加Y轴说明

text(0.8,1.5,'曲线y1=2e^{-0.5x}');%在指定位置添加图形说明

text(2.5,1.1,'曲线y2=cos(4{\pi}x)');

legend(‘y1’,‘y2’)%加图例

01234567

-1

-0.5

0

0.5

1

1.5

2

xfrom0to2π

VariableX

VariableY

曲线y1=2e-0.5x

曲线y2=cos(4πx)

y1

y2

(7)MATLAB常用信号生成函数:

•★ZEROS

•功能:

产生全零阵列

•调用格式:

X=ZEROS(N)%产生N行N列的全零矩阵

•X=ZEROS(M,N)%产生M行N列的全零矩阵

•★ONES

•功能:

产生全1阵列

•调用格式:

X=ONES(N)%产生N行N列的全1矩阵

•X=ONES(M,N)%产生M行N列的全1矩阵

•★SINC

•功能:

辛格函数

•调用格式:

Y=SINC(X)%

•★RECTPULS

•功能:

产生矩形脉冲信号

•调用格式:

Y=RECTPULS(T)%产生高度为1、宽度为1、关于T=0对称的矩形

脉冲

•Y=RECTPULS(T,W)%产生高度为1、宽度为W、关于T=0对称的矩形脉冲

•★RAND

•功能:

产生伪随机序列

•调用格式:

Y=RAND(1,N)%产生[0,1]上均匀分布的随机序列

•Y=RANDN(1,N)%产生均值为0,方差为1的白噪声序列

•★SAWTOOTH

•功能:

产生周期锯齿波或三角波

•调用格式:

Y=SAWTOOTH(T)%产生幅值为+1,-1,以2为周期的方波

•Y=SAWTOOTH(T,WIDTH)%产生幅值为+1,-1,以WIDTH*2为周期的

方波

•★SQUARE

•功能:

产生方波

•调用格式:

Y=SQUARE(T)%产生幅值为+1,-1,以2为周期的锯齿波

•Y=SQUARE(T,DUTY)%产生幅值为+1,-1,以占空比为DUTY的方波

•例:

t=0:

.0001:

.0625;

•y=SQUARE(2*pi*30*t,80);plot(t,y)%产生一个占空比为80%的方波

•★FLIPLR

•功能:

序列左右翻转

•调用格式:

Y=FLIPLR(X)

•%X=123翻转后321

•456654

•★CUMSUM、SUM

•功能:

计算序列累加

•调用格式:

Y=CUMSUM(X)%向量X元素累加,记录每一次的累加结果,而SUM

只记录最后的结果

五、实验报告

(1)实现单位采样序列δ(n)、单位阶跃序列u(n)、矩形序列()NRn,并用图形显

示。

写出程序及输出图形

单位采样序列δ(n)

n=-5:

10;

y=[zeros(1,5),1,zeros(1,10)];

stem(n,y)

axis([-5,10,0,2]);

单位阶跃序列u(n)

n=-5:

10;

y=[zeros(1,5),ones(1,11)];

stem(n,y,'r')

axis([-5,10,0,2]);

矩形序列()NRn

n=-5:

10;

y=[zeros(1,5),ones(1,5),zeros(1,6)];

plot(n,y)

stem(n,y)

axis([-5,10,0,2]);

title('矩形序列');

(2)实现三角波、方波、锯齿波、Sinc函数,并用图形显示。

写出程序及输出

图形

三角波

fs=10000;

t=-1:

1/fs:

1;

w=0.4;

x=tripuls(t,w);

plot(t,x)

title('三角波');

方波

t=-2*pi:

0.001:

2*pi;

x=square(t);

plot(t,x);

xlabel('t'),ylabel('x=square(t)');

锯齿波

x=0:

0.01:

5;

y=1-mod(x,1);

plot(x,y)

title('锯齿波')

Sinc函数

clear

n=-5:

0.5:

10;

y=sin(0.5*pi*n);

stem(n,y,'g')

title('正弦序列');

 

实验二:

FFT频谱分析及应用

一、实验目的:

1、通过实验加深对FFT的理解;

2、熟悉应用FFT对典型信号进行频谱分析的方法。

二、实验设备:

PC机

MATLAB7.0软件

三、实验内容

使用MATLAB程序实现信号频域特性的分析。

涉及到离散傅立叶变换

(DFT)、快速傅立叶变换(FFT)及信号频率分辨率等知识点。

四、实验原理与方法

在各种信号序列中,有限长序列占重要地位。

对有限长序列可以利用离散傅

立叶变换(DFT)进行分析。

DFT不但可以很好的反映序列的频谱特性,而且易于

用快速算法(FFT)在计算机上进行分析。

有限长序列的DFT是其z变换在单位圆上的等距离采样,或者说是序列傅

立叶的等距离采样,因此可以用于序列的谱分析。

FFT是DFT的一种快速算法,

它是对变换式进行一次次分解,使其成为若干小数据点的组合,从而减少运算量。

在MATLAB信号处理工具箱中的函数fft(x,n),可以用来实现序列的N点

快速傅立叶变换。

经函数fft求得的序列一般是复序列,通常要求出其幅值和相位。

MATLAB中

提供了求复数的幅值和相位的函数:

abs、angle,这些函数一般和fft同时使用。

五、实验报告

(1)模拟信号x(t)=2sin(4πt)+5cos(8πt),以t=0.01n(n=0:

N−1)进行采样,

求:

○1N=40点FFT的幅度频谱,从图中能否观察出信号的2个频谱分量?

N=128;n=0:

N-1;

t=0.01*n;

x=2*sin(4*pi*t)+5*cos(8*pi*t);

k=0:

N/2;w=2*pi/N*k;

X=fft(x,N);

magX=abs(X(1:

N/2+1));

subplot(2,1,1);stem(n,x,'.');title('128点FFT的幅度频谱');

subplot(2,1,2);plot(w/pi,magX);title('FFTN=128');

xlabel('f(unit:

pi)');ylabel('|X|');grid

○2提高采样点数,如N=128,再求该信号的幅度频谱,此时幅度频谱发生了什

么变化?

信号的2个模拟频率和数字频率各为多少?

FFT频谱分析结果与理论上是否一致?

N=40;n=0:

N-1;

t=0.01*n;

x=2*sin(4*pi*t)+5*cos(8*pi*t);

k=0:

N/2;w=2*pi/N*k;

X=fft(x,N);

magX=abs(X(1:

N/2+1));

subplot(2,1,1);stem(n,x,'.');title('40点FFT的幅度频谱');

subplot(2,1,2);plot(w/pi,magX);title('FFTN=40');

xlabel('f(unit:

pi)');ylabel('|X|');grid

(2)一个连续信号含三个频谱分量,经采样得以下序列:

x(n)=sin(2π×0.15n)+cos(2π×(0.15+df)n)+cos(2π×(0.15+2df)n)

○1N=64,df分别为116、1/64,观察其频谱;

○2N=64、128,df为1/64,做128点得FFT,其结果有何不同?

N=64;n=0:

N-1;

df=1/16;x=sin(2*pi*0.15*n)+cos(2*pi*(0.15+df)*n)+cos(2*pi*(0.15+2*df)*n);

k=0:

N/2;w=2*pi/N*k;

X=fft(x,N);

magX=abs(X(1:

N/2+1));

subplot(2,1,1);stem(n,x,'.');title('信号x(n)');

subplot(2,1,2);plot(w/pi,magX);title('频谱N=64');

xlabel('f(unit:

pi)');ylabel('|x|');grid

N=64;n=0:

N-1;

df=1/64;x=sin(2*pi*0.15*n)+cos(2*pi*(0.15+df)*n)+cos(2*pi*(0.15+2*df)*n);

k=0:

N/2;w=2*pi/N*k;

X=fft(x,N);

magX=abs(X(1:

N/2+1));

subplot(2,1,1);stem(n,x,'.');title('信号x(n)');

subplot(2,1,2);plot(w/pi,magX);title('频谱N=64');

xlabel('f(unit:

pi)');ylabel('|x|');grid

N=128;n=0:

N-1;

df=1/64;x=sin(2*pi*0.15*n)+cos(2*pi*(0.15+df)*n)+cos(2*pi*(0.15+2*df)*n);

k=0:

N/2;w=2*pi/N*k;

X=fft(x,N);

magX=abs(X(1:

N/2+1));

subplot(2,1,1);stem(n,x,'.');title('信号x(n)');

subplot(2,1,2);plot(w/pi,magX);title('频谱N=128');

xlabel('f(unit:

pi)');ylabel('|x|');grid

(3)被噪声污染得信号,比较难看出所包含得频率分量,如一个由50Hz和120Hz

正弦信号构成的信号,受零均值随机噪声的干扰,数据采样率为1000Hz,试用

FFT函数来分析其信号频率成分,要求:

○1画出时域波形;○2分析信号功率谱密度。

t=0:

0.001:

0.8;x=sin(2*pi*50*t)+cos(2*pi*120*t);

y=x+1.5*randn(1,length(t));

subplot(3,1,1);plot(t,x);

subplot(3,1,2);plot(t,y);

%title('pressanykey,continue...');

%pause;

Y=fft(y,512);

P=Y.*conj(Y)/512;

f=1000*(0:

255)/512;

subplot(3,1,3);plot(f,P(1:

256));

注:

在MATLAB中,可用函数rand(1,N)产生均值为0,方差为1,长度为

N的高斯随机序列。

九、参考程序

程序1:

N=40;n=0:

N-1;

t=0.01*n;

x=2*sin(4*pi*t)+5*cos(8*pi*t);

k=0:

N/2;w=2*pi/N*k;

X=fft(x,N);

magX=abs(X(1:

N/2+1));

subplot(2,1,1);stem(n,x,'.');title('signalx(n)');

subplot(2,1,2);plot(w/pi,magX);title('FFTN=40');

xlabel('f(unit:

pi)');ylabel('|X|');grid

程序3:

t=0:

0.001:

0.8;x=sin(2*pi*50*t)+cos(2*pi*120*t);

y=x+1.5*randn(1,length(t));

subplot(3,1,1);plot(t,x);

subplot(3,1,2);plot(t,y);

%title('pressanykey,continue...');

%pause;

Y=fft(y,512);

P=Y.*conj(Y)/512;

f=1000*(0:

255)/512;

subplot(3,1,3);plot(f,P(1:

256));

 

实验三:

信号的运算-卷积

一、实验目的:

1、掌握信号的线性卷积运算。

2、掌握信号的循环卷积运算。

3、掌握信号循环卷积计算线性卷积的条件。

二、实验设备:

PC机

MATLAB7.0软件

三、实验内容

学习使用MATLAB7.0软件进行建模。

学习信号的卷积运算的MATLAB实

现。

实现信号的线性卷积运算、应用DFT实现线性卷积运算、验证循环卷积计

算线性卷积的条件。

四、参考实例:

如果信号x(n)=x1(n)⊗x2(n)

利用循环卷积计算,用circonvt函数实现如下:

functiony=circonvt(x1,x2,N)

if(length(x1)>N|length(x2)>N)

error('N必须大于等于x的长度');

end

x1=[x1zeros(1,N-length(x1))];

x2=[x2zeros(1,N-length(x2))];

X1=fft(x1,N);X2=fft(x2,N);X=X1.*X2;

y=ifft(X,N);y=real(y);

如果信号12x(n)=x(n)∗x(n)

利用线性卷积计算,用conv函数实现如下:

y=conv(x1,x2)

五、实验报告

(1)假设卷积下面信号

X(n)=

0≤n<13

0else

h(n)=

10≤n<12

0else

选定循环卷积的长度为N=21。

确定1y(n)=x(n)⊗h(n)的哪些数值与线性卷积2y(n)=x(n)*h(n)

结果中的数值相同。

编写程序代码并输出图形,并分析错误数据的原因,怎样才能使两者数

据相同

n1=0:

1:

12;

x1=0.9.^n1;

h=ones(1,12);

h=[0h];

N=length(x1)+length(h)-1;

n=0:

N-1;

ny=0:

20;

y1=circonvt(x1,h,21);

y2=circonvt(x1,h,N);

x1=[x1zeros(1,N-length(x1))];

h=[hzeros(1,N-length(h))];

X1=fft(x1,N);

H=fft(h,N);

X=X1.*H;

x=ifft(X);

x=real(x);

subplot(2,2,1);stem(n,x1);title('x1(n)');axis([0,33,0,1]);

subplot(2,2,2);stem(n,h);title('h(n)');axis([0,33,0,1]);

subplot(2,2,3);stem(ny,y1,'fill');title('21点循环卷积');axis([0,33,0,8]);

holdon;subplot(2,2,4);stem(n,x);title('线性卷积');axis([0,33,0,8]);

subplot(2,2,3);stem(n,x,'r','--');axis([0,33,0,8]);

holdoff

(2)假设卷积下面信号

X(n)=

0≤n<13

0else

h(n)=

19≤n<21

0else

选定循环卷积的长度为N=21。

确定1y(n)=x(n)⊗h(n)的哪些数值与线性卷积2y(n)=x(n)*h(n)

结果中的数值相同。

编写程序代码并输出图形,怎样才能使两者数据相同。

并分析既然h(n)

自开始就有零点,好点和差点在哪里?

n1=0:

1:

12;

x1=0.9.^n1;

h=ones(1,12);

h=[zeros(1,9)h];

N=length(x1)+length(h)-1;

n=0:

N-1;

ny=0:

20;

y1=circonvt(x1,h,21);

y2=circonvt(x1,h,N);

x1=[x1zeros(1,N-length(x1))];

h=[hzeros(1,N-length(h))];

X1=fft(x1,N);

H=fft(h,N);

X=X1.*H;

x=ifft(X);

x=real(x);

subplot(2,2,1);stem(n,x1);title('x1(n)');axis([0,33,0,1]);

subplot(2,2,2);stem(n,h);title('h(n)');axis([0,33,0,1]);

subplot(2,2,3);stem(ny,y1,'fill');title('21点循环卷积');axis([0,33,0,8]);

holdon;subplot(2,2,4);stem(n,x);title('线性卷积');axis([0,33,0,8]);

subplot(2,2,3);stem(n,x,'r','--');axis([0,33,0,8]);

holdoff

(3)已知系统响应为h(n)=sin(0.2n)+cos(0.5n)0≤n<20,输入为x(n)=exp(0.2n)0≤n<10,

画出用DFT方法实现求系统输出的系统框图,编写用DFT实现的程序代码并输

出图形

functiony=circonvt(x1,x2,N)

if(length(x1)>N||length(x2)>N)

error('N必须大于等于x的长度');

end

x1=[x1zeros(1,N-length(x1))];

x2=[x2zeros(1,N-length(x2))];

X1=fft

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

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2