[Matlab] 线性卷积&圆周卷积代码实现

1、线性卷积 周期卷积 圆周卷积的 关系:

2、Matlab实验及现象

圆周卷积:

 1 %% 圆周卷积实例程序
 2 %% Alimy 2014年11月21日 20:19:12
 3 clc;
 4 clear;
 5 %%准备数据
 6 N = 5;
 7 M = 5;
 8 L = N + M -1;
 9 x1n = [1,2,3,4,5];
10 x2n = [1,5,9,7,3];
11 kn_x1 = 0:1:N-1;
12 kn_x2 = 0:1:M-1;
13 kn_y = 0:1:L-1;
14 %%画原始有限长序列
15 subplot(4,2,1);
16 stem(kn_x1,x1n);
17 xlabel(‘n‘,‘FontSize‘,15);
18 ylabel(‘x1n‘,‘FontSize‘,15);
19 subplot(4,2,2);
20 stem(kn_x2,x2n);
21 xlabel(‘n‘,‘FontSize‘,15);
22 ylabel(‘x2n‘,‘FontSize‘,15);
23
24 x1n_t = [x1n, zeros(1,L-N)];  %%补零
25 x2n_t = [x2n, zeros(1,L-M)];
26 kn_x1t = 0:1:(N+M-1)-1;
27 kn_x2t = 0:1:(N+M-1)-1;
28 %%画补0后序列
29 subplot(4,2,3);
30 stem(kn_x1t,x1n_t);
31 xlabel(‘n‘,‘FontSize‘,15);
32 ylabel(‘x1n补0后‘,‘FontSize‘,15);
33 subplot(4,2,4);
34 stem(kn_x2t,x2n_t);
35 xlabel(‘n‘,‘FontSize‘,15);
36 ylabel(‘x2n补0后‘,‘FontSize‘,10);
37
38 x1n_t = [x1n_t,x1n_t,x1n_t,x1n_t];    %沿拓
39 x1n_t = fliplr(x1n_t);                %翻转
40 [x1t_x,x1t_y] = size(x1n_t);
41 x1t_numbers = x1t_x * x1t_y;
42 kn_x1t = -17:1:18;
43 %%画沿拓翻转后的周期序列
44 subplot(4,2,5);
45 stem(kn_x1t,x1n_t);
46 xlabel(‘t‘,‘FontSize‘,15);
47 ylabel(‘x1n_t补0后再沿拓翻转后‘,‘FontSize‘,10);
48
49 x2n_t = [zeros(1,L),zeros(1,L),x2n_t,zeros(1,L)];
50 kn_x2t = -18:1:17;
51 subplot(4,2,6);
52 stem(kn_x2t,x2n_t);
53 xlabel(‘t‘,‘FontSize‘,15);
54 ylabel(‘x2n_t补0后 沿拓翻转后‘,‘FontSize‘,15);
55
56
57 %%  乘 加 移位
58 yn = zeros(1,2*L);
59 for I = 1:1:18
60     x1n_t = circshift(x1n_t,[0,1]);
61     yn(I) = x2n_t*x1n_t‘;
62 end
63
64 kn_yn = 0:1:2*(N+M-1)-1;
65 subplot(4,2,7);
66 stem(kn_yn,yn);
67 xlabel(‘n‘,‘FontSize‘,15);
68 ylabel(‘圆周卷积结果‘,‘FontSize‘,15);
69
70 %%取主值序列
71 ynmain = zeros(1,L);
72 for I = 1:1:9
73     ynmain(I) = yn(I);
74 end
75 kn_ynm = 0:1:8;
76 subplot(4,2,8);
77 stem(kn_ynm,ynmain)
78 xlabel(‘n‘,‘FontSize‘,15);
79 ylabel(‘主值序列‘,‘FontSize‘,15);
80
81 %% 

cycleConv.m

线性卷积:

 1 %% 线性卷积
 2 clc;
 3 clear;
 4 %%
 5 N = 5;
 6 M = 5;
 7 L = N + M - 1;
 8 x1n = [1,2,3,4,5];
 9 kx1 = 0:1:N-1;
10 x2n = [1,5,9,7,3];
11 kx2 = 0:1:M-1;
12
13 %% 线性卷积
14 yn = conv(x1n,x2n);
15 kyn = kx1(1)+kx2(1):1:kx1(end)+kx2(end);  % 0:1:(N+M-1)-1
16
17 %% 循环卷积   To do 2014年11月20日 15:25:36 循环卷积怎么做
18
19 %% 画图
20 subplot(2,2,1);
21 stem(kx1,x1n);
22 xlabel(‘n‘);
23 ylabel(‘x1n‘);
24 title(‘信号1‘);
25
26 subplot(2,2,2);
27 stem(kx2,x2n);
28 xlabel(‘n‘);
29 ylabel(‘x1n‘);
30 title(‘信号2‘);
31
32 subplot(2,2,3);
33 stem(kyn,yn);
34 xlabel(‘n‘);
35 ylabel(‘yn‘);
36 title(‘线性卷积结果‘);
37 yn   %%  1     7    22    44    69    88    82    47    15

