一维卷积与循环卷积的使用(离散数据+具体例子)

前言

本人在对野外仪器数据采集的信号做一些列数字信号处理的过程中,经常遇到卷积循环卷积。现实中,野外仪器记录到的数据都是离散的!所以我们在对数据进行FFT变换时,都默认使用的是DFT(离散傅里叶变换)。

本文目标并非介绍卷积与循环卷积的详细内容与公式,而是侧重如何编写自己的程序实现这两种操作,并简要介绍两者在使用结果上的区别。

卷积与循环卷积区别

明确说明一点:虽然这两种操作都是对"两个信号"的处理,但两者不是同一操作
区别1:卷积可以处理连续信号和离散信号,循环卷积只用于处理离散信号(现实中都可用);
区别2:卷积对a和b这两个信号的长度没有要求,循环卷积要求a和b信号长度一致;
区别3:设操作后的信号为c,卷积操作后c的长度为a+b-1,循环卷积长度为a(a=b)。

卷积如何使用

卷积的操作就是"循环乘积与加和"。下面结合一个具体的例子进行说明:
信号a:a = [1 3 4 9 8 7]
信号b:b = [2 4 6 3]
卷积:a*b

操作流程图如下:
离散卷积计算流程图.png

对应的Matlab语句是conv(a,b)。但是用edit conv命令查看conv的源代码时候,感觉写的很复杂,不如根据上面计算的流程图(计算原理)写自己的代码:

a = [1 3 4 9 8 7];
b = [2 4 6 3];          % a*b  a在前b在后
a_length = length(a);
b_length = length(b);
r = zeros(1,a_length+b_length-1); % 记录卷积结果,总长度是a+b-1

for k = 1:a_length    % a做循环总长 因为a在前所以是a在移动!
    c = a(k)*b;       % a所有的数都会和b数组所有元素乘一遍,但各自在r中起作用的位置不同
    
    d = r(k:k+b_length-1);  % r(k:k+wb-1)很妙!提取当前a(k)元素会影响的r的区间
    d = d+c;                % 把当前a(k)影响的范围"对应"加进去
    
    r(k:k+b_length-1) = d;  % 把r当前受影响的区域更新(加进去)
end

fprintf('卷积结果为:');
r

注意:进行卷积计算的两个信号谁在前谁在后结果都是一样的,即a*b = b*a;但是上面的程序还是要区分一下"谁在前"的问题(小细节,注意一下即可)。

循环卷积如何使用

循环卷积的操作一般用"傅里叶逆变换"来计算。下面结合一个具体的例子进行说明:
信号a:a = [2,1,2,1,6,2,8,9]
信号b:b = [3,4,2,4,3,5,1,8]
循环卷积:a*b
注意:两个信号的长度一样

用自己编的DFT与IDFT进行循环卷积的Matlab程序:

clc; clear;

% 手动输入的信号:
fprintf('原始信号为:\n');
a = [2,1,2,1,6,2,8,9]
b = [3,4,2,4,3,5,1,8]
N = length(a);

WN = exp(-i*2*pi/N);    % 常数
WN_nk_a = zeros(N)+WN;  % a的WN_kn
WN_nk_b = zeros(N)+WN;  % b的WN_kn
xk_a = a';     % a时域信号振幅(列矩阵)
xk_b = b';     % b时域信号振幅(列矩阵)
E_a = zeros(N);   % a的辅助的E(WN_kn的幂,单独拿出来算)
E_b = zeros(N);   % a的辅助的E(WN_kn的幂,单独拿出来算)

%%% a,b信号傅里叶正变换即结果 %%%
for row = 0:N-1
    for cow = 0:N-1
        E_a(row+1,cow+1) = row*cow;
        E_b(row+1,cow+1) = row*cow;
        WN_nk_a(row+1,cow+1) = WN_nk_a(row+1,cow+1)^E_a(row+1,cow+1);
        WN_nk_b(row+1,cow+1) = WN_nk_b(row+1,cow+1)^E_b(row+1,cow+1);
    end
end

Xk_a = WN_nk_a * xk_a;
Xk_b = WN_nk_b * xk_b;

Xk_t = Xk_a.*Xk_b;

%%% T信号(循环卷积)傅里叶逆变换即结果 %%%
WN_nk_t = zeros(N)+WN;  % t的WN_kn
E_t = zeros(N);   % t的辅助的E(WN_kn的幂,单独拿出来算)

for row = 0:N-1
    for cow = 0:N-1
        E_t(row+1,cow+1) = -row*cow;
        WN_nk_t(row+1,cow+1) = WN_nk_t(row+1,cow+1)^E_t(row+1,cow+1);
    end
end

fprintf('a,b信号的循环卷积结果为:\n');
xk_t = real((WN_nk_t * Xk_t)/N)'

优势1:信号可用是任意长度(不用像FFT那种必须是2^N的长度);
优势2:完全理解其内涵。

当然,全部用Matlab自带函数写就是下面:

fprintf('原始信号为:\n');
a = [2,1,2,1,6,2,8,9]
b = [3,4,2,4,3,5,1,8]

a_tmp = fft(a);
b_tmp = fft(b);  % 用FFT计算a与b信号的频域信号

r_tmp = a_tmp.*b_tmp;  % 对应元素相乘(点乘)
r = ifft(r_tmp)        % 反变换回去,就是a,b信号循环卷积结果(时域)     
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 225,151评论 6 523
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 96,465评论 3 405
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 172,429评论 0 368
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 61,147评论 1 301
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 70,149评论 6 400
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 53,614评论 1 315
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,965评论 3 429
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 40,950评论 0 279
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 47,486评论 1 324
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 39,524评论 3 347
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,640评论 1 355
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 37,228评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,976评论 3 340
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 33,407评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 34,552评论 1 277
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 50,215评论 3 381
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 46,714评论 2 366