数字信号处理 实验一 离散时间信号分析(基于matlab的离散信号生成、运算、采样与频谱运算)

本文档详细介绍了使用MATLAB进行离散时间信号的生成、卷积运算和傅里叶变换,以及采样定理的验证。通过绘制序列图像、计算序列卷积和频谱分析,探讨了序列运算和信号处理的基本方法。实验中涉及到单位脉冲序列、阶跃序列、矩形序列、正弦信号及其相关信号,以及不同采样频率下正弦信号的频谱失真问题。
摘要由CSDN通过智能技术生成

本实验涉及基本离散时间信号的生成,卷积运算,傅里叶变换及采样定理的证明。全部程序与实验报告点此下载

实验原理

1、序列的概念

序列是本实验要研究的离散信号简称。一个在时域上连续的信号,在其定义域内的每一个时间都有一个值对应,对这个连续的信号进行采样,每间隔T取一个幅值,如此一来便得到了一个不连续的,只在这些采样的点有值的信号,这种信号即为离散时间信号。
常用的序列有单位脉冲序列(单位抽样序列)、单位阶跃序列、矩形序列等。

2、卷积运算

序列的常用运算包括移位、反褶、和、积、标乘、累加、差分运算等。
通过这些基本的运算,可以用来进行序列之间的卷积运算。卷积计算公式如下:
在这里插入图片描述上式的运算关系称为卷积运算,式中*代表两个序列卷积运算。两个序列的卷积是一个序列与另一个序列反褶后逐次移位乘积之和,故称为离散卷积,也称两序列的线性卷积。其计算的过程包括以下4个步骤。
(1)反褶:先将x(n)和h(n)的变量n换成m,变成x(m)和h(m),再将h(m)以纵轴为对称轴反褶成h(-m)。
(2)移位:将h(-m)移位n,得h(n-m)。此处要注意n的正负值判断移位方向。
(3)相乘:将h(n-m)和x(m)的对应点值相乘。
(4)求和:将以上所有对应点的乘积累加起来,即得y(n)。

实验任务与方法

1、离散信号的产生

在这里插入图片描述

  • 冲激序列即为除了n0处都为令,即n=n0时值为1,不等时为0。
  • 阶跃序列即为在n≥n0取值为1,n<n0时取值为0。
  • 矩形序列即为从n0开始,N个单位取值为1,其余位置取值为0,即n-n0≥0且((n0+N-1)-n)≥0的情况下取值为1.
  • 在matlab中绘制正弦信号,首先确定其信号t的范围以及绘制点间隔,例如t=0:1:10,即为从0至10,每间隔1单位绘制一个点。之后将信号函数使用matlab语言表示出来,用plot或stem函数级即可绘制处该信号图像。

2、序列运算

在这里插入图片描述

3、采样定理

在这里插入图片描述使用matlab绘制一个频谱图主要分为以下几步:

  1. 确定时域信号;
  2. 确定采样频率各采样点数,采样点数除采样频率可得采样部分的时间。采样频率选择需要满足采样定理,采样点数根据要采样的时间自行确定。
  3. 使用fft函数对信号进行快速傅里叶变换;
  4. 使用abs函数获得傅里叶变换后的幅值;
  5. 根据采样频率、点数、时域信号的时间序列求出频率序列。
  6. 使用plot函数绘制幅值随频率变换的图像。

以对x(t)=sin(t)的频谱绘制为例研究采样定理。按照采样定理,fs≥2f,fs应大于等于1/π

程序与结果

1 离散时间信号(序列)的产生在这里插入图片描述

1.1 常用序列的绘制

绘制单位脉冲序列,单位阶跃序列,矩形序列。
我写了三个函数分别用于生成这三种函数。

function x = impseq(n0,n)  %冲激信号函数
x = [(n-n0)==0];

function [x] = stepseq(n0,n)  %阶跃
x = [(n-n0)>=0];

function [x] = rectseq(n0,n,N)     %矩形
x = [(n-n0)>=0&((n0+N-1)-n)>=0];


figure('name','几种常用序列');
n=[-20:20];
x1=impseq(0,n);
subplot(311);
stem(n,x1);
title('单位脉冲序列');

x2=stepseq(0,n);
subplot(312);
stem(n,x2);
title('单位阶跃序列');

x3=rectseq(0,n,5);
subplot(313);
stem(n,x3);
title('矩形序列');

结果如图
在这里插入图片描述

1.2 正弦信号及其相关信号绘制

因为matlab中内置有正弦函数和指数函数,因此绘制正弦相关函数相对容易些,定义t的取值后,输入几种正弦信号,正弦衰减信号及谐波信号函数公式,使用stem函数或plot函数绘制其图像即可

t=-10:0.15:10;
x4=2*sin(pi/5*t+pi/3);
x5=2*cos(t-pi/3);
x6=2*sin(3*t).*cos(2*t-pi/3);
figure('name','三角函数');   %三个正余弦函数
subplot(2,2,1);
plot(t,x4,'-r*',t,x5,'-g*',t,x6,'-b*');
legend('2*sin(pi/5*t+pi/3)','2*cos(t-pi/3)','2*sin(3*t).*cos(2*t-pi/3)');
subplot(2,2,2);
stem(t,x4);
xlabel('2*sin(pi/5*t+pi/3)');
subplot(2,2,3);
stem(t,x5);
xlabel('2*cos(t-pi/3)');
subplot(2,2,4);
stem(t,x6);
xlabel('2*sin(3*t).*cos(2*t-pi/3)');

