数字信号处理6

news2024/11/24 14:06:00

昨天简单的复习了一下离散时间信号是什么以及系统的概念、系统要做的工作和系统中几个简单的原件,今天跟着昨天的内容继续学习。

一、离散时间系统的分类:

为什么要对系统进行分类呢,这就像是我们对函数进行分类一样,有些函数有的性质其他函数没有,相同的,也可能后者有着前者没有的性质,所以,我们要对函数进行分类,同理,系统也一样,一个系统如果有特定的性质,那么这个性质是对所有的输入信号都必须满足,如果说,这个性质只对某些输入信号满足,那他就不具有这个性质,所以,就有了一个常用的判断一个系统是否具有某个性质的方法:举反例,如果举得出来,那这个系统就没有这个性质。

其实,系统的分类方法很多,比如说有:

1、静态-动态系统

2、时不变-时变系统

3、线性-非线性系统

4、因果-非因果系统

5、稳定-不稳定系统

其实,这些在字面意思上就已经很清楚了,但是还是稍微的解释一下:

1、静态:在任意时刻n的输出至多依赖于同一时刻的输入样布,和过去、将来的样本无关,那就是静态或者无记忆的,后面我们会有一种递归的概念,下一时刻和上一时刻是相关的,显然,静态系统没有这个概念

2、动态,那这就很好理解了,动态就是系统n时刻的输出完全由区间n-N到n的输入样本决定,就是说他是有记忆的,那就是个动态系统,而如果我们的N是无穷大,那就说系统是无限记忆。

显然,N=0的情况就是静态系统。

3、时不变、时变:这个更好理解了,系统的输入输出特性不随着时间变化,那就是时不变,相反的,那就是时变系统,就这么理解,我们有个输入信号x(n),输入到一个系统中,系统的输出是y(n),假设还有一个和x(n)相同的,但是是提前了k个单位的信号:x(n-k),系统的输出是y(n-k),那么我们就可以比较,如果说,y(n-k)和y(n)的特性是相同的,那这个系统他就是时不变的,但如果这两个的特性不一样了,那这个系统就是时变的。

4、线性、非线性:

这两个是很重要的一个分类方法,其他的分类方法在后面的学习中我看到的很少,或者说,几乎没有。

什么是线性呢,书上说的是满足叠加性的系统就是线性系统,或者你就这么理解:有两个输入信号x1、x2和任意常数a,b,那么这两个信号的叠加性就是这样的:

\tau [ax_1(n)+bx_2(n)]=a\tau[x_1(n)]+b\tau[x_2(n)]

相应的,对于一个弛豫系统,如果说,零输入却是非零输出,那这个系统就是非线性系统。

5、因果、非因果:

其实这个系统他和静态和动态我感觉差不多,因果不就是依赖于当前和过去的输入么,那他和动态就很像,同样的,非因果它之和当前输入信号有关,和之前的输入信号无关,这和静态就很像。

6、稳定、不稳定:

当然,谁都希望自己的程序是稳定运行的,不是三天两头的出毛病,稳定也是这么个意思,就是系统对信号的处理要非常稳定。

这里我把书上对这两种系统进行一个解答:

一个任意的弛豫系统称为有界输入-有界输出(BIBO)稳定,当且仅当,每个有界输入会产生有限的输出,这就相当于区间极大值和极小值问题也就是说,输入信号之后,系统输出的信号值有上下界,那么这个系统就是稳定的,但如果我们输出的是无界的信号,输出也是无界的信号,那这个系统肯定就是不稳定系统。

二、离散时间系统的相连接:

昨天的最后,我们展示了,加法器、、乘法器(常数、信号)、单位延迟元件、单位超前元件等,他们都有着各自的功能,但是,一个复杂的系统往往需要多个元件组合而成,并不是说,我们用最简单的几个元件就能够实现一个复杂系统的功能,所以这就用到了复杂系统元件的相连接。其实这个没啥好讲的,得具体问题具体分析。


好了,把一些基础性的东西讲完了,现在我们来到了很重要的一部分:线性时不变系统(LTI)

一、线性系统的分析:

对于给定的信号,系统的输出这么分析呢,主要有这么两种办法:

1、基于系统输入输出方法的直接求解,

2、输入信号分解,分别处理后再将响应相加。

LTI系统输入输出关系的一般形式是:

y(n)=-\sum_{k=1}^N a_ky(n-1)+\sum_{k=0}^Mb_kx(n-k)

这个后面的差分方程求解中会用到。

第二种的话,就是我们把一个输入信号x(n)给他分解成多个基本信号成分的加权和:

x(n)=\sum_kc_kx_k(n)

