看到“征”关于滤波的问题有感。
大伙如果看到了垃圾,就吐口痰鄙视之,掩鼻而去即可
————————————————————————————————
平均值滤波用得最多,但是俺居然没曾想过把它“模拟化”。
俺最早用一阶滞后的时候,根本没有参照理论和书本,是灵光一闪想到的算法,事后在书本中才找到了理论支持。那玩意儿也叫最普通的“低通滤波”。
几年以后,我把它与“测不准原理”联系起来,从逻辑或语言范畴做了一些理解。测不准原理的动量与位置无法同时准确测量,这是因为,动量包含时间的量纲,所有包含时间这个基础量纲的物理量,在测控时,必然反映出对时间的积分或者微分效应,这个物理量,必然是“历史”的或者“未来”的,不可能是“现在”的。而不包含时间这基础量纲的物理量,比如说位置,你能看到的,一定只是“现在”,你看第二眼的时候,这个世界已经发生了变化,你看很多眼的时候,一定就成了历史,那不是一个位置点,而是一个轨迹。
如果你能理解我上面所说的。你可以把数值测控与它联系起来:测控数据的准确性与稳定性,是不可同时得到的。这与我理解的测不准原理,原因一样。准确性这文字背后,意味着“实时性”,实时性,意味着“现在”,只抓住现在,这个数据,一定不能经过滤波才是真正的“现在”,一旦滤波,就意味着你统计了这数据的“历史”,你看到的,将是一个“轨迹”。
对实时性要求高的运动控制,有时要放弃“历史”,着眼于“现在”和“未来”
————————————————————
对于“征”同学的那问题言,其实很简单,N次滤波,每次采样周期假设为T,平均值滤波,只不过是在时间轴上,对测控数据进行了N*T这么长时间的积分处理。把这离散式,直接改成积分方程,然后除以那个N,就是模拟方程了。
一阶与平均,我曾经都常用。
你对于我,如同我对于电工;理论上,是你理所应当的特长。俺虽然对于理论的复习与应用,没有和你一样的机会,但并不意味着我不能从理论上对两种滤波有认知,即使只是肤浅的工程近似认知。
在我肤浅的知识层次看来,平均与一阶相比,平均:主要是对参量在时间上进行了积分处理,一阶:主要是对参量在频率(也许说“变化率”更浅显吧)上进行了处理。在同样的采样周期和采样数量是,一阶是可以选择处理“变化率”的,而平均在此面前的处理结果是固定的。
也正因为如此,对于实时性要求高的处理,平均的算法,要稳定,就必须足够的时间,定然牺牲掉了“实时”性能;一阶,仅需要前后两次采样即可从“变化率”上来处理运算,在高实时性的运算处理上,一阶赢了平均。
本质上,平均是对时间的积分,必然带来滞后,为了抵消这滞后,PI调节器就需要快速响应,比如增大P,然而增大P,又容易超调,很矛盾。一阶呢,它本质上,是对采样数据进行了“微分”处理或者说我说过的有“微分效应”,因而,在处理速度上有了优势,在你所谓“带宽”的选择上有了优势,如果一阶滤波的参数调节适当,给PI调节器带来的压力就小了很多,P不需要调那么高。
但是,一阶的处理,整型运算有明显的“稳态误差”,也因此,需要调节I在稳态误差上下点功夫。当然,对一阶“稳态误差”的消除,应该是你们作算法处理的基本功之一。
俺最近处于疯狂状态,胡言乱语的,说得中与不中,您就当耳旁风
呵呵,一会儿要出发了。俺的知识在大硕面前确实很贫乏喽,但毕竟俺知无不言甚至不知也言。
您大硕同学却给我们抛下了多少有用的东西?你指出了多少有用的东西?我不知道的东西很多呀?你把我不知道的说出来呀?我只看到你言而无物。
我能说了一个“稳态误差”,至少说明俺知道基本离散公式整型运算偏差的存在,也许在你小硕面前一钱不值,但你知道,天下有多少工控人都不知道这些问题吗?天下不懂运用一阶来做滤波的工控人有多少?
俺在这里扯淡,也希望你或者通讯网们提出一些自己的技术观点和知识,可惜看不见一二。
术业有专攻,可就是不见你们拿出来,只看见你们对一切的否定,你大硕从工控网这种普通工控人常来的地方得到了知识,再或者看看我们的错误得到了自信,然而,你给了我们多少?摸摸自己的良心喽,嘿嘿
俺非常希望看到你对俺错误的理论分析,如果你分析的很好,俺会虚心接受的。如果你拿不出来什么东西,还只否定一切,那就莫怪我们山寨电工对你的看之不上了,呵呵
俺对老帅的人品一直还比较敬佩的。
对于征同学“技术是有所保留的,是有知识产权的。除了你的老师对你能够畅所欲言之外(虽然有些内容跟实际脱节很大),别人没有义务告诉你应该怎么做。如果别人给你了对一个提示,已经很不错了,至少是一种思路,可以带给你看问题的一个新的角度。 做技术的,要自己去多思考!”,和你相比,我当然是傻冒一个,走到哪里,毫无保留,从未对自己的“小技巧”保守过,亲手亲口把自己苦想解决的技术难点讲给后来人——因为我相信自己的能力,我能解决更为复杂的技术问题,也能对非技术的其它方面问题找到症结和处理方式。
既然征同学仍然如此保留,那是你个人的事情,俺无权干涉;但是,俺为人开放,俺这个帖子,不欢迎保守的毫无技术奉献的人来拍砖,“前面施工,请您绕行”。
只进不出,不符合俺的网络共享精神,为俺不耻。
另,对于征同学所谓的“基于模型的运动控制技术”,我不知道他在这个控制技术里做了哪几部分工作。虽然俺不是搞运动控制的,但是征同学的“****技术”这几个字我还认得。
如果说,“基于模型的运动控制技术”中,模型的建立,是抄用前人现成的简单经验,那么,你的工作与仿真没有本质区别,这工作,基本上是一个好学一点的大学生都能搞定。如果你厉害,自己搞了高阶的系统辨识,自己做了系统模型,自己做了高阶的控制处理,那俺的确可以佩服你到五体投地。——但是,你能吗?仅仅思考了一个平均和一阶的滤波处理的问题,都高傲成“不可说”的地步,当作技术专利的地步,俺想不出这种态度的你,能做出多大成绩。
老帅,通讯网,说得都对。实际做自动化工程的人员,大部分面对的是各种各样的控制目标,许许多多的控制目标,不论你博士课本还是硕士课本,都给不出控制模型。你基于模型会调PID,没有模型了怎么办?那就是很实在的见招拆招,就是“山寨电工”想到的各种“很土”的控制方式,有的东西甚至看起来很可笑,但是能解决实际问题。你基于模型的PID,也就是象牙塔里不粘风尘的天之骄子们做的,进不得我们山寨的圈子。你会谈建模,建模那么容易?你要是辨识、建模搞得好,就不谈什么“基于模型”的运动控制了,建模你要搞得真厉害,中国工业,你就会是老大。
就我的工作经历中,遇到过许多工控人,大部分是应用层次,不知道一阶滞后算法的实际应用,就顺着征同学的不可说,在这里普及一下一阶滞后的滤波算法。
“
a=0~1
本次滤波结果=(1-a)*本次采样值+a*上次滤波结果
”
拉氏变换、时域频域算式就不写了,除了大硕大博们,没几个人喜欢看,只谈离散算式。假设Y(K)为当前你要获得的滤波结果,X(K)为本次采样值,Y(K-1)为上次滤波结果,那么有Y(K)=(1-a)*X(K)+a*Y(K-1)
此式可变换为Y(K)=X(K)+a*(Y(K-1)-X(K)),我之所以变换,是要说明:a*(Y(K-1)-X(K))这算式,正是前一次运算值与最新采样值之差,在采样周期或者运算周期一定的情况下,在这个求差过程中,恰好反映出测控数值的变化率,亦即产生了我所谓的“微分效应”,如果传函分析,这个“微分效应”是在反馈环节上(其实俺把传函分析早忘光了,掩面偷笑中)。我说得未必对,甚至是胡乱解释的,如果你是高人,请有针对性的指出,只说了对错,但说不出所以然,不是搞技术搞科学的人应有的品质。
这个算式中的a,是可选择的滤波常数,你需要这个测控参数有多稳定、需要它有多滞后,就可以选多大,自己留个人机接口,可以去试验体会。
当然,早有高人指出这算法“不能消除滤波频率高于采样频率的1/2的干扰信号”
再说明一下上面讨论中出现“稳态误差”这个词,是俺瞎说的。稳态误差本来是指一个控制指标,表面意思是指稳态情况下,给定数据与最终控制的实际数据的偏差,往往有一个百分比的相对概念,就是用这偏差除以给定。
在数字运算中,为了提高运算速度,往往用整型运算,我们可以发现,假设那个a取1/4的时候,如果Y(K-1)-X(K)小于4,那么,整形运算中,这个4,一定会丢掉。就是说a*(Y(K-1)-X(K)),将会为0,于是,这滤波行为,就产生了,在达到稳定情况下,测控数据与实际数据,有了这个“稳态”“误差”。当然,这个偏差通过改善运算方式,是可以解决的,比如说,先把采样数据或滤波数据放大若干倍,再来运算,算完了,再缩小回去。
在PC104板的DOS系统中,我也试过这算法的符点运算,其结果是,滤波最终数据无限接近给定,但始终有那么.00000000001的偏差。
这个道理,早在何立民的那早期单片机技术选编里,有一篇文章提到过。而我呢,在观察到这问题的时候,还没看过那书那文章,更没看过书本上的一阶滞后算法,也算是自知自觉了,