学习LabVIEW(十二)——公式节点

2015-08-19 11:39:45来源: eefocus 关键字:LabVIEW  公式节点
    除了MATLAB节点,LabVIEW还提供了公式节点。在公式节点中可以用非常接近C的语法编写代码实现计算。之所以说是“非常接近C”是因为在一些细节上它和C还是有些许差别。
    这次拿之前在《学习LabVIEW(八)——用循环处理数组》中给出的代码做实验,将最内层的循环改用公式节点来实现。之前的最内层循环如下图所示:


其实现的运算相当于:
z = 0
for k in range(128):
    z = z * z input;
    if abs(z) > 2:
        break

还没有习惯G语言的时候看到这个框图还真是一眼难以看出运算的表达式。对于常年使用文本形式的编程语言的人而言,用公式节点改写这个迭代过程的话一定会直观很多吧。
    但是一旦用起来才发现一个严重的问题:公式节点不支持复数!想来也在意料之中,毕竟是基于C的语法,而C在C99标准之前没有内置的复数支持。也许对复数的支持是未来语言的趋势,已经有越来越多的语言或是内置,或是以库的方式提供了对复数的支持。但不管怎么样,我们现在用的公式节点是没有复数支持的,如http://digital.ni.com/public.nsf/allkb/9A31DC2FF5C7C5DF86256B45007AA115所述。如果用极坐标的方式描述复数,我们就得手动展开复数的加法,如果用直角坐标的形式描述,就得手动展开复数的乘法。想想还是用直角坐标的形式吧。
    一开始写了如下的一段代码,可是运行怎么也不对:


复数的展开怎么看也没有错误啊。
    最后在MATLAB中试着算了一下,终于发现出问题的地方了:在for循环内部,将实部的计算结果赋值给了zReal,在下一行计算zImag时,用的zReal就已经是新的zReal值了,而这里所需要的是上一次的zReal值。居然会犯这种错误,难道是很多年前写Verilog代码的后遗症?
    解决方法很简单,在第一行计算实部的时候,将计算结果保存在另一个变量temp中,等zImag计算完成之后,再将temp中存储的值赋给zReal。修正的程序如下图所示:


还有一点需要注意的就是公式节点似乎没有“double”,取而代之的是“float64”。
    总结一下感想,公式节点不支持复数,Array Programming也不及MATLAB,对其描述能力有点失望。但因为不用像MATLAB节点那样通过ActiveX通道进行进程间的通信,效率应该还是可以的。

关键字:LabVIEW  公式节点

编辑:什么鱼 引用地址:http://www.eeworld.com.cn/Test_and_measurement/2015/0819/article_12834.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:学习LabVIEW(十二)——公式节点
下一篇:学习LabVIEW(十一)——UTF8字符串解码

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利
推荐阅读
全部
LabVIEW
公式节点

小广播

独家专题更多

东芝在线展会——芯科技智社会创未来
东芝在线展会——芯科技智社会创未来
2017东芝PCIM在线展会
2017东芝PCIM在线展会
TI车载信息娱乐系统的音视频解决方案
TI车载信息娱乐系统的音视频解决方案
汇总了TI汽车信息娱乐系统方案、优质音频解决方案、汽车娱乐系统和仪表盘参考设计相关的文档、视频等资源
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2017 EEWORLD.com.cn, Inc. All rights reserved