《数字信号处理》学习01-离散时间信号与序列的卷积和运算

news2024/9/22 3:38:28

目录

一,信号

二,序列的运算 

1,卷积和 

2,matlab实现 


相关的电子书籍请到这篇文章所在的专栏,并通过夸克网盘链接下载。

很多简单的知识点我就不再赘述了,接下来就着重记录我学习过程中遇到的较难理解且容易忘记的知识点,如果想要再详细些的,可以在评论区留言。

这篇文章主要是用于整理我在看书过程中自己做的一些记忆方法(个人记忆方法,因人而异,仅供参考)

一,信号

1,信号是信息的载体,也是信息的物理表现形式。例如,古时的烽火就是一个信号,一看到烽火这个信号,士兵知道有敌人来犯的信息,就可以立马采取行动,保护自己的国家。

2,什么是离散时间信号?离散时间信号就是该信号在时间变化范围是不连续的,离散的。

例如下图 :

可以看到,离散时间信号中对应的序号(时刻)的序号值都是独立的,没有与其它的序号值连一起,它们就组成了序列。为了方便,后面都用序列来表示离散时间信号。

与离散时间信号相对的就是连续时间信号,如下图:

二,序列的运算 


3,序列的六个基本运算:时间尺度变换,翻褶,移位,和,积,卷积和。

为了能够记住这六个运算的名字,我将每个运算前面的第一个字取出来,组成以下的口诀:时翻移,和积卷。

【时常翻转移动,和鸡圈】

前三个运算只有一个序列进行运算,后面三个运算需要有两个序列一起参与运算。因为前五个比较简单(用数学的基本运算就可以做出来),所以在这里就不赘述它们的运算(如果有需要的请在评论区留言,我后面再补上去)。

【需要注意】:

当离散时间变量n前面有系数k: x(kn) ,在移位之前,需要把k提到n和N的前面,才能够得到正确的表达式: x(k(n+N))

例如,有一个周期性序列x(3n),现在要将该序列向左移动5位【左加右减,上加下减】,写出移位后的序列表达式:x(3(n+5))=x(3n+15)。

同理可以通过表达式x(3n+15)知道该周期性序列的移动方向和位数:x(3n+15)=x(3(n+5))→序列向左移动5位。

1,卷积和 

接下来一起学习第一个知识点“卷积和”,这三个字中每一个分别代表着对应的运算:

  • 卷:翻褶+移位
  • 积:积运算
  • 和:和运算

概念和公式如下

可以看到,卷字不愧是”卷“,一个字就要代表两种运算。

在具体的运算中,如果两个序列没有用到卷积和,那么这两个序列的形状都不会发生太大变化,但如果两个序列之间是卷积和的运算,那么其中一个序列 x(n) 还是原来的序列,只是变量换成了m(既 x (m) ),另外一个序列 h(m) 就要开始卷了!开始卷的时候,h(m) 翻身(翻褶)有了个家(加上另外一个变量n),变成了 h(n−m) 。

卷积和就是要先卷,再积,最后求和。

卷完之后,将这两个序列乘在一起: x(m)×h(n−m) ,之后再求和。

因为序列x(n)和h(n)的定义域没给,所以这两个序列卷积和之后的结果y(n)的定义域默认为负无穷到正无穷(既n属于[-∞,+∞]),在求和的时候m也需要在 [−∞,+∞] 这个区间内:\sum_{m=−∞}^{ m=+∞}x(m)×h(n−m)=y(n)

如果觉得前面的太长,y(n)的卷积和表达式也可以用 x(n)∗h(n)=y(n) 来表示。

在教材中,卷积和的具体运算如下描述↓

(有需要教材的请在评论区留言或者是私信我,我之后在文章补发个链接)

在列出卷积和公式的时候提到“因为序列x(n)和y(n)的定义域没给,所以它们两个卷积和之后的结果序列y(n)的定义域可以是负无穷到正无穷”。如果序列x(n)和y(n)的定义域给出来,例如:

x(n)的定义域为 [a1,b1] ,y(n)的定义域为 [a2,b2] ,那么这两个序列卷积和之后的结果序列y(n)的定义域就是这两个序列的定义域的起始位置和终止位置对应相加,即:

n∈[a1+a2,b1+b2]

表示:

  • y(n)的第一个非零点在n=a1+a2的位置,最后一个非零点在n=b1+b2的位置。

如果 n<a1+a2 或者是 n>b1+b2 ,那么y(n)的序列值一定是0,不需要再一个一个的去计算并求和。

