本文主要是介绍《数字信号处理》学习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(既 ),另外一个序列 就要开始卷了!开始卷的时候, 翻身(翻褶)有了个家(加上另外一个变量n),变成了 。
卷积和就是要先卷,再积,最后求和。
卷完之后,将这两个序列乘在一起: x(m)×h(n−m) ,之后再求和。
因为序列x(n)和h(n)的定义域没给,所以这两个序列卷积和之后的结果y(n)的定义域默认为负无穷到正无穷(既n属于[-∞,+∞]),在求和的时候m也需要在 [−∞,+∞] 这个区间内:
如果觉得前面的太长,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的取值范围。
从公式 可以看出,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)],这个时候就可以使用卷积和公式: ;
- 当序列h(m)经过翻褶,变成h(-m)之后向左移动a1+a2位时,本来h(m)的定义域(既m的取值范围)为[a2,b2],序列向左移动后m的取值范围也会跟着变,因为越往左边,数值越来越小,所以此时h(n-m)中的 m∈[a2-(a1+a2),b2-(a1+a2)],这个时候就可以使用卷积和公式: ;
通过上述的分析之后,开始上题:
思路:
- 列出卷积和公式:;
- 确定卷积和序列y(n)的定义域,n∈[-3+(-1),3+4]=[-4,7];
- y(n)的第一个非零取值是当n=-4时,此时 h(n-m)中的m取值范围[-1+(-4),4+(-4)],既m∈[-5,0],y(n)=y(-4)。 =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;
- y(n)的第二个非零取值是当n=-3时,此时 h(n-m)中的m取值范围[-1+(-3),4+(-3)],既m∈[-4,1],y(n)=y(-3)。 =x(-4)h(1)+x(-3)h(0)+x(-2)h(-1)+x(-1)h(-2)+x(0)h(-3)=0*0+3*3+11*2+7*0+0*0=31;
- 之后依次求出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。
- 综上所述,当-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-离散时间信号与序列的卷积和运算的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!