linConv.m

结果如下:

当 L = N + M -1时,圆周卷积和线性卷积的结果一致:

yn =

1 7 22 44 69 88 82 47 15

圆周卷积:

线性卷积:

时间: 2024-10-17 18:25:59

[Matlab] 线性卷积&圆周卷积代码实现的相关文章

深度学习面试题25:分离卷积(separable卷积)

目录 举例 单个张量与多个卷积核的分离卷积 参考资料 举例 分离卷积就是先在深度上分别卷积,然后再进行卷积,对应代码为: import tensorflow as tf # [batch, in_height, in_width, in_channels] input =tf.reshape(tf.constant([2,5,3,3,8,2,6,1,1,2,5,4,7,9,2,3,-1,3], tf.float32),[1,3,3,2]) # [filter_height, filter_wid

卷积神经网络(CNN)代码实现(MNIST)解析

在http://blog.csdn.net/fengbingchun/article/details/50814710中给出了CNN的简单实现,这里对每一步的实现作个说明: 共7层:依次为输入层.C1层.S2层.C3层.S4层.C5层.输出层,C代表卷积层(特征提取),S代表降采样层或池化层(Pooling),输出层为全连接层. 1.        各层权值.偏置(阈值)初始化: 各层权值.偏置个数计算如下: (1).输入层:预处理后的32*32图像数据,无权值和偏置: (2).C1层:卷积窗大

matlab的二维卷积操作(转)

MATLAB的conv2函数实现步骤(conv2(A,B)): 其中,矩阵A和B的尺寸分别为ma*na即mb*nb ① 对矩阵A补零,第一行之前和最后一行之后都补mb-1行,第一列之前和最后一列之后都补nb-1列(注意conv2不支持其他的边界补充选项,函数内部对输入总是补零): ② 将卷积核绕其中心旋转180度: ③ 滑动旋转后的卷积核,将卷积核的中心位于图像矩阵的每一个元素,并求乘积和(即将旋转后的卷积核在A上进行滑动,然后对应位置相乘,最后相加):下面分别是shape=full, same

matlab的二维卷积操作

MATLAB的conv2函数实现步骤(conv2(A,B)): 其中,矩阵A和B的尺寸分别为ma*na即mb*nb ① 对矩阵A补零,第一行之前和最后一行之后都补mb-1行,第一列之前和最后一列之后都补nb-1列(注意conv2不支持其他的边界补充选项,函数内部对输入总是补零): ② 将卷积核绕其中心旋转180度: ③ 滑动旋转后的卷积核,将卷积核的中心位于图像矩阵的每一个元素,并求乘积和(即将旋转后的卷积核在A上进行滑动,然后对应位置相乘,最后相加):下面分别是shape=full, same

Deep Learning基础--线性解码器、卷积、池化

本文主要是学习下Linear Decoder已经在大图片中经常采用的技术convolution和pooling,分别参考网页http://deeplearning.stanford.edu/wiki/index.php/UFLDL_Tutorial中对应的章节部分. Linear Decoders: 以三层的稀疏编码神经网络而言,在sparse autoencoder中的输出层满足下面的公式: 从公式中可以看出,a3的输出值是f函数的输出,而在普通的sparse autoencoder中f函数一

【Vivado HLS Coding Style-2】2维卷积:C代码构建高效硬件

------------------------------------------------------------------------------------------------------------ 作者:王超 联系:526160753(wechat\QQ) wordchao     (facebook) 研究:机器学习.深度学习 图像识别检测.车牌识别.人脸识别 人工智能算力优化.FPGA 协处理 ---------------------------------------

TensorFlow 卷积神经网络--卷积层

之前我们已经有一个卷积神经网络识别手写数字的代码,执行下来正确率可以达到96%以上. 若是再优化下结构,正确率还可以进一步提升1~2个百分点. 卷积神经网络在机器学习领域有着广泛的应用.现在我们就来深入了解下卷积神经网络的细节. 卷积层,听名字就知道,这是卷积神经网络中的重要部分. 这个部分被称为过滤器(filter)或者内核(kernel) Tensorflow的官方文档中称这个部分为过滤器(filter). 在一个卷积层总,过滤器所处理的节点矩阵的长和宽都是由人工指定的,这个节点矩阵的尺寸也

深度学习面试题24:在每个深度上分别卷积(depthwise卷积)

目录 举例 单个张量与多个卷积核在深度上分别卷积 参考资料 举例 如下张量x和卷积核K进行depthwise_conv2d卷积 结果为: depthwise_conv2d和conv2d的不同之处在于conv2d在每一深度上卷积,然后求和,depthwise_conv2d没有求和这一步,对应代码为: import tensorflow as tf # [batch, in_height, in_width, in_channels] input =tf.reshape( tf.constant([

tensorflow 卷积/反卷积-池化/反池化操作详解

Plese see this answer for a detailed example of how tf.nn.conv2d_backprop_input and tf.nn.conv2d_backprop_filter in an example. In tf.nn, there are 4 closely related 2d conv functions: tf.nn.conv2d tf.nn.conv2d_backprop_filter tf.nn.conv2d_backprop_i