Fourier变换是目前信号与系统分析中的主要工具,但在电信技术发展史上,非正弦信号的研究与应用也受到过重视,目前由于数字技术和计算机科学的迅速发展,利用开关元件产生和处理数字信号比较简便,因此类似于Walsh、Haar以及Rademacher函数重新引起了重视,它们只取两个数值,同时它们符合正交特性。LV本身也是有对于Walsh变换的现成VI可供使用的,但本文利用LV从原理上进行重新编写VI,从而实现对任意周期函数的Walsh变换。
Walsh的三角函数定义如下式:
<?xml:namespace prefix = v /> k的二进制表示式为
实现Walsh函数的VI程序如下图:
Walsh Function by t .vi
整个程序根据上式来计算的,其中值得一提的是对于一个整数k进行2进制分解,可以按如图中红色区域的方法方便地得出。这个可能大多数人都知道,但是我使用LV用了差不多1年多后才知道能够这么处理的,之前都是自己用For来做的,如果你没想过或找不到这个Number to Boolean Array,是不太可能知道的。这一方面是LV的魅力所在,另一方面这也是LV需要改进的地方。
Walsh变换与Fourier变换类似,公式如下,对于x(t),周期为1,可得:
其中:
在LV中实现转换也相当简单,如下图:
其中红色区域是依靠循环进行近似积分,除此之外,还可以用专门的积分VI进行,如下图所示:
下图是用Walsh变换将Cos函数进行转换的例子,白线为原信号(Cos信号),红色为经过Walsh变换后得到的曲线,下图为相应的误差,Walsh阶数可调。
虽然整个例子的技术含量不高,但是对于一些信号处理的方法,如果能够自己用LV来实现,会使得编程更加灵活,从而减少对现成VI的依赖,这在各个方面都是有益处的。
文章评论(0条评论)
登录后参与讨论