欢迎访问yhm138的博客园博客, 你可以通过 [RSS] 的方式持续关注博客更新

MyAvatar

yhm138

HelloWorld!

三种常见的卷积概述(线性卷积周期卷积圆周卷积)以及重叠保留法重叠相加法

note 2020-07-26搬运 下面的内容来自我的公众号:yhm同学
upd 2020-10-18 推荐学习辅助用书 江志红的《深入浅出数字信号处理》 有别于学院派的教材,这本书讲得比较易懂清楚
upd 2020-10-18 数字信号处理系列串讲第20篇(数字滤波器之三)——IIR滤波器(1)——IIR滤波器设计方法 我关注的公众号的一篇推文
upd 2021-01-26 推荐两本书
MATLAB数字信号处理85个实用案例精讲.入门到进阶——北航出版社
数字信号处理原理及其MATLAB实现(第3版)——电子工业出版社
你把出版社名字+感兴趣的关键字(如matlab,信号处理),在书籍网站搜也能找到很多类似的书
谱估计或者现代(高级)信号处理的话,可以看《现代信号处理》安颖、崔东艳著,张贤达的《现代信号处理》

没有广告费。。。

贴一个各种滤波方法的小结

贴一个各种控制算法的小结 https://www.zhihu.com/question/46468411/answer/101488247
贴一张机器学习里的算法地图 https://www.cnblogs.com/yhm138/articles/14747943.html





三种卷积:线性卷积,周期卷积,圆周卷积(即循环卷积;维基百科中说circular convolution圆周卷积,也被叫做cyclic convolution循环卷积)

线性卷积,记不住就把它想成多项式乘法

周期卷积,就是线性卷积左右周期延拓后再加起来。周期卷积当然是周期的

圆周卷积,就是周期卷积取主值序列

直接放图片吧

image-20200613001626343

在这里插入图片描述

然后还有一些tips

  • N点圆周卷积能算线性卷积,当然N要选取的足够大,\(N\geq a_1+a_2-1\) ,把多出来的\((N-a_1-a_2+1)\)个零点去掉就行了。N选得不够大,你想得到线性卷积的话就少了部分信息。举例:

在这里插入图片描述

  • 见过最多的就是两个长度为2的次幂(长度\(N=2^v\))的序列(不够补零)做N点圆周卷积

    这个可以加速,加速方法:两个序列的DFT相乘,再IDFT回来(DFT和IDFT都可以用fft加速)




循环重叠法和循环相加法:本质都是为了处理\(x(n)\)过长时如何高效地计算\(x(n)\)\(h(n)\)的线性卷积

不要求背证明的话,记一下例子https://wenku.baidu.com/view/3911bd5b647d27284a73510b.html

要点:

以分段5,\(h(n)\)长度为3举例

重叠保留法,输出的每一段都是长3和长5的5点圆周卷积,重叠的是最左边(3-1=2)个,这2个扔掉

重叠相加法,输出的每一段都是长3和长5的线性卷积

分段一般是有讲究的:

每段多长,怎么选

image-20200613004022223 image-20200613004208609 image-20200613004321111 image-20200613004343769

这4张图片来自https://wenku.baidu.com/view/3911bd5b647d27284a73510b.html







clear all;close all;clc;
x=[0.6924,0.8116,-0.7460,0.8268,0.2647,-0.8049,-0.4430,0.0938];
h=[0.9150,0.9298,-0.6848];
len_x=size(x,2);
len_h=size(h,2);

%前两个参数输入信号x和滤波器h可以互换,不影响结果

%做线性卷积
y=conv(x,h);

%不指定循环卷积点数默认就是做线性卷积
y1=cconv(x,h);
y2=cconv(x,h);

y3=cconv(x,h,3);
y4=cconv(x,h,len_x+len_h-1); %循环卷积点数只要>=len_x+len_h-1,就可以去零后得到线性卷积
posted @ 2020-07-26 01:48  yhm138  阅读(3266)  评论(0编辑  收藏  举报