《MATLAB信号处理超级学习手册》——2.5 离散时间信号中的运算

简介:

本节书摘来自异步社区《MATLAB信号处理超级学习手册》一书中的第2章,第2.5节,作者:MATLAB技术联盟 , 史洁玉著,更多章节内容可以访问云栖社区“异步社区”公众号查看

2.5 离散时间信号中的运算

MATLAB信号处理超级学习手册
2.5.1 离散时间系统响应
离散时间LTI系统可用线性常系数差分方程来描述,即:

screenshot

其中,a i(i=0,1,…,N)和b j(j=0,1,…,M)为实常数

MATLAB中函数filter可对式(2-24)的差分方程在指定时间范围内的输入序列所产生的响应进行求解。函数filter的语句格式为

y=filter(b,a,x)

其中,x为输入的离散序列;y为输出的离散序列,y的长度与x的长度一样;b与a分别为差分方程右端与左端的系数向量。
screenshot

运行程序如下:

a=[1 -0.25 0.5];
b=[1 1];
t=0:20;
x=(1/2).^t;
y=filter(b,a,x)
subplot(2,1,1)
stem(t,x)
title('输入序列')
grid on
xlabel('n'); ylabel('h(n)');
subplot(2,1,2)
stem(t,y)
xlabel('n'); ylabel('h(n)');
title('响应序列')
grid on
AI 代码解读

运行结果如图2-27所示。

screenshot

2.5.2 离散时间系统的冲激响应和阶跃响应
在MATLAB中,求解离散时间系统单位冲激响应,可应用信号处理工具箱提供的函数impz,其调用形式为:

h=impz(b, a, k)

式中,a,b分别是差分方程左、右端的系数向量,k表示输出序列的取值范围(可省略),h就是系统单位冲激响应(如果没有输出参数,直接调用impz(b, a, k),则MATLAB将会在当前绘图窗口中自动画出系统单位冲激响应的图形)。

对于MATLAB 6.x及以上版本,在信号处理工具箱中还提供了求解离散时间系统单位阶跃响应的函数stepz,其调用形式为:

h=stepz(b,a,k)

式中参数与impz函数相同,如果没有输出参数,直接调用stepz(b,a,k),则MATLAB将会在当前绘图窗口中自动画出系统单位阶跃响应的图形。

【例2-28】用impz函数求下列离散时间系统的单位冲激响应,并与理论值进行比较:

y(k)+3y(k-1)+2y(k-2)=f(k)。

运行程序如下:

k=0:10;
a=[1 3 2];
b=[1];
h=impz(b,a,k);
subplot(2,1,1);stem(k,h);
xlabel('n'); ylabel('h(n)');
title('单位冲激响应的近似值');
grid on;
hk=-(-1).^k+2*(-2).^k;
subplot(2,1,2);stem(k,h);
xlabel('n'); ylabel('h(n)');
title('单位冲激响应的理论值');
grid on;
AI 代码解读

运行结果如图2-28所示。

screenshot

2.5.3 离散时间信号的卷积和运算
卷积是用来计算系统零状态响应的有力工具。例如:对于连续时间系统,有y(t)=x(t)h(t),其中h(t)为系统传递函数(即冲激响应);对于离散时间系统,有y(n)=x(n)h(n),其中h(n)为系统传递函数(即单位冲激响应)。

由于系统的零状态响应是激励与系统的单位取样响应的卷积,因此卷积运算在离散时间信号处理领域被广泛应用。离散时间信号的卷积定义为:

screenshot

可见,离散时间信号的卷积运算是求和运算,因而常称为“卷积和”。

MATLAB信号处理工具箱提供了一个计算两个离散序列卷积和的函数,其调用形式为:

c=conv(a,b)

式中,a、b分别为待卷积的两序列的向量表示,c是卷积结果。向量c的长度为向量a、b的长度之和减1,即length(c)=length(a)+length(b)1。事实上,研究conv.m函数的源代码可知,conv函数其实就是利用前面介绍过的函数来实现的。

【例2-29】已知序列x[n]={1,2,3,4;n=0,1,2,3},y[n]={1,1,1,1;n=0,1,2,3,4};利用MATLAB计算x[n]*y[n]并画出卷积结果。

运行程序如下:

x=[1,2,3,4];
y=[1,1,1,1];
z=conv(x,y)
subplot(3,1,1);
stem(0:length(x)-1,x);
ylabel('x[n]'); xlabel('n');
grid on
subplot(3,1,2);
stem(0:length(y)-1,y);
ylabel('y[n]'); xlabel('n');
grid on
subplot(3,1,3);
stem(0:length(z)-1,z);
ylabel('z[n]'); xlabel('n');
grid on
AI 代码解读

运行结果如下:

z =
    1     3     6    10     9     7     4
AI 代码解读

运行结果如图2-29所示。

screenshot

【例2-30】已知某系统的单位取样响应为hleft( n right) = 0.8^n left[ {uleft( n right) - uleft( {n - 8} right)} right] ,试用MATLAB求当激励信号为x(n) = u(n) - u(n - 4) 时,系统的零状态响应。

运行程序如下:

