求大神帮忙C语言实现3*3图片的卷积

m0_37875795 2017-06-15 01:41:49
这是matlab 代码:
function out_array = conv_fun(raw_input,weight,bias,stride,pad)
size_input = size(raw_input);
size_w = size(weight);
size_b = size(bias);
if pad>0
input = zeros(size_input(1)+2*pad, size_input(2)+2*pad,size_input(3),'int64' );
input(pad+1:pad+size_input(1),pad+1:pad+size_input(2),:) = raw_input;
else
input = raw_input;
end
size_output(1)=(size_input(1)+2*pad-size_w(1))/stride+1;
size_output(2)=(size_input(2)+2*pad-size_w(2))/stride+1;
size_output(3)=size_w(4);
out_array = zeros(size_output(1),size_output(2),size_output(3),'int64' );

for n=1:size_output(3)
for y=1:size_output(2)
for x=1:size_output(1)
x_start = (x-1)*stride + 1;
x_end = x_start + size_w(1) -1 ;
y_start = (y-1)*stride + 1;
y_end = y_start + size_w(2) -1;
z_start = 1;
z_end = size_w(3);
window = input(x_start:x_end,y_start:y_end,z_start:z_end); % crop a 3D array as a sliding window (1:3,1:3,1:3)
filter = weight(:,:,:,n);
conv_mat = window.*filter;
sum_v = sum(sum(sum(conv_mat)));
sum_v = sum_v + bias(n);
if sum_v < 0
sum_v = 0;
end
out_array(x,y,n) = sum_v;
end % end for y=1:size_output(2)
end % end for x=1:size_output(1)
end % end for n=1:size_output(3)
%%
size_out_array = size(out_array);
disp(['[Input size:',num2str(size_input),']','[weight size:',num2str(size_w),']','[bias size:',num2str(size_b),']','[stride:',num2str(stride),']','[pad:',num2str(pad),']','[output size:',num2str(size_out_array),']']);
end %end for the function

...全文
333 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-06-15
  • 打赏
  • 举报
回复 1
不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件,或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如: A将请求数据写到文件a.txt,写完后改名为aa.txt B发现aa.txt存在时,读取其内容,调用相应功能,将结果写到文件b.txt,写完后删除aa.txt,改名为bb.txt A发现bb.txt存在时,读取其内容,读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境,B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢? 可以将临时文件放在RamDisk上提高效率减少磨损磁盘。 数据的结构很复杂的话,文本文件的格式问题可参考json或xml 共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多,下面仅列出我现在能想到的: ·进程之间松耦合 ·进程可在同一台机器上,也可跨机,跨操作系统,跨硬件平台,甚至跨国。 ·方便调试和监视,只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务,只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务,而且几乎不可能发生队列满的情况(除非硬盘空间满) ·…… “跨语言、跨机,跨操作系统,跨硬件平台,跨国,跨*.*的”苦海无边, 回头是“使用共享纯文本文件进行信息交流”的岸!
内容概要:本文针对无刷直流电机驱动的电子机械制动(EMB)执行器,建立了考虑Stribeck摩擦特性的非线性耦合动力学模型,并在Simulink环境中完成了系统级仿真分析。研究综合集成了电机动力学、齿轮传动机构与制动执行机构的动力学特性,构建了高保真的机电一体化系统模型。重点引入Stribeck摩擦模型以精确描述低速工况下执行器内部存在的静摩擦、粘滞摩擦与库仑摩擦之间的过渡行为,有效提升了系统在启停、反向运动等瞬态过程中的动态响应仿真精度。通过多工况仿真验证了模型的有效性,能够准确反映摩擦引起的爬行、滞后与定位误差等非线性现象,为EMB系统的高性能控制算法设计(如摩擦补偿、滑模控制)与结构优化提供了高可信度的仿真平台。; 适合人群:从事汽车电子制动系统、电机驱动控制、机电系统建模与仿真研究的研究生、科研人员及工程技术人员,需具备扎实的机械动力学、自动控制理论基础和MATLAB/Simulink仿真能力。; 使用场景及目标:①用于高精度电子机械制动系统的设计验证与性能预测;②为消除摩擦非线性影响的先进控制策略(如自适应控制、智能控制)提供精确的被控对象模型;③深入探究Stribeck摩擦等非线性因素对系统动态性能(如响应延迟、稳态误差)的作用机理; 阅读建议:读者应结合提供的Simulink模型文件,深入剖析Stribeck摩擦模块的数学实现与参数辨识方法,建议通过改变输入指令(如阶跃、正弦)和负载条件进行对比仿真,以直观理解非线性摩擦对系统动态特性的影响。

70,038

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