【 MATLAB 】序列相关与序列卷积之间的关系
关于序列卷积,之前写了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
- 点赞
- 收藏
- 关注作者
评论(0)