如果 n∈[a1+a2,b1+b2] ,那么y(n)的序列值可能是0也可能是其他整数Z。

当n的值确定好之后(从a1+a2 一直取到 b1+b2),这个时候不可以直接使用卷积和公式:还需要确定m的取值范围。

从公式 \sum_{m=−∞}^{ m=+∞}x(m)×h(n−m)=y(n)可以看出,m的值与卷王序列h有关(h序列同时包含了n和m两个变量)。

公式里面的序列h(m)一直在变化:翻褶和移位(即 h(n−m) )。

当n取不同的值时,对应的y(n) 求和范围也会跟着h(n−m) 变,具体怎么变?请看下篇文章解说。

咳,防止看到这里的阅读者犯困 ,开个玩笑。

现在继续来一起探究单个y(n)怎么跟着h(n-m)变化:

1,h(n-m) 可以写成 h( -(m-n) )

2,当n=a1+a2时(a1+a2∈[a1+a2,b1+b2]), y(n)=y(a1+a2)

3,h(n-m)=h(-(m-n))=h(−(m−(a1+a2)))

  • 当n>0,既a1+a2>0时,h(-m)序列向右移 a1+a2 位。因为a1+a2>0时,和前面的负号没有抵消,变量m后面加上的数还是负数(既h(-(m-C))),根据“左加右减”,可以知道对应的序列是向右移位;
  • 当n<0,既a1+a2<0时,h(-m)序列向左移 a1+a2 位。因为a1+a2<0时,和前面的负号相互抵消,变量m后面加上的数是个正数(既h(-(m+C))),根据“左加右减”,可以知道对应的序列是向左移位;
  • 当n=0,既a1+a2=0时,h(-(m-0))=h(-m+0)=h(-m),只有翻褶,没有移位。

[有更快速的判断移位方向的方法:

因为m前面是负号,既m<0,所以移位的方向就是n的所在的方向,

  • n>0,n位于x轴的右边,序列h(-m)则向右移位n位变成h(n-m)];
  • n<0时,n位于x轴的左边,序列h(-m)则向左移位n位变成h(n-m)]。

4,确定m的取值范围:

之前有提到m的取值范围与卷王序列h(m)有关

  • 当序列h(m)经过翻褶,变成h(-m)之后向右移动a1+a2位时,本来h(m)的定义域(既m的取值范围)为[a2,b2],序列向右移动后m的取值范围也会跟着变,因为越往右边,数值越来越大,所以此时h(n-m)中的m∈[a2+(a1+a2),b2+(a1+a2)],这个时候就可以使用卷积和公式: \sum_{m=a1+(a1+a2)}^{m=b1+(a1+a2)}x(m)×h(a1+a2−m)=y(a1+a2) ;
  • 当序列h(m)经过翻褶,变成h(-m)之后向左移动a1+a2位时,本来h(m)的定义域(既m的取值范围)为[a2,b2],序列向左移动后m的取值范围也会跟着变,因为越往左边,数值越来越小,所以此时h(n-m)中的 m∈[a2-(a1+a2),b2-(a1+a2)],这个时候就可以使用卷积和公式: \sum_{m=b1-(a1+a2)}^{m=a1-(a1+a2)}x(m)×h(a1+a2−m)=y(a1+a2)

通过上述的分析之后,开始上题:

思路:

  1. 列出卷积和公式:\sum_{m=−∞}^{ m=+∞}x(m)×h(n−m)=y(n)
  2. 确定卷积和序列y(n)的定义域,n∈[-3+(-1),3+4]=[-4,7];
  3. y(n)的第一个非零取值是当n=-4时,此时 h(n-m)中的m取值范围[-1+(-4),4+(-4)],既m∈[-5,0],y(n)=y(-4)。 y(-4)=\sum_{m=-5}^{m=0}x(m)×h(-4−m) =x(-5)h(1)+x(-4)h(0)+x(-3)h(-1)+x(-2)h(-2)+x(-1)h(-3)+x(-0)h(-4)=0*0+0*0+3*2+11*0+7*0+0*0=6;
  4. y(n)的第二个非零取值是当n=-3时,此时 h(n-m)中的m取值范围[-1+(-3),4+(-3)],既m∈[-4,1],y(n)=y(-3)。 y(-3)=\sum_{m=-4}^{m=1}x(m)×h(-3−m)=x(-4)h(1)+x(-3)h(0)x(-2)h(-1)+x(-1)h(-2)+x(0)h(-3)=0*0+3*311*2+7*0+0*0=31;
  5. 之后依次求出y(-2)=47,y(-1)=6,y(0)=-51,y(1)=-5,y(2)=41,y(3)=18,y(4)=-22,y(5)=-3,y(6)=8,y(7)=2。
  6. 综上所述,当-4≤n≤7时,y(n)={6,31,47,6,-51,-5,41,18,-22,-3,8,2},当n为其它值时,y(n)=0。