clear
nx=-1:5; 
nh=-2:10; 
x=uDT(nx)-uDT(nx-4);
h=0.8.^nh.*(uDT(nh)-uDT(nh-8));
y=conv(x,h);
ny1=nx(1)+nh(1);          
ny=ny1+(0:(length(nx)+length(nh)-2));
subplot(311)
stem(nx,x,'fill'),grid on
xlabel('n'),ylabel('x(n)');
title('x(n)')
axis([-4 16 0 3])
subplot(312)
stem(nh,h','fill'),grid on
xlabel('n');ylabel('h(n)');
title('h(n)')
axis([-4 16 0 3])
subplot(313)
stem(ny,y,'fill'),grid on
xlabel('n');ylabel('y(n)');
title('y(n)=x(n)*h(n)')
axis([-4 16 0 3])
AI 代码解读

运行结果如图2-30所示。

screenshot

程序中产生单位阶跃子程序如下:

function y=uDT(n)
y=n>=0;
%当参数为非负时输出1
AI 代码解读
目录
打赏
0
0
0
0
1819
分享
相关文章
基于GRU网络的MQAM调制信号检测算法matlab仿真,对比LSTM
本研究基于MATLAB 2022a,使用GRU网络对QAM调制信号进行检测。QAM是一种高效调制技术,广泛应用于现代通信系统。传统方法在复杂环境下性能下降,而GRU通过门控机制有效提取时间序列特征,实现16QAM、32QAM、64QAM、128QAM的准确检测。仿真结果显示,GRU在低SNR下表现优异,且训练速度快,参数少。核心程序包括模型预测、误检率和漏检率计算,并绘制准确率图。
97 65
基于GRU网络的MQAM调制信号检测算法matlab仿真,对比LSTM
基于 MATLAB的GUI信号处理界面设计 源码+运行截图
基于 MATLAB的GUI信号处理界面设计 源码+运行截图
206 2
基于FPGA的信号DM编解码实现,包含testbench和matlab对比仿真
本项目展示了DM编解码算法的实现与测试结果。FPGA测试结果显示为T1,Matlab仿真结果为T2。使用软件版本为Matlab 2022a和Vivado 2019.2。核心程序包含详细中文注释和操作视频。DM编解码通过比较信号样本差值进行编码,适用于音频等低频信号处理。硬件结构包括编码器(采样器、减法器、比较器)和解码器(解码器、积分器)。
一维信号的小波变换与重构算法matlab仿真
本程序使用MATLAB2022A实现一维信号的小波变换与重构,对正弦测试信号进行小波分解和重构,并计算重构信号与原信号的误差。核心步骤包括:绘制分解系数图像、上抽取与滤波重构、对比原始与重构信号及误差分析。小波变换通过多分辨率分析捕捉信号的局部特征,适用于非平稳信号处理,在信号去噪、压缩等领域有广泛应用。
MATLAB学习之旅:数据统计与分析
在MATLAB中,我们掌握了数据导入、处理及插值拟合等基础技能。接下来,我们将深入数据统计与分析领域,学习描述性统计量(如均值、标准差)、数据分布分析(如直方图、正态概率图)、数据排序与排名、数据匹配查找以及数据可视化(如箱线图、散点图)。这些工具帮助我们挖掘数据中的有价值信息,揭示数据的奥秘,为后续数据分析打下坚实基础。
MATLAB学习之旅:数据建模与仿真应用
在MATLAB的学习中,我们已掌握基础操作、数据处理与统计分析。接下来将进入数据建模与仿真应用阶段,学习如何构建和验证现实世界的模型。我们将从定义模型结构和参数入手,涵盖线性回归、动态系统建模等内容,并通过仿真和实际数据对比评估模型的准确性和可靠性。最终,这些技能将帮助我们在科学研究和工程应用中解决复杂问题。
基于梯度流的扩散映射卡尔曼滤波算法的信号预处理matlab仿真
本项目基于梯度流的扩散映射卡尔曼滤波算法(GFDMKF),用于信号预处理的MATLAB仿真。通过设置不同噪声大小,测试滤波效果。核心代码实现数据加载、含噪信号生成、扩散映射构建及DMK滤波器应用,并展示含噪与无噪信号及滤波结果的对比图。GFDMKF结合非线性流形学习与经典卡尔曼滤波,提高对非线性高维信号的滤波和跟踪性能。 **主要步骤:** 1. 加载数据并生成含噪测量值。 2. 使用扩散映射捕捉低维流形结构。 3. 应用DMK滤波器进行状态估计。 4. 绘制不同SNR下的轨迹示例。
基于离散差分法的复杂微分方程组求解matlab数值仿真
本程序使用离散差分法求解复杂微分方程组,将连续微分方程转化为差分方程,采用一阶显式时间格式和一阶偏心空间格式。经MATLAB2022a测试验证有效。
基于Lipschitz李式指数的随机信号特征识别和故障检测matlab仿真
本程序基于Lipschitz李式指数进行随机信号特征识别和故障检测。使用MATLAB2013B版本运行,核心功能包括计算Lipschitz指数、绘制指数曲线、检测故障信号并标记异常区域。Lipschitz指数能够反映信号的局部动态行为,适用于机械振动分析等领域的故障诊断。
基于离散差分法的复杂微分方程组求解matlab数值仿真
本程序基于离散差分法求解复杂微分方程组,将连续微分方程转化为差分方程,采用一阶显式时间格式和一阶偏心空间格式。在MATLAB2022a上测试通过,展示了运行结果。

热门文章

最新文章