figure('name','正弦衰减')    %正弦衰减信号
t=-20:0.1:10;
x7=2*exp(-0.5*t).*sin(2*pi*2*t);
subplot(211);
stem(t,x7);
subplot(212);
plot(t,x7);

figure('name','谐波信号')   %谐波信号
t=-5:0.04:5;
x8=sin(2*pi*2*t)+0.5*sin(2*pi*2*2*t)+0.2*sin(2*pi*3*2*t);
subplot(211);
stem(t,x8);
subplot(212);
plot(t,x8);

结果输出:
正余弦信号:
正余弦信号正余弦衰减信号:
在这里插入图片描述
谐波信号:

在这里插入图片描述

2 序列运算

在这里插入图片描述

2.1 信号生成与卷积计算

使用前面的脉冲序列生成函数生成,通过基本运算生成两个信号,使用conv函数进行卷积计算,并通过序列长度计算卷积后的序列长度及起始位置。此题中应用序列长度应为5+4-1=8,起始位置为0+0=0。

a=5;          
n=0:a-1;
x=impseq(0,n)+2*impseq(1,n)+3*impseq(2,n)+4*impseq(3,n)+5*impseq(4,n);
b=4;
n=0:b-1;
h=impseq(0,n)+2*impseq(1,n)+impseq(2,n)+2*impseq(3,n);
y = conv(x,h);
n=0:a+b-1-1;
stem(n,y);

运行结果:
在这里插入图片描述

2.2卷积函数

对于一个卷积运算,我们需要获得其卷积后信号的时间序列及幅值。而matlab自带的conv函数只能获得幅值的序列,而需要自行计算时间序列。该程序可绘制两个需要卷积的信号图像及卷积后的图像,两个信号可自行输入。

function [n,y]=cov2(x1,n1,x2,n2) 
k1=n1(1)+n2(1);
k2=length(x1)+length(x2)-2;
y=conv(x1,x2);          
n=k1:k1+k2;            
subplot(311);
stem(n1,x1);
subplot(312);
stem(n2,x2);
subplot(313);
stem(n,y);

x1=input('第一个序列:x(n)=');          
n1=input('第一个序列长度(如0:10)=');
x2=input('第二个序列2:h(n)=');
n2=input('第二个序列长度(如0:10)=');
[n,y]=cov2(x1,n1,x2,n2);
stem(n,y);

运行结果:
在这里插入图片描述
在这里插入图片描述

频谱绘制及采样定理

在这里插入图片描述以对x(t)=sin(t)的频谱绘制为例研究采样定理。按照采样定理,fs≥2f,fs应大于等于1/π。分别以0.1,1/2π,1/π,1,10为采样频率绘制频谱

t=-4*pi:0.0001:4*pi;
x=sin(t);
subplot(611);
plot(t,x);
title('原图像');

fs=0.1;N=64;   
n=0:N-1;t=n/fs;    
x=sin(t);
y=fft(x,N);   
mag=abs(y);      
f=n*fs/N;     
subplot(612),plot(f,mag);   
title('fs=0.1');

fs=1/(2*pi);N=128;  
n=0:N-1;t=n/fs;    
x=sin(t);
y=fft(x,N);    
mag=abs(y);      
f=n*fs/N;     
subplot(613),plot(f,mag); 
title('fs=1/2π');

fs=1/pi;N=256;  
n=0:N-1;t=n/fs;    
x=sin(t);
y=fft(x,N);    
mag=abs(y);      
f=n*fs/N;     
subplot(614),plot(f,mag); 
title('fs=1/π');

fs=1;N=256;  
n=0:N-1;t=n/fs;    
x=sin(t);
y=fft(x,N);    
mag=abs(y);      
f=n*fs/N;     
subplot(615),plot(f,mag); 
title('fs=1');

fs=10;N=256;  
n=0:N-1;t=n/fs;    
x=sin(t);
y=fft(x,N);    
mag=abs(y);      
f=n*fs/N;     
subplot(616),plot(f,mag);
title('fs=10');

运行结果:
在这里插入图片描述从图中可看到,抽样频率小于1/π时,频谱图都出现了一定程度的失真,而在抽样频率等于1/π时,频谱图也有失真。这表示在对正弦信号抽样时不能完全按照2f进行采样。

讨论

本实验使用matlab软件实现了几种常用序列,正弦及其相关序列的生成,计算和绘制,并编写了了序列卷积运算的程序,在最后通过绘制正弦信号在不同抽样频率下的频谱图研究抽样定理,得出正弦信号的抽样不能完全按照抽样定理进行抽样,要根据不同情况具体分析。
除了本实验生成的集中序列外,我们还可以用matlab中的square函数生成周期方波信号,使用sawtooth函数生成三角波信号,甚至可以使用rand函数生成一个随机信号便于我们进行研究。这也体现出了matlab编程相比c编程在数字信号处理领域更加简洁方便的优势。虽然matlab编程语言以c编程语言为基础,但是因为matlab中内置函数的存在,很多工作不需要像c编程中一样自己编写,而只需要引用一个函数即可用一行代码完成。此外,它可以用一行程序完成rgb图像和灰度图像的转换,可以使用函数快速完成线形空间滤波,和图像增强,它有着方便制作的gui用户界面。因此除了数字信号处理,在图像处理,人机交互等领域,matlab也发挥着重要作用。
全部程序与实验报告点此下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

feiGeorge

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值