在LabVIEW中经常使用实时滤波(逐点滤波),输入参数都不变的情况下,如果被单次调用,每次运行的结果都会是一样的;如果被放在一个for循环或者while循环中使用,则每次运行的结果是不一样的。
工具/原料
LabVIEW
原因分析
1、进入到labview中的逐点滤波程序框图中,可以看到,在底层其实有一个首次调用的判断,如果是首次调用则会初始化滤波参数,进行一次全新的滤波,如果不是首次调用,则会续用前一次滤波的参数和结果,进而实现逐点实时滤波。
2、因此,当把逐点滤波放在循环中的时候,内存中一直存在的,除了循环的第一次外,其它次循环中,该逐点滤波都是被判断为非首次调用,因为即便输入参数不发生改变,逐点滤波也会把每一次的输入参数作为新来的数值进行计算,因此就会发生,每次循环中滤波出来的数值是不一样的,而且随着循环次数的增加,输出会慢慢逼近输入,最终会跟输入一致,就相当于是一直采集到的新的数值,但是数值的大小没有发生过改变,类似于一条直线进来后进行滤波。
3、此外,如果把该逐点滤波封装成dll,该dll也存在这种情况,因为dll一旦加载,就一直存在于内存中,即除首次外,其余时间均为非首次调用。