【 MATLAB 】序列相关与序列卷积之间的关系
【摘要】 关于序列卷积,之前写了3篇博文:
【 MATLAB 】conv 函数介绍(卷积和多项式乘法)
这篇博文介绍的是MATLAB本身自带的函数,但这个函数conv有个不如意的地方,就是求过卷积之后我们不知道各个卷积值的位置。
然后我们后面扩展了下这个函数,命名为conv_m,这个函数在这个博文的最后给出。
【 MATLAB 】两个序列的卷积和运算的MATLAB实现(2)
...
关于序列卷积,之前写了3篇博文:
这篇博文介绍的是MATLAB本身自带的函数,但这个函数conv有个不如意的地方,就是求过卷积之后我们不知道各个卷积值的位置。
然后我们后面扩展了下这个函数,命名为conv_m,这个函数在这个博文的最后给出。
【 MATLAB 】两个序列的卷积和运算的MATLAB实现(2)
还有一篇博文:
【 MATLAB 】两个序列的卷积和运算的MATLAB实现(1)
这篇博文只是给出了一个实例,程序里面隐藏了求卷积值位置的脚本程序。
序列卷积和公式:
而序列的互相关公式为:
如果x等于y,那么就得到自相关函数的公式:
比较卷积和公式和互相关函数的公式,我们可以发现二者之间的关系:
有了这个关系,我们就可以使用卷积的函数来求两个序列的互相关了。
首先给出扩展后的卷积函数conv_m的脚本:
function [y,ny] = conv_m(x,nx,h,nh)
% Modified convolution routine for signal processing
%___________________________________________________
% [y,ny] = conv_m(x,nx,h,nh)
% [y,ny] = convolution result
% [x,nx] = first signal
% [h,nh] = second signal
%
nyb = nx(1) + nh(1);
nye = nx(length(x)) + nh(length(h));
ny = nyb:nye;
y = conv(x,h);
两个信号相加的函数sigadd:
function [y,n] = sigadd(x1,n1,x2,n2)
% implements y(n) = x1(n) + x2(n)
% [y,n] = sigadd(x1,n1,x2,n2)
%____________________________________
% y = sum sequence over n, which includes n1 and n2
% x1 = first sequence over n1
% x2 = second sequence over n2( n2 can be different from n1)
%
n = min( min(n1), min(n2) ):max( max(n1), max(n2) ); %duration of y(n)
y1 = zeros(1,length(n)); y2 = y1; %initialization
y1( find( ( n >= min(n1) )&( n <= max(n1) ) == 1 ) ) = x1; %x1 with duration of y1
y2( find( ( n >= min(n2) )&( n <= max(n2) ) == 1 ) ) = x2; %x2 with duration of y2
y = y1 + y2;
信号移位函数:
function [y,n] = sigshift(x,m,k)
%implements y(n) = x(n - k)
%_________________________
%[y,n] = sigshift(x,m,k)
%
n = m+k;
y = x;
预备工作做好了,下面给出一个例子:
设:
是原序列,设 y(n) 是原 x(n) 受到噪声污染并移位了的序列
y(n) = x(n-2) + w(n)
这里 w(n) 是均值为0,方差为1的高斯随机序列。计算y(n)和x(n)之间的互相关。
题解:
clc
clear
close all
% noise sequence 1
nx = -3:3;
x = [3,11,7,0,-1,4,2];
%
% implements y(n) = x(n - k)
% _________________________
% [y,n] = sigshift(x,m,k)
[y1,n1]= sigshift(x,nx,2);
w = randn(1,length(y1));
nw = n1;
[y,ny] = sigadd(y1,n1,w,nw);
[x,nx]=sigfold(x,nx);
[rxy,nrxy]=conv_m(x,nx,y,ny);
subplot(2,1,1);
stem(nrxy,rxy);
title('noise sequence 1');
% noise sequence 2
nx = -3:3;
x = [3,11,7,0,-1,4,2];
%
% implements y(n) = x(n - k)
% _________________________
% [y,n] = sigshift(x,m,k)
[y1,n1]= sigshift(x,nx,2);
w = randn(1,length(y1));
nw = n1;
[y,ny] = sigadd(y1,n1,w,nw);
[x,nx]=sigfold(x,nx);
[rxy,nrxy]=conv_m(x,nx,y,ny);
subplot(2,1,2);
stem(nrxy,rxy);
title('noise sequence 2');
噪声是随机的,所以把互相关的计算执行了两次,可见,两幅图的细节有一点点不同,但互相关的峰值都在l = 2上。
文章来源: reborn.blog.csdn.net,作者:李锐博恩,版权归原作者所有,如需转载,请联系作者。
原文链接:reborn.blog.csdn.net/article/details/83304196
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)