2,matlab实现 

使用matlab软件绘制的卷积和波形图如下

代码:

x=[-3:1:3];
nx=[3,11,7,0,-1,4,2];
h=[-1:1:4];
nh=[2,3,0,-5,2,1];
ny=conv(nx,nh);
s=x(1)+h(1);
w=length(x)+length(h)-2;
y=[s:1:s+w];
stem(y,ny,'.');
xlabel('y');
ylabel('ny');
axis([s (s+w) -60 60]);
grid on;

如果想要了解更多关于卷积的matlab实现,请访问博客:

matlab学习004-使用matlab绘制卷积波形图_matlab卷积-CSDN博客

有问题请在评论区留言或者是私信我,回复时间不超过一天。

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

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

相关文章

class 3: vue.js 3 计算属性

计算属性是一种Options API&#xff0c;Options API是一种通过对象定义属性、方法等框架API的方式我们知道&#xff0c;在模板中可以直接通过插值语法显示一些data属性中的数据。但是在某些情况下&#xff0c;可能需要对数据进行一些转化操作之后再显示&#xff0c;或者需要将多…

PostgreSQL技术内幕5:PostgreSQL存储引擎从磁盘到内存的读取

文章目录 0.简介1.背景知识1.1 计算机存储结构1.2 数据库常见的磁盘和内存访问形式 2. 整体获取层次3.元组介绍4. Buffer管理4.1 Buffer组成4.2 修改后落盘4.3 获取buffer页的流程 5.存储管理器&#xff08;SMGR)6.磁盘管理器&#xff08;MD)7.虚拟文件管理器&#xff08;VFD)8…

【攻防世界新手入门】simple_js

小宁发现了一个网页&#xff0c;但却一直输不对密码。&#xff08;Flag格式为 Cyberpeace{xxxxxxxxx} &#xff09; 该题来自攻防世界新手练习区的 GFSJ0480。 访问靶场&#xff0c;输入任意密码&#xff0c;弹出错误窗口并加载空页面&#xff0c;使用检查器查看对应源代码&…

zdppy+vue3+onlyoffice文档管理系统实战 20240901 上课笔记 基于验证码登录功能基本完成

遗留的问题 1、点击切换验证码2、1分钟后自动切换验证码 点击切换验证码 实现步骤&#xff1a; 1、点击事件2、调用验证码接口3、更新验证码的值 点击事件 给图片添加点击事件&#xff1a; <img :src" data:image/png;base64, captchaImg"style"widt…

ffplay源码分析(五)包缓存队列和帧缓存队列

在音视频处理流程中&#xff0c;ffplay的有两种队列&#xff0c;包缓存队列&#xff08;Packet Buffer Queue&#xff09;和帧缓存队列&#xff08;Frame Buffer Queue&#xff09;。这两个队列的存在&#xff0c;是为了适应音视频数据处理过程中的多线程架构——包括收包线程、…

win11+vscode+Flutter 开发环境配置

https://blog.csdn.net/Oven_maizi/article/details/126804404 1 vscode插件 安装 安装红框中的两个 2 flutter sdk 安装 dart sdk 包含在flutter sdk 里面&#xff0c;路径&#xff1a;flutter_windows_3.24.1-stable\flutter\bin\cache\dart-sdk 方式1&#xff1a; 通过…

[001-07-001].Redis7缓存双写一致性之更新策略探讨

1、面试题&#xff1a; 1.只要使用缓存&#xff0c;就可能会涉及到redis缓存与数据库双存储双写&#xff0c;只要是双写&#xff0c;就存在数据一致性问题&#xff0c;那么是如何解决数据一致性问题的2.双写一致性&#xff0c;你先动缓存redis还是数据库MySQL&#xff0c;哪一个…

Python爬虫案例四:爬取某个博主的所有文章保存成PDF格式

引入&#xff08;将图片保存成PDF格式&#xff09;&#xff1a; 测试链接&#xff1a; https://zq.bookan.com.cn/?tdetail&id21088&ct1&is31042341&rid4658&#xff08;图书馆图片保存PDF&#xff09;&#xff0c;前提是装库&#xff0c;pip install img2pdf…

IDEA如何将某个文件夹内的多个module合并到一个大的module内

