[问题] 如何用C语言写低通滤波器

楼主: cyBochu (Fathome)   2020-05-03 15:41:42
各位好
请问如何用C语言写一个一阶低通滤波器的程式
目前我了解到一阶低通滤波器算法 Y(n) = aX(n)+(1-a)Y(n-1)
其中 a:滤波系数 X(n):本次采样值 Y(n-1):上次滤波输出值 Y(n):本次滤波值
然后也参考了网络上别人写的code 但是看不懂到底是怎么算的
参考网址如下: https://blog.csdn.net/kilotwo/article/details/78794450
请各位大大们解惑了
作者: Schottky (顺风相送)   2020-05-03 16:02:00
先说说你想干嘛,看你找来的范例不像要做讯号处理既然不是讯号处理那你究竟要什么,定义清楚才能讨论如果你真的是要做讯号处理,FFT 转 freqency domain,切掉不要的频率再转回 time domain 即可。这样你要高通、低通、带通、甚至等化器效果都一次搞定
作者: Lipraxde (Lipraxde)   2020-05-03 16:06:00
先学好线性系统
作者: alan23273850   2020-05-03 16:14:00
why not MATLAB? uh?
作者: HSUFIT (FireDance)   2020-05-03 21:08:00
他的范例设计上直接跑在一个处理器,他假设这个处理器厂商提供了API可以读到当前的输入数值,所以你看到的读取其实都是在做“采样点”,这个范例也都是在时域做操作,所以把他做的事排一排其实就很好理解了算术平均率波和滑动率波其实很类似,可以对照着看,两者差别在于平均只取当下这次的平均,而滑动的delay会写在函式外面,是针对连续取值的变化型这份是比较偏实战型的code,要拿来交作业的话要自己转换一下思维,毕竟实体机器没有可以看到所有采样点的上帝视角,只能在连续时间下读adc的值再delay一个点一个点拿囉
作者: qscgy4 (有点厉害)   2020-05-04 09:01:00
这公式没什么难的吧,很常见的滤波原理 a介于 0~1.0之间假设你可以读到某个ADC值,又希望数值不要太random那你就可以写一个简单的公式 例如:新的ADC = 这次ADC x 0.9 + 上次ADC x 0.1以上式为例 a = 0.9,ADC = a*current_ADC+(1-a)old_ADC这也没什么好解释的 就稍微自己看一下吧,另外要注意这种写法最造成讯号延迟    会
作者: Lipraxde (Lipraxde)   2020-05-04 12:36:00
没延迟的低通滤波器要怎么写?零相移的我倒是会一点
作者: qscgy4 (有点厉害)   2020-05-04 13:52:00
我比较好奇怎么实现real time 零相移滤波器
作者: w0005151 (蓝厅)   2020-05-04 15:32:00
zero phase shift怎么实现的?理论上很小但不为0不是吗
作者: Lipraxde (Lipraxde)   2020-05-04 17:51:00
要 real time 的话我只会线性相移的,很抱歉
作者: yoyololicon (萝莉大好)   2020-05-04 18:52:00
FIR/IIR的差别和应用 了解一下 就会懂推文在说什么了realtime zero phase shift写出来应该能拿诺贝尔奖吧

Links booklink

Contact Us: admin [ a t ] ucptt.com