【 MATLAB 】【 MATLAB 】DFT的性质讨论(三)序列的循环卷积及其 MATLAB 实现
【摘要】 这篇博文要将的是循环卷积,循环卷积和线性卷积还是有很大区别的,我们都知道,两个N点序列之间的线性卷积会得出一个更长的序列,不得不再一次要将区间限制在 0 <= n <= N -1。因此代替线性移位的是应该考虑循环移位,循环移位我们上面已经讨论了两篇博文:
【 MATLAB 】DFT的性质讨论(二)序列的循环移位及其 MATLAB 实现(时域方法)
【 MATL...
这篇博文要将的是循环卷积,循环卷积和线性卷积还是有很大区别的,我们都知道,两个N点序列之间的线性卷积会得出一个更长的序列,不得不再一次要将区间限制在 0 <= n <= N -1。因此代替线性移位的是应该考虑循环移位,循环移位我们上面已经讨论了两篇博文:
【 MATLAB 】DFT的性质讨论(二)序列的循环移位及其 MATLAB 实现(时域方法)
【 MATLAB 】DFT的性质讨论(二)序列的循环移位及其 MATLAB 实现(频域方法)
包含循环移位的卷积运算称为循环卷积,给出:
下面我们根据循环卷积的表达式来使用MATLAB实现循环卷积:
我们的思路是对位于[0,N-1]内的每个n产生一个 序列,并作为矩阵的行,然后将循环卷积的公式作为一个矩阵乘法来实现,这需要一个for循环。
直接给出函数:
-
function y = circonvt(x1,x2,N)
-
% N-point circular convolution between x1 and x2:(time - domain)
-
% ________________________________________________________________
-
% y = circonvt(x1,x2,N)
-
% y = output sequence containing the circular convolution
-
% x1 = input sequence of length N1 <= N
-
% x2 = input sequence of length N2 <= N
-
% N = size of circular buffer
-
% Method y(n) = sum(x1(m)*x2((n-m) mod N))
-
% Check for length of x1 and x2
-
%
-
-
if length(x1) > N
-
error('N must be >= the length of x1')
-
end
-
if length(x2) > N
-
error('N must be >= the length of x2')
-
end
-
x1 = [x1,zeros(1,N - length(x1))];
-
x2 = [x2,zeros(1,N - length(x2))];
-
m = 0:1:N-1;
-
x2 = x2( mod(-m,N) + 1 );
-
H = zeros(N,N);
-
for n=1:N
-
H(n,:)=cirshftt(x2,n-1,N);
-
end
-
y = x1 * H';
验证:
-
clc
-
clear
-
close all
-
-
-
x1 = [1,2,2];
-
x2 = [1,2,3,4];
-
y = circonvt(x1,x2,4)
y =
15 12 9 14
不信你就手算,确实是这样的。
这里只是提供了实现循环卷积的一种方法。
不出意外,我应该还会接着写几种方法来实现循环卷积,包括频域方法。
明天又要有任务了,不知道还有没有时间接着写了,真是有毒,每次写到DFT都会有事。
定位走起!
文章来源: reborn.blog.csdn.net,作者:李锐博恩,版权归原作者所有,如需转载,请联系作者。
原文链接:reborn.blog.csdn.net/article/details/83513991
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)