原帖 由 800ci 于 11-4-8 22:24 发表
特别想知道发生什么了,门子都出现了……
我以前上大学的时候也学习过一段时间Matlab,关于巴特沃斯滤波器,不就是一个直接的函数Butterworth么……
还有,iir是无限冲击的序列,fir单位相应有限,就是相位误差不同 ...
又是一个学理工的兄弟,欢迎~~~
对的,matlab里面有各种fir和iir的设计工具,而且非常好用,但matlab里面滤波工具箱主要功能不是干这个的,
比如说去年搞个股票曲线的滤波,直接matlab算出几个IIR系数一套就行了,但对于音频处理,matlab的
滤波工具箱不能导出算法.....总不能做固定参数的EQ效果器啊......
而燕子李三大师的代码,可以参考iir那段,完整的再现了iir的系数算法,不过我还没看完....
但即使是这段代码,虽然我还没有看完,但基本应该是基于一个模拟系统的响应给出的,
数字IIR基于模拟系统的变换算法很成熟,基本来说,某个大师在某个时候设计了个模拟滤波器,
然后某个人了解了这位大师的意图,一算~得到的直接就是非常牛的数字滤波器,误差几乎仅发生在频谱层叠.
这也就是说,没有牛的模拟滤波大师,设计团队也很难得到牛的数字滤波.这也是为什么很多新的效果器公司做出来的EQ
反倒是FIR滤波,而且实际上,线性相位的FIR的算法是最简单最直接的.....一点都不难...
对于FIR和IIR来说,相位的问题只是问题之一,我没有学过单位圆,零极点相关的滤波设计,但从小波分析上说,
一个滤波,或者说频谱分析的精度与时间精度是成反比的,满足测不准原理,比如,在44100采样率下,
要满足1Hz的频谱处理精度,FIR滤波器至少长度要达到44100个点.这对于CPU来说几乎是不可能的.
而IIR由于本身就是无限冲击响应,因此长度天然地无穷大(数学上,计算机中不是),所以可以实现任意尺度的
频率分析或者EQ.可以做一个实验,白噪音+sine波,使用waves Q10可以完全消除sine波而几乎不破坏白噪音的频谱,
但同样线性相位EQ(线性相位EQ几乎只能是FIR),就根本达不到.这与EQ本身的Q值调整没有关系.
至于算法上,IIR没有简便算法,但精度强大,FIR用快速FFT变换来做,也说得过去,但依然比较费资源.
其实来说,最强的滤波是小波滤波,根据需要的频域尺度自动调整时域长度.
最近刚看了一个用数论变换计算FFT的快速算法,巨强!
对了,说到这个,前几天和KVR上的几个人讨论了一下关于卷积混响的计算问题,一个10s的卷积混响采样计算,
即便是使用分段快速FFT,也根本不可能计算441000个点的卷积! 后来有高手想到由于混响采样的高频衰减规律
有可能是在最后几秒时,降低了采样率,甚至由于混响很少有10000以上的声音,有可能一开始就降采样一倍来计算.
所以说.....音频DSP这水太深.........太深..............