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

本文主要是介绍《数字信号处理》学习01-离散时间信号与序列的卷积和运算,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一,信号

二,序列的运算 

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博客

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

这篇关于《数字信号处理》学习01-离散时间信号与序列的卷积和运算的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1127345

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

从去中心化到智能化:Web3如何与AI共同塑造数字生态

在数字时代的演进中,Web3和人工智能(AI)正成为塑造未来互联网的两大核心力量。Web3的去中心化理念与AI的智能化技术,正相互交织,共同推动数字生态的变革。本文将探讨Web3与AI的融合如何改变数字世界,并展望这一新兴组合如何重塑我们的在线体验。 Web3的去中心化愿景 Web3代表了互联网的第三代发展,它基于去中心化的区块链技术,旨在创建一个开放、透明且用户主导的数字生态。不同于传统

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

usaco 1.2 Name That Number(数字字母转化)

巧妙的利用code[b[0]-'A'] 将字符ABC...Z转换为数字 需要注意的是重新开一个数组 c [ ] 存储字符串 应人为的在末尾附上 ‘ \ 0 ’ 详见代码: /*ID: who jayLANG: C++TASK: namenum*/#include<stdio.h>#include<string.h>int main(){FILE *fin = fopen (

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

hdu 2602 and poj 3624(01背包)

01背包的模板题。 hdu2602代码: #include<stdio.h>#include<string.h>const int MaxN = 1001;int max(int a, int b){return a > b ? a : b;}int w[MaxN];int v[MaxN];int dp[MaxN];int main(){int T;int N, V;s