当我们对每个信号用系统进行处理之后,再加起来就成了输入是x(n)的输出。

有个很简单的方法,如果说,我们对输入信号的特性并没有做限制,那就把输入信号分解成单位冲激序列的加权和,这样是比较方便的。

那么,怎么样才能把输入信号分解成单位冲激序列的加权和呢,我们得先求解系统对单位采样序列的响应,然后用线性系统的特性来求解对于给定输入信号的输出公式:

那么我们对于一个输入信号x(n):

选取基本的信号:

x_k(n)=\delta(n-k)

其中,

\delta(n-k)=\left\{\begin{matrix} 1 ,n=k\\ 0,n\neq k \end{matrix}\right.

这样的话,将两者相乘:x(n)\delta(n-k)=x(k)\delta(n-k),这样我们就构成了一个只在n=k处值为x(k)以外,其他值都是0的序列,同理的,我们就可以构建多个只在特定位置(如n=k)处有值而其他位置均为0的序列,那么显而易见,我们就通过这个方法实现了对一个线性系统的划分:

x(n)=\sum_{k=-\infty}^{\infty}x(k)\delta(n-k)

我用一个矩阵的形式来表示一下,就是,假设我们有个线性系统,输入信号是x(n)=\left\{1,2,3,2,1\right\},用上述方法给拆分成单位冲激响应之后,就有了如下形式:

\begin{bmatrix} 1 &0 & 0 & 0 &0 \\ 0& 2 & 0 & 0 &0 \\ 0& 0 &3 & 0 &0 \\ 0& 0& 0&2 &0 \\ 0& 0& 0& 0 &1 \end{bmatrix}

这其中,每一行都是一个进行了加权的单位冲激序列,当然,我这就是简单的一写,书上有个更加好的例子,我给稍微改了一下:

有一个有限长序列:

x(n)=\left\{5,2,\underset{\perp }4,0,1,3\right\}

我们看到,在这个序列中,-2,-1,0,2,3这五个数值非零,也就是说,在-2,-1,0,1,3这五个时刻的值是非0的,所以,我们就需要在k=这5个时刻的冲激,最后得到的x(n)就是这样子的:

x(n)=5\delta(n+2)+2\delta(n+1)+4\delta(n)+\delta(n-2)+3\delta(n-3)

其实我更喜欢上面那个用矩阵表示的,因为我觉得那个好看一些。

二、LTI对任意输入的响应的计算:

这里,,就要说到今日最重要的一个内容:卷积和

我们用LTI系统对输入信号x(n)和单位采样冲激h(n)来给出LTI的响应:y(n):

y(n)=\sum_{k=-\infty}^{\infty} x(k)h(n_0-k)

说法就是输入x(n)和冲激响应h(n)的卷积产生输出y(n)。

那么,卷积怎么计算呢?这才是今天的重点内容,但是其实也简单,四个步骤:反转、移位,乘积、求和,直接看图最简单了:

 就用书上的例子吧:

h(n)=\left\{1,\underset{\wedge }2,1,-1\right\},x(n)=\left\{\underset{\wedge }1,2,3,1\right\}

让我们来计算:

1、反转:我们把h给反转了:

 h(k)=\left\{1,\underset{\wedge }2,1,-1\right\}-> h(-k)=\left\{-1,1,\underset{\wedge }2,1\right\}

2、移位、乘积:

n=0的时候,响应序列:

v_0(k)=x(k)h(-k)

依次计算n=-1,1,2,3,4,5的响应序列:

v_{-1}(k) ,v_{1}(k), v_{2}(k), v_{3}(k), v_{4}(k), v_{5}(k)

3、求和:把上述的响应序列全给加起来,我们就得到了LTI系统的计算结果。

后面还会学到一种和卷积很相似的运算,但是两者的意义是不一样的,不能把两者给搞混淆了。

其实,上次听课的时候我就以及了解了卷积的一个知识,但是我还没有学到那里,所以一直在纠结到底写不写他,但是,想了想,时频现在都在用,写写无妨:时域的卷积是想加形式,频率域的卷积是相乘形式,这两者通过转化,实际上是一样的效果。我想简单的写一下卷积,emm,试试看呗,能写出来更好,写不出来的话,numpy也提供了卷积操作np.convolve(x,h)直接用也行。

import numpy as np
x=np.array([1,2,1,-1])
#单位冲激响应
h=np.array([1,2,3,1])
y=np.zeros(len(x)+len(h)-1,dtype=int)
for i in range(len(x)):
    for j in range(len(h)):
        y[i+j]+=x[i]*h[j]
print(y)
print(np.convolve(x,h))

结果是一样的,这我就放心了。

然后,我找了个图,我觉得这个对算法的讲解比较好:

 其实,从这个算法看出来的就是,对h每次提前一个单位。

后面呢这个就可以更好的解释了:

这两个方法其实是等价的:

\left\{\begin{matrix} y(n)=\sum_{k=-\infty}^\infty x(k)h(n-k)\\ \\ y(n)=\sum_{k=-\infty}^\infty x(n-k)h(k) \end{matrix}\right.

上面的图和我的代码就是用的第一种情况,在实际计算机中会方便很多,要是你用手算的话,那就1-4步老老实实的去计算。


好了,卷积的计算就说完了,但是卷积有哪些性质呢?

1、恒等性、位移性:

当我们采用单位采样序列的时候,我们的卷积是这个样子滴:

x(n)\delta(n-k)=y(n-k)=x(n-k)

神奇吧,就相当于提前了k个单位

2、交换律、结合律、分配:

和数学中的交换结合类似,就是符号变了变,之后,我们在使用卷积的时候,通常用的是*:

交换:

x(n)*h(n)=h(n)*x(n)

结合:

y(n)=[x(n)*h(n)]*h_2(n)=x(n)*[h(n)*h_2(n)]

分配:

y(n)=x(n)*[h_1(n)+h_2(n)]=x(n)*h_1(n)+x(n)*h_2(n)

从结合律可以得到一个很有意思的性质:如果我们有L个冲激响应为h_1(n),h_2(n),\cdots,h_L(n)的线性时不变系统级联在一起,那么就有一个等价的LTI系统,其冲激响应等于这些冲激响应的L-1重卷积:

h(n)=h_1(n)*h_2(n)*\cdots*h_L(n)

同样的,我们也可以把这个性质给反转过来,一个LTI系统必然可以分解成为级联的子系统。

相似的,从分配率中也可以得到的一个性质:多个冲激响应的组合可以成为一个大的冲激响应,而一个大的冲激响应是可以转换成若干个小的冲激响应的。


因果LTI系统:

之前我们就讲解了因果系统,这是一个什么样子的系统呢?同一片博客,应该是有印象的,因果系统就是某一时刻的输出依赖之前的输出,n=n_0时刻的输出依赖的是n\leqslant n_0时刻的信号。

emm,就用书上给的例子吧,我也想不出来啥好的自己举例:

有这么一个LTI系统,我们知道其在n=n_0时刻的输出:

y(n_0)=\sum_{k=-\infty}^{\infty}h(k)x(n_0-k)

然后,我们把这个输出转换成两组,一组包含当前和过去的值,另一组则包含将来的值:

y(n_0)=\sum_{k=-\infty}^{\infty}h(k)x(n_0-k)=\sum_{k=0}^{\infty}h(k)x(n_0-k)+\sum_{k=-\infty}^{-1}h(k)x(n_0-k)=[h(0)x(n_0)+h(1)h(n_0-1)+\cdots]+[h(-1)x(n_0+1)+h(-2)h(n_0+2)+\cdots]

 好长一堆是吧,但是仔细看,第一项其实是输人信号的当前和过去的值,第二项则是未来的值,怎么看的?延迟和提前。这就好理解多。

这样的话,我们就发现,要让上面的输出成为只依靠当前和过去,就让h(k)\equiv 0,k<0,这样子,这个输出就满足了因果关系,那么我们就由此得出因果LTI系统:要使一个LTI系统是因果的,其冲激响应在n为负值时必须是0。

这就很简单的出现了俩个序列:

1、因果序列:n小于0时,所有值为0

2、非因果序列:n小于0和n大于0时的值不为0


先解释一个词:BIBO稳定:BIBO稳定是指一个系统在输入和输出都是有限的条件下,系统的输出也是有限的,且系统的输出在无穷远处不会无限增长。简单来说,BIBO稳定性是指系统对输入的响应不会无限增长或震荡,而是在某个范围内有限制地变化。

保持系统稳定的冲要条件:如果一个LTI系统的冲激响应是绝对可加的,那么他是稳定的。

在系统稳定的时候,系统输入端的任何有限长激励,产生的输出实际上是瞬时的,也就是其幅度随着时间衰减并且直至最终消失。实际上,对于一个系统的冲激响应h来说,我们为了系统的稳定,当n趋近于无限的时候,h(n)必须是按着指数衰减的方式衰减到0的。


今天的最后,我们再介绍两个系统,他们很简单,但是明天的复习着重就是他们两个:

有限长冲激响应:Finite Impulse Response (FIR)

无限长冲激响应:Infinite Impulse Response (IIR)

从名字就能看的出来,FIR就是一个有限的区间,这个区间外面的数值他就一定是0,而IIR呢,就没有这个区间的概念了。

一般来说,我们只会关注因果FIR:

y(n)=\sum_{k=0}^{M-1}h(k)x(n-k)

这就像个窗口一样,我们只会关心窗口为M大小的系统,也就是说,我们说FIR系统又这长为M个样本的有限存储空间。

IIR呢:

y(n)=\sum_{k=0}^{\infty}h(k)x(n-k)

我们在这里说的是系统是有无限存储的,显然,这很扯,哪有那么多的存储空间给你干那事去。


好了,今天的复习就到这里了,明天继续,希望明天有足够的时间去把这一章给复习完。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/558925.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

提供免费样机模板素材的好网站推荐

说到原型样机模板&#xff0c;设计师当然并不陌生&#xff0c;因为经常在设计师完成作品后&#xff0c;为了更好地展示作品&#xff0c;通常将设计作品应用于真正的原型样机模板&#xff0c;可以快速在现实场景中展示设计作品&#xff0c;选择好的原型样机模板&#xff0c;操作…

超低功耗SUB 1G无线收发芯片+32位 Soc芯片UM2080F32 无线集抄/测温/养老院人员定位

UM2080F32是一款超低功耗 32 位 IoTP&#xff1a;ARMCortex-M0&#xff0c;64KB Flash&#xff0c;16KB SRAM&#xff0c;Sub-1GHz 射频收发器。工作于200MHz~960MHz 范围内。 UM2080F32 内部还集成了 CAN、12 位 SAR ADC、UART、SPI、QSPI、I2C 等通用外围通讯接口&#xff0c…

网络管理。

简介 网络接口名称规则 ls /etc/sysconfig/network-scripts/ -a NetworkManager服务 网络管理器是一个动态网络的控制器与配置系统&#xff0c;它用于当网络设备可用时保持设备和连接开启并激活默认情况下&#xff0c;CentOs/RHEL 7已安装网络管理器&#xff0c;并处于启用状态…

【Java this关键字】如何使用以及注意点 访问成员变量,访问成员方法,构造方法内调用构造方法

欢迎收看本篇文章 介绍 Java this 关键字的使用以及某些注意点 欢迎oomsday点踩&#xff0c;欢迎其他人点赞 &#x1f60b; Java this关键字 ⭐ this 关键字的作用⭐ this 注意点⭐ this 用法访问成员变量访问成员方法在构造方法内调用构造方法 ⭐ this 关键字的作用 在 Java …

C10K-C10M进阶(高并发的真正理解)

1、一台计算机可以连接的TCP受什么限制&#xff1f; 能打开文件描述符的限制。默认是1024&#xff0c;可以修改。 端口号的限制&#xff0c;65535&#xff0c;因为TCP头部16位的端口号&#xff0c;其中1024以上可以用。如果是客户端&#xff0c;最多可以打开6万多的文件。如果是…

车载测试之车联网OTA安全实践

在SDV的大趋势下&#xff0c;汽车零部件智能化水平不断提高&#xff0c;车辆内部搭载的软件也越来越多。毫无疑问&#xff0c;车辆复杂度的提高必将带来维护上的困难&#xff0c;车企要如何面对更新迭代速度越来越快的软件、固件系统&#xff1f;OTA&#xff08;over the air&a…

论文笔记: Trajectory Clustering: A Partition-and-Group Framework

07 Sigmoid 使用类DBSCAN的思路对轨迹聚类 1 intro 1.1 轨迹聚类 现有的轨迹聚类算法是将相似的轨迹作为一个整体进行聚类&#xff0c;从而发现共同的轨迹。 但是这样容易错过一些共同的子轨迹&#xff08;sub-trajectories&#xff09;。而在实际中&#xff0c;当我们对特…

运行 100 万个并发任务需要多少内存?

在这篇博文中&#xff0c;我深入研究了 Rust、Go、Java、C#、Python、Node.js 和 Elixir 等流行语言在异步和多线程编程之间的内存消耗比较。 前段时间&#xff0c;我不得不比较一些旨在处理大量网络连接的计算机程序的性能。我看到这些程序的内存消耗存在巨大差异&#xff0c…

【Atlas200】华为AIPP配置文件使用

目录 AIPP介绍图像处理顺序例子&#xff1a;YUV420SP_U8转BGR格式归一化配置对应公式crop及padding功能配置生效AIPP转换模板 AIPP介绍 华为的AIPP&#xff08;AI Preprocessing&#xff09;是一种面向AI应用的图像预处理技术&#xff0c;旨在提高AI应用的效率和精度。AIPP支持…

C语言深度解析--数组

目录 一维数组的创建与初始化 一维数组的创建&#xff1a; 一维数组的初始化&#xff1a; 一维数组的使用&#xff1a; 一维数组在内存中的存储&#xff1a; 二维数组的创建与初始化 二维数组的创建&#xff1a; 二维数组的初始化&#xff1a; 二维数组的使用&#xf…

是面试官放水,还是公司太缺人了?华为原来这么容易就进了...

华为是大企业&#xff0c;是不是很难进去啊&#xff1f;” “在华为做软件测试&#xff0c;能得到很好的发展吗&#xff1f; 一进去就有9.5K&#xff0c;其实也没有想的那么难” 直到现在&#xff0c;心情都还是无比激动&#xff01; 本人211非科班&#xff0c;之前在字节和腾…

以“智”提质丨信创呼叫

随着人工智能、大数据、云计算等新兴技术飞速发展&#xff0c;呼叫中心、全媒体智能客服等现已被广泛应用于多个行业领域。其中&#xff0c;呼叫中心作为政企对外服务的重要窗口&#xff0c;已从“传统电话营销”发展到“智能呼叫中心”阶段&#xff0c;以客户服务为核心&#…

Windows下Elasticsearch下载安装

Windows下Elasticsearch下载安装 最近搭一个语义搜索web需要用到es。 1.下载 下载地址&#xff1a;官网下载地址 下载zip格式解压就行&#xff0c;这里我下载的是8.7.1 1.1解压启动 解压之后&#xff0c;进入elasticsearch的bin目录&#xff0c;通过点击elasticsearch.ba…

0基础学习VR全景平台篇第28章:场景管理—遮罩功能

本期为大家带来蛙色VR平台&#xff0c;场景管理模块-遮罩功能&#xff01; 功能位置示意 一、本功能将用在哪里&#xff1f; 遮罩分为两种&#xff0c;分别是地面遮罩和天空遮罩。 地面遮罩位于全景图底部的正中间&#xff0c;天空遮罩位于全景图顶部的正中间。 遮罩一方面可…

已解决python使用pymysql向mysql数据库插入数据报错pymysql.err.DataError: (1366, ‘‘)

已解决&#xff0c;在python代码是使用pymysql向mysql数据库插入数据时报错pymysql.err.DataError: (1366, ) 问题描述 我从某个网页上抓取并解析了一段html代码&#xff0c;然后将html代码转为utf-8格式&#xff0c;之后将html代码作为数据表的一个属性存入mysql数据库中&…

代码签名证书,保护应用程序安全性

在现代IT环境中&#xff0c;有大量不同的方式可以用来确保应用程序的安全性。其中一个就是从源头开始&#xff0c;让应用程序开发者能够对他们的代码进行数字签名&#xff0c;从而确保给定应用程序的完整性和真实性。 一直以来&#xff0c;认证机构安理会&#xff08;CASC&…

2023年必备的10款交互设计软件

交互设计可以帮助明确产品需求和功能、进行用户测试和获取反馈、减少开发成本、促进团队合作&#xff0c;并在展示和推销产品时起到关键作用。通过有效的产品交互设计&#xff0c;可以提高产品的质量、用户体验和市场竞争力。 什么是产品交互设计&#xff1f; 产品交互设计是…

Linux查看磁盘利用率(iostat)

使用iostat命令可以查看磁盘的负载情况。iostat命令可以显示磁盘的I/O统计信息&#xff0c;包括磁盘的读写速度、I/O请求队列长度、CPU利用率等。 参数 Device&#xff1a;磁盘分区的名称。rrqm/s&#xff1a;每秒钟合并的读请求。wrqm/s&#xff1a;每秒钟合并的写请求。r/s…

11-FastDFS文件服务器 和 Nginx

1、什么是FastDFS 1、开源的轻量级分布式文件系统,用于解决大数据量存储和负载均衡等问题。 2、优点: 支持HTTP协议传输文件(结合Nginx); 对文件内容做Hash处理,节约磁盘空间; 支持负载均衡、整体性能较佳。 3、FastDFS的二个角色:跟踪服务器(Tracker)、存储服务器…

StringBuffer与StringBuilder的区别

&#x1f3c6;今日学习目标&#xff1a; &#x1f340;StringBuffer与StringBuilder的区别 ✅创作者&#xff1a;林在闪闪发光 ⏰预计时间&#xff1a;30分钟 &#x1f389;个人主页&#xff1a;林在闪闪发光的个人主页 &#x1f341;林在闪闪发光的个人社区&#xff0c;欢迎你…