效果&#xff1a; 初始 方法 Ctrl shift Alt S 打开 project structure 导入module 将这个大文件夹作为新的module导入 效果图 完事儿

C#上位机采用数据库操作方式对Excel或WPS表格进行读取操作

C#采用数据库操作方式对Excel或WPS表格进行读取操作 1、创建连接字符串并编写一个进行数据库操作的方法 public class OleDbHelper{//创建连接字符串private static string connString "ProviderMicrosoft.ACE.OLEDB.12.0;Data Source{0};" "Extended Propert…

如何在态势中嵌入感知?

态势感知是对事物发展的各种情况的估计、判断和理解&#xff0c;而感知是通过感官对事物的认识和了解。要在态势过程中嵌入感知过程&#xff0c;你可以考虑以下步骤&#xff1a; 1、确定态势和感知的要素&#xff1a;首先&#xff0c;明确态势和感知所涉及的关键要素。态势可能…

Lesson08---string类(1)

1. 为什么要学习string类 2. 标准库中的string类 3. string类的模拟实现 4. 扩展阅读 1. 为什么学习string类&#xff1f; 1.1 C语言中的字符串 在c语言中没有string类型只有char类型&#xff0c;char类型只能是一个字符非常的不好用&#xff0c;想要字符串还必须要弄一个c…

华溢艺术之花在社区绽放

华溢艺术之花在社区绽放 这是一个阳光明媚的周末&#xff0c;华溢艺术少儿艺术体验走进了夷陵区营盘社区碧桂园小区。这次活动不仅为社区的孩子们带来了丰富多彩的艺术体验&#xff0c;还让家长们目睹了孩子们在艺术成长道路上那些优美动人的闪光点。 活动现场&#xff0c;热闹…

线性代数|机器学习-P32循环矩阵的特征向量-傅里叶矩阵

文章目录 1. 大纲2. 循环矩阵2.1 移位矩阵P2.2 P的特征值和特征向量2.3 循环卷积矩阵2.4 循环卷积计算 3. 傅里叶矩阵 1. 大纲 循环矩阵在机器学习&#xff0c;图像处理中的应用循环卷积矩阵的特征值&#xff0c;特征向量&#xff0c;卷积规则循环卷积矩阵多项式表达&#xff…

kaggle平台free使用GPU

1、注册 请保证在【科学上网】条件下进入如下操作&#xff0c;只有在注册账户和手机号验证时需要。 step1&#xff1a;注册账户 进入kaggle官网&#xff1a;https://www.kaggle.com/&#xff0c;点击右上角【Register】进入注册页面 最好选择使用邮箱注册&#xff08;&#…

零域(微隔离)详述

一、什么是零信任微隔离&#xff1f; 微隔离的实现方式是将数据中心内部所有的业务按照特定的原则划分为数个微小的网络节点&#xff0c;根据动态策略分析对这些节点执行访问控制&#xff0c;在逻辑上将这些节点隔离开&#xff0c;限制用户横向移动&#xff0c;这就是微…

docker-compose 快速部署nacos-standalone单节点

一、nacos 介绍 官网&#xff1a; https://nacos.io/ 一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台 二、如何使用docker-compose 快速部署nacos2.3.1 ⚠️ &#xff1a; nacos-standalone 部署方式 依赖于 数据库&#xff0c;请先配置好数据库实例&…

日系编曲:了解日系音乐 日系和声特征 设计日系和声 和弦进行摘抄

了解日系音乐 日系音乐风格多样&#xff0c;涵盖流行、摇滚、民谣、古典等多种类型。以下是部分知名的日系音乐作品、歌手及乐队&#xff1a; 作品 《First Love》是宇多田光的代表作之一&#xff0c;旋律悠扬&#xff0c;情感真挚&#xff0c;展现了初恋的美好与青涩&#xf…

c++ 原型模式

文章目录 什么是原型模式为什么要使用原型模式使用场景示例 什么是原型模式 用原型实例指定创建对象的种类&#xff0c;并通过拷贝这些原型创建新的对象&#xff0c;简单理解就是“克隆指定对象” 为什么要使用原型模式 原型模式&#xff08;Prototype Pattern&#xff09;是…

C++学习笔记----6、内存管理(一)---- 使用动态内存(1)

当你使用现代结构&#xff0c;例如std::vector,std::string等等&#xff0c;从一开始到现在以及到未来&#xff0c;C是一个安全的编程语言。该语言提供了许多的道路&#xff0c;路线以及红绿灯&#xff0c;比如C核心指导&#xff0c;静态代码分析器来分析代码的正确性&#xff…