如何做卷积没有命令吗

127(30天)
你好,我想做卷积在matlab中没有任何的命令。
简单,这是因为我试图使用一个代码,也可以实现在C。
到目前为止,我有这个
x = (1 2 3)
h = [1 0 3]
Z = [0]
[M, N] =大小(x)
[L O] =大小(h)
一个= N + 1
n = 1:1: n
o = 1:1: o
y (n, o) = x (n) * h (o)
结束
结束

接受的答案

钱德拉Kurniawan
钱德拉Kurniawan 2011年11月27日
嗨,奥马尔。你寻找二维卷积码没有Matlab工具箱命令? ?我有下面的代码
函数B =卷积(k);
[r c] =大小(一个);
(mn) = (k)大小;
h = rot90 (k, 2);
中心=地板((大小(h) + 1) / 2);
左=中心(2)- 1;
正确的= n -(2)中心;
顶(1)- 1 =中心;
底= m -中心(1);
代表= 0 (r +上+下,c +左+右);
x = 1 +: r +
y = 1 +左:c +离开了
代表(x, y) = (x, y -左);
结束
结束
B = 0 (r、c);
x = 1: r
y = 1: c
i = 1: m
j = 1: n
q = x - 1;
w = y 1;
B (x, y) = B (x, y) +(代表(i + q, j + w) * h (i, j));
结束
结束
结束
结束
保存与文件名“convolve.m”下面的代码。然后创建一个新的m文件类型代码:
清晰;clc;
I = [4 4 3 5 4;
6 6 5 5 2;
5 6 6 6 2;
6 7 5 5 3;
3 5 2 4 4];
k = [0 1 0;
1 4 1;
0 1 0];
奥软=卷积(I (k)
看结果!你也可以比较结果与matlab工具箱命令“conv2”
Bnd = conv2 (k,我“相同”)
结果都是相同的:
奥软=
6 3 2 8 9
9 3 0 2 3
2 0 2 6 3
9 6 0 2 1
1 8 6 5 9
Bnd =
6 3 2 8 9
9 3 0 2 3
2 0 2 6 3
9 6 0 2 1
1 8 6 5 9
> >
1评论
大卫年轻
大卫年轻 2011年11月27日
这是更复杂的比必要的——你不需要反映出的第一个循环,只是改变第二个循环的指数计算,以反映卷积的数学定义。

登录置评。

更多的答案(5)

迪
2015年3月16日
第一个答案实际上并不是全尺寸。
全尺寸将是这样的:
%由Dizeng 3/15/2015。完整的卷积。
函数B =卷积(k)
[r、c] =大小(一个);
[m, n] =大小(k);
h = rot90 (k, 2);
中心=地板((大小(h) + 1) / 2);
代表= 0 (r + m * 2, c + n * 2 - 2);
x = m: m + r 1
y = n: n + r 1
代表(x, y) = (x m + 1, y n + 1);
结束
结束
B = 0 (r + m - 1, n +颈- 1);
x = 1: r + m - 1
颈- 1 y = 1: n +
i = 1: m
j = 1: n
B (x, y) = B (x, y) +(代表(张x + y + j - 1) * h (i, j));
结束
结束
结束
结束
希望这将有助于他人……
3评论

登录置评。


韦恩王
韦恩王 2011年11月27日
我把它当你说“没有”命令,你真的只是说没有conv ()。在我看来你从最初有一维向量。具体来说,你给的例子:
x = (1 2 3);
h = (1 0 3);
您可以利用线性卷积的关系,循环卷积,和DFT通过扩展和补零输入向量的长度,增加阶,然后逆DFT。
x = (1 2 3) ';
h = (1 0 3) ';
N =长度(x) + (h) 1;
x1 = [x;0 (N-length (x), 1)];
h1 = [h;0 (N-length (h), 1)];
convxh =传输线(fft (x1)。* fft (h1));
比较convxh和
conv (x, h)
1评论
奥马尔·查韦斯
奥马尔·查韦斯 2011年11月27日
是的,你是对的。的是,由于代码应该能够应用在多个平台上我不能用传输线或fft。我试图证明代码可以用好几种语言,如matlab, C等

登录置评。


萨尔瓦多卡纳斯
萨尔瓦多卡纳斯 2018年1月15日
这些旋转旋转与填充= 1,填充= 0你好吗?

Sk集团
Sk集团 2021年10月25日
没有conv卷积函数在MATLAB | | |解释完整代码和输出示例

VIGNESH B年代
VIGNESH B年代 2022年7月28日
%以下代码是卷积没有conv命令。
%背后的想法是乘以x的元素在h和每个元素
%增加他们的转变。
%如:x =[1, 2]和h =(4、5、6)说,h是转化为(3、4、5 0);甲地
% 0 h后添加的最小值(len (x), len (h)) 1)。als是零
%添加矢量addn问题是删除。(conv的输出是相同的
%长度改变h)。
%然后执行x (1)。* h =(4、5、6,0)和x (2)。* h =[8、10、12 0]当x(我)
%如果我> 2 - >添加0 x (i)的结果。* h指数1和转变
%。y = x的conv和h = [4、5、6,0] + [0, 8、10、12]。
clc
清晰的
x =输入('输入x [. .]“);%得到输入x和h
无法运行“fevalJSON”功能,因为它调用的输入函数,也不支持这个产品。万博1manbetx
h =输入(进入h [. .]“);
如果长度(x) > (h)
temp_var = x;
x = h;
h = temp_var;
结束
y = 0(1,(长度(x) + (h) 1));
min_val = [(x)长度,长度(h)];
r = 1分钟(min_val);;% x和h 1
你好= [h, 0 (1 r)];
i = 1:长度(x)
temp = x(我)。*你好;
% disp(临时)
如果> = 2
拍子=[0(1张)、温度(1:最后我+ 1)];
其他的
拍子= temp;
结束
y = y +速率;
结束
disp (“x的卷积和h:”);
disp (y)

标签

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!