精华内容
下载资源
问答
  • 前阵子,花了不少时间在做MATLAB视频这件事上。不得不说,做视频要比写文章难太多了!可能是因为视频新手的原因,在做第一个视频的时候,录了3个小时,剪了6个小时,我终于完成了一个10分钟的视频!然而,沉浸在第一...

    前阵子,花了不少时间在做MATLAB视频这件事上。

    不得不说,做视频要比写文章难太多了!

    可能是因为视频新手的原因,在做第一个视频的时候,录了3个小时,剪了6个小时,我终于完成了一个10分钟的视频!

    5077842136473b0c836887bf6c1c9b89.png

    然而,沉浸在第一支视频的兴奋中没多久,我发现了一个问题。

    在我阅片无数之后,我发现自己做的视频居然没有字幕……

    于是,在做第二个视频的时候,除了录视频,剪视频之外,我又多花了两个小时,做了一次汉语听写练习,视频里放一句,我手敲字幕一句。

    这次做视频的经历实在是太折磨了!

    我不相信做字幕会用这么蠢的办法,于是我就上网搜做字幕最快最简单的方法,我很快在B站找到了答案

    71db23e2043695bcadf35a8ae5170f5a.png

    答案跟我说,先把音频转txt文本,然后在arctime软件中手动对每句字幕进行时间轴上的定位。

    了解行业内幕之后的我,迫不及待要开始第三个视频的制作!

    在录完视频、剪完视频之后,又到了制作字幕环节

    网上就有很多在线音频转字幕的网站,我选择了科大讯飞

    fe211b00297ea491729f7bce2619ead5.png

    然而,在音频转写完成后,转写预览里的文字,居然没办法选中复制……

    要导出文档的话,需要付费,每分钟音频0.33元……

    我是一个在乎3毛钱的人吗!

    这不是3不3毛钱的问题!

    对于程序员来说,这是尊严的问题!

    于是,我就用MATLAB写了一款音频转文字的工具。

    59f4aa190ea5f437f80d9b6b5038c6e5.png
    https://www.zhihu.com/video/1181588808822419456

    我可能是B站里为数不多的,没有打光器,没有麦克风,但是居然会先给自己写工具的Up主……

    实现音频转文字之后,我开始用acrtime加时间轴做字幕文件。

    整个制作过程非常梦幻……

    首先要把整个文本进行分行,每一行代表每次要显示的字幕

    于是,还没开始做时间轴,我就要花差不多5分钟时间,见到句号要回车,见到逗号要回车,感觉句子太长要回车,听到语气有转折,还要回车!

    此刻,我非常想念我的解压神器……

    253c0a5a6f9f39afd251f3c06b171472.gif

    文本分段完之后,我就开始体验所谓全网最快最简单的上字幕法。

    在arctime里有一个模式,叫快速拖拽创建工具。

    5f50385b67dc8ebe7eb394829823f608.png

    我一直不太理解这个名字的意思,不过在这个模式下,每听到一句字幕,就要按一下暂停,然后字幕会加到这段时间轴上。

    这难道不是另一种形式的汉语听力练习吗!

    说好的全网最快最简单的上字幕方法呢!

    于是,我就用MATLAB写了一款音频转字幕的工具,在加载处理完音频文件之后,自动生成srt字幕文件。

    f5042412e7b128fd4da75e0e98b8403b.gif

    我可能是B站里为数不多的,没有打光器,没有麦克风,写完一个工具不过瘾又写了一个工具的Up主……

    接下来简单地聊一聊如何用MATLAB实现音频转文字的功能。

    这个功能的实现,是通过调用百度语音识别的API,这类网站还有不少,包括科大讯飞,也有提供API可以调用。

    如果大家有兴趣也想玩一玩这个语音识别的话,需要先登陆百度智能云管理中心,创建一个语音识别的应用。

    135bd1531c8b2baca796fe3a7dd348d4.gif

    应用创建成功之后,会生成属于自己的API Key和Secret Key,之后通过https://openapi.baidu.com/oauth/2.0/token获取token,token的值将会作为之后API调用的其中一项参数传递。

    API调用的另一个非常重要的参数就是音频信号,这里需要base64的格式,这个格式的转换代码,大家也是可以在我之后发布的源代码中看到的。

    还需要注意的一点是,API接受的频率只有16000,这个是在API技术文档中定义好的。所以大家有些录制的音频,如果频率不是16000的话,就需要对频率进行一个转化。

    其他所需的API参数,有兴趣的朋友可以在百度智能云的技术文档里查看,最后需要把这些参数定义为一个struct格式通过webwrite进行传递

    https://cloud.baidu.com/doc/SPEECH/s/rjwvy5jlx/

    关于音频转字幕文件,目前我在这部分使用的策略比较简单。

    在MATLAB读取完音频之后,先进行滤波,之后检测音频中幅值小于阈值并持续0.5秒,则认为处于句子停顿。

    在未识别出停顿的情况下,根据语音识别的文字,进行标点符号的正则法处理,然后在单句音频上进行断句设置时间轴。

    虽然这个策略比较简单,不过实现起来不太容易。

    如果音频时长太长的话,读取到的数据非常大,如果代码里但凡使用一个for循环,整体的计算效率会非常差。

    音频数据处理,是一个非常好的MATLAB练习题,可以强迫自己不使用for循环,这个练习也是知识星球“基础训练营”中的其中一道练习题,非常推荐大家试一试。

    以上就是今天的分享,对源代码感兴趣的朋友,可以在公众号后台回复“语音识别”获取源代码下载链接。

    如果大家有兴趣,欢迎关注我的微信公众号“打浦桥程序员”,谢谢

    展开全文
  • 主要函数:parfor并行 for 循环说明:parfor LoopVar = InitVal:EndVal; Statements; end在生成的 MEX 函数中或在共享内存多核平台上并行运行的 C/C++ 代码中创建一个循环。parfor 循环对 InitVal 和 Endval 之间的 ...

    主要函数:parfor

    并行 for 循环

    说明:

    parfor LoopVar = InitVal:EndVal; Statements; end

    在生成的 MEX 函数中或在共享内存多核平台上并行运行的 C/C++ 代码中创建一个循环。

    parfor 循环对 InitVal 和 Endval 之间的 LoopVar 值执行 Statements。LoopVar 指定由整数值组成的向量,这些值按 1 递增。

    parfor (LoopVar = InitVal:EndVal, NumThreads); Statements; end

    在创建并行 for 循环时,最多使用 NumThreads 个线程。

    写法案例:

    parfor rowIndex=1:regionRow

    point=cell(regionCol,4);

    for colIndex=1:regionCol

    disp(['rowIndex =',num2str(rowIndex),'colIndex =',num2str(colIndex)]);

    mdl = stepwiselm(full,pointLpmay{rowIndex,1}{colIndex,1},'quadratic','Verbose',0);

    point{colIndex,1}=mdl.Formula.Terms; % 方程的项与结构

    point{colIndex,2}=mdl.Coefficients.Estimate; % 方程项的系数

    point{colIndex,3}=mdl.Rsquared.Ordinary; % 判定系数

    point{colIndex,4}=mdl.Rsquared.Adjusted; % 调整判定系数

    end

    pointLpmaA{rowIndex,1}=point;

    end

    注意:

    此种方法开启并行默认使用最大线程数,而MATLAB默认允许的最大线程数为12,若计算机的真核数量超过12,可以用以下方式进行扩展:

    %%% 设置MATLAB可以联通24个线程(否则默认最大线程为12) %%%

    c = parcluster('local');

    c.NumWorkers = 24;

    parpool(c, c.NumWorkers);

    已经开启并行工具箱之后,若要重新开启,需要先关闭之前的并行,再开新的,关闭方法如下:

    delete(gcp('nocreate'))

    参考资料:

    展开全文
  • MATLAB并行计算工具箱就是这种需求的产物,它能很好地实现在多核系统上进行并行运算。文章以典型的数值计算问题为例描述如何使用基本的两种并行运算方式:线程和并行for循环。典型数值计算问题为了举例说明...

    相关

    |

    标签:

    |

    字号大中小

    订阅

    maxNumCompThreads

    命令

    由于处理器时钟频率的限制,增加核并不意味着是计算性能的提高。为了充分利用新的多核硬件在

    性能上的优势,软件的基层结构需要向并行计算转换。

    MATLAB

    并行计算工具箱就是这种需求的产物,它

    能很好地实现在多核系统上进行并行运算。文章以典型的数值计算问题为例描述如何使用基本的两种并行

    运算方式:线程和并行

    for

    循环。

    典型数值计算问题

    为了举例说明这两种方法,我们使用

    MATLAB

    测试一个有关

    Girko

    圆定律的假设。

    Girko

    圆定

    律的内容是:一个

    N

    的随机矩阵(它的元素服从正态分布)的特征值位于半径为的圆内。假设

    Girko

    定律能被修改应用到奇异值上。这个假设是合理的因为奇异值是一个变换了的矩阵的特征值。首先我们用

    MATLAB

    代码实现

    Girko

    圆定律的一个实例:

    N = 1000;

    plot(eig(randn(N)) / sqrt(N), ‘.’);

    这段代码运行后得到图

    1

    ,图上每个点代表复平面上一个特征值。注意所有的特征值都位于半径为

    1

    ,圆心在轴的原点的圆内,特别指出的是结果与

    Girko

    圆定律是一致的,特征值的幅值没有超过矩阵维

    数的平方根。

    展开全文
  • parfor循环是Matlab并行计算工具箱用于并行计算单循环的工具,并行度与CPU所具备的核心数有关,一般来说,经过处理的for循环都能够改为parfor循环以提高并行处理速度。Matlab中的CPU并行处理功能如下图所示进...

    Arranged By Zhonglihao @ 2018

    **请确认Matlab安装时点选了并行计算工具箱

    第一章:parfor循环并行计算

    parfor循环介绍

    parfor循环是Matlab并行计算工具箱用于并行计算单循环的工具,并行度与CPU所具备的核心数有关,一般来说,经过处理的for循环都能够改为parfor循环以提高并行处理速度。Matlab中的CPU并行处理功能如下图所示进行开启,开启后也可以查看您的计算机具备多少个物理核心数(不支持超线程逻辑内核处理):

     

    图1-1 点击Matlab软件左下角中图标

    按”Start parallel pool”开启CPU多核并行计算

     

    图1-2 图标显示蓝色条纹代表

    处理器多核并行计算已启用

     

    哪些场合适合和不适合开启并行计算:

    ·某些子循环所需要的计算量与其他子循环的计算量并不很相近,造成处理器需要等待最慢的一个自循环完成以继续同步物理核心,这种情况下使用并行没有很大的意义;

    ·一些简单的子循环例如蒙特卡洛仿真或参数扫描,这种情况下,多个核分配到的子任务稍短且时间消耗较为一致,此时使用并行计算是具有意义的;

    ·对于频繁读写内存的算法,开启并行计算并不是一个好的方案因为数据同步的时间消耗远超过计算的时间,此时并行的效率并不高,相反,如果一个算法较多的时间消耗在计算上而不是读写数据上,则使用并行计算会有较大的提升;

     

    下面通过一个简单的例子说明如何把for循环改装为parfor循环:

    Code #1-1
    1.tic  
    2.n = 200;  
    3.A = 500;  
    4.a = zeros(n);  
    5.for i = 1:n  
    6.a(i) = max(abs(eig(rand(A))));  
    7.end  
    8.toc  

    如代码片1-1所示,该实例通过计算一个随机矩阵A的算法并把结果赋值到数组a中存储,循环内容之间计算是相互独立的,附加一个matlab的tic-toc语句来测量整片代码的计算时间,结果如下图所示:

     

    作者使用的是笔记本处理器型号为i5-7200u,有2个物理内核,没经过并行计算优化时,代码的计算时间消耗为25.69秒左右。下面为经过parfor并行处理的代码片#1-2:

    Code #1-2
    1.tic  
    2.ticBytes(gcp);  
    3.n = 200;  
    4.A = 500;  
    5.a = zeros(n);  
    6.parfor i = 1:n  
    7.a(i) = max(abs(eig(rand(A))));  
    8.end  
    9.tocBytes(gcp)  
    10.toc  

    输出的结果为:

    从上图中可以看到,在双核并行处理的作用下,处理时间从26秒提高到了16.8秒,理想时间应该为没有使用并行计算时间的二分之一,但其中的延迟包含了核心之间的同步和读写数据的延迟。

     

    下面举一个使用parfor时效率并不高的例子

    以下的代码片#1-3为通过循环产生一段正弦波信号数据:

    Code #1-3
    1.tic  
    2.n = 1024;  
    3.A = zeros(n);  
    4.for i = 1:n  
    5.A(i,:) = (1:n) .* sin(i*2*pi/1024);  
    6.end  
    7.toc  

    改写为并行计算parfor:

    Code #1-4
    1.tic  
    2.ticBytes(gcp);  
    3.n = 1024;  
    4.A = zeros(n);  
    5.parfor (i = 1:n)  
    6.A(i,:) = (1:n) .* sin(i*2*pi/1024);  
    7.end  
    8.tocBytes(gcp)  
    9.toc  

    从结果观察可以发现,代码改写为并行后速度并没有提升,反而比单核计算时要慢得多,是因为该代码片的数据传输量较大,导致多核处理时无法展现出优势。

     

    展开全文
  • 内层for循环可以在k不变时遍历b的值,进而计算x的最大值,外层for循环可以遍历每一个k值(或者把关于k、b的循环反过来也行),这样就可以遍历每一个k、b的值,计算出x的最大值了。至于微分方程的求解,可以直接利用ODE...
  • matlab并行计算之parfor

    千次阅读 2018-12-03 15:22:10
    提高matlab代码的执行效率,是很多码农们的迫切愿望和需求。...但是,现实中很多时候我们是需要使用到for循环的,为此可以使用matlab并行计算来提高代码执行效率。 并行计算的原理就是将代码分配到多...
  • matlab 并行计算

    2017-12-04 22:23:53
    parfor j = 1:img_num %逐一读取图像  %%%%%%%  end 相较于for循环,速度简直云泥之别
  • matlab 并行计算使用心得 (不断补充)

    万次阅读 热门讨论 2017-03-17 23:24:26
    跑了大型程序时,发现 for 循环太多拖延了速度,尝试使用并行计算并行计算时,用parfor取代for,进行循环计算。但在变量使用上有不少注意事项,慢慢总结写出来。 1. 首先是临时变量的使用。 临时变量 ...
  • Matlab并行计算示例(一)

    万次阅读 2015-03-25 14:42:09
    使用Matlab实现算法较为简单,但是涉及for循环时,效率比不上C++。对于一个多核处理器,不开多核并行计算,实在是对不住Matlab自带的并行计算功能。parfor循环较为简单,但是它对for循环中的变量要求比较严格,稍有...
  • 刚开始接触matlab并行计算,以前旧电脑从不考虑这些的小本i7四核八线程16G内存,64位win7和matlab 2012b,任务管理器显示有8个框当用普通for循环,只有一个框接近100%,cpu使用率只有12%左右默认配置下,键入...
  • 刚开始接触matlab并行计算,以前旧电脑从不考虑这些的小本i7四核八线程16G内存,64位win7和matlab 2012b,任务管理器显示有8个框当用普通for循环,只有一个框接近100%,cpu使用率只有12%左右默认配置下,键入...
  • 一般处于for循环内部的瓶颈函数都,这种情况都很适合并行计算。 这种情况同样适用于C++框架下的openMP,将瓶颈算法改成并行模式并将关键输出保存成文件。 %这个文件可以根据自己的需要进行更改,比如说变量名,变量...
  • **请确认Matlab安装时点选了并行计算工具箱 确定parfor中的循环代码片计算是独立的 Code #3-1 1.clearA 2.fori=1:8 3.A(i)=i; 4.end 5.A 6. 7.%改写成parfor并行 8.clearA 9.parfori=1:8 1...
  • 嵌套的parfor循环和for循环 如下面的代码所示: Code #4-1 1.parfori=1:10 2.MyFun(i) 3.end 4. 5.functionMyFun(i) 6.parforj=1:5 7. ... 8.end 9.end 代码#4-1为在循环里面调用一个函数,同时该函数也使用...
  • 使用快捷键Ctrl+Shift+p,输入ss matlab,也可以将文本高亮显示为MATLAB。但架不住脚本打开频繁啊!如何将.m关联给MATLAB,一劳永逸地解决这个问题呢?有的网站说打开 Objective-C.sublime-package 编辑关联文本后缀...
  • 并行工具箱支持交互式并行计算,并且通过并行池中运行的多个workers上加速工作流。在并行池中的workers上使用parfor执行for-loop迭代。当你已经形成你的代码,并且定义慢的for-loop,尝试增加parfor进去。在桌面开发...
  • Matlab CPU多核并行计算

    万次阅读 2018-03-13 18:04:43
    在使用Matlab编写程序的时候,时间的消耗大部分是因为...Matlab开启多核并行处理的方法比较简单,仅仅是需要将“for”修改为“parfor”。 最新几版的Matlab都是将并行处理的工具包 parallel pool自动打开,不需要...
  • Matlab并行编程

    千次阅读 2017-04-27 19:57:33
    本文讲的Matlab并行编程包括并行for循环和数据并行(同一个程序运行在不同的数据上),分别对应于parfor、spmd方法 1. 并行方法 parpool %开启并行池(parallel pool) %parallel program delete(gcp('nocreate')...
  • matlab并行运算方法

    万次阅读 多人点赞 2017-05-31 22:47:37
    matlab并行运算方法matlab在计算大数据内存以及大矩阵运算时,单核运算显然无法满足高速的运算需求。其实matlab提供多核运算的解决方案,这里先介绍最简单的两种 parfor distributed 打开并行运算的方法是parpool(4)...
  • 在SPGD调参过程中,一般需要在某一参数下多次运行才能代表该参数实际价值。 SPGD计算量大主要在两个方面,一...由于多次重复SPGD算法的for循环上一次运算与本次无关,完全可以用并行计算的方法,在matlab中可以用p...
  • parfor就是paralle+for,也就是并行for循环,它的大致意思是会给你自动构造几个matlab的执行进程,并行地处理你的数据。这里的数目最大的数值是你的CPU的核数,比如说楼主的电脑是四核的,在任务管理器里面就看到...
  • 学习笔记-MATLAB并行运算

    千次阅读 2018-05-04 15:31:55
    最好的解决for循环计算速度慢的问题是用矩阵运算代替循环。... 学习MATLAB并行算法用于模型训练中的for循环:https://blog.csdn.net/awakeljw/article/details/72824674 matlab在计算中比较耗时的运算主要是循环与...
  • 【高性能】Matlab并行计算之spmd

    万次阅读 2016-03-02 17:23:07
    parfor的并行思想是把同一批数据分给for循环中不同的循环体,进行处理。spmd的思想则是不同的数据,用同一个程序处理。当然这个程序内部可以编写针对不同情况的处理代码。spmd的内部实现代码限制很少,spmd的灵活性...
  • 第一个分太高了要50,过分,通过阅读和学习,读者可以掌握基于多种平台(多核、多处理器、集群和GPU等),利用多项技术(Matlab并行计算工具箱、多线程MEX文件、OpenMP和GPU等),学习理解Matlab并行程序设计的原理、...
  • 通过阅读和学习,读者可以掌握基于多种平台(多核、多处理器、集群和GPU等),利用多项技术(Matlab并行计算工具箱、多线程MEX文件、OpenMP和GPU等),学习理解Matlab并行程序设计的原理、方法和技巧。《实战Matlab之...
  • Matlab并行(持续更新)

    千次阅读 2014-11-05 10:21:03
    Mathwoks在Matlab R2007a版本的Parallel Computing Toolbox(并行计算工具箱)中加入了并行循环parfor-loops,对于每一步可以独立于其他步的循环,计算效率可以有较大幅度的提高。以前简单的for循环for-loop是顺序的...
  • Matlab 并行编程的一些test

    千次阅读 2013-04-28 23:44:49
    Mathwoks在Matlab R2007a版本的Parallel Computing Toolbox(并行计算工具箱)中加入了并行循环parfor-loops,对于每一步可以独立于其他步的循环,计算效率可以有较大幅度的提高。以前简单的for循环for-loop是顺序的...
  • 本书对基于Matlab 的并行程序设计的原理进行了深入的剖析,并结合各章给出的大量实例对基于Mat—lab 的并行计算程序设计方法和技巧给出了详细的说明。通过阅读和学习本书的内容,读者可以掌握基于多种平台(多核、多...
  • 《实战Matlab之并行程序设计》通过阅读和学习,读者可以掌握基于多种平台(多核、多处理器、集群和GPU等),利用多项技术(Matlab并行计算工具箱、多线程MEX文件、OpenMP和GPU等),学习理解Matlab并行程序设计的原理、...
  • 对于次数确定的循环(for循环),如果循环的‘计数模块’对于单次循环是独立的(计算结果与循环体的执行顺序无关),那么理论上可以将整个循环拆分成几个子循环,然后将子循环的结果合并。 编写Matlab并行程序时,...

空空如也

空空如也

1 2 3
收藏数 49
精华内容 19
关键字:

matlab并行计算for循环

matlab 订阅