FreeVerb中滤波器使用总结
来源:互联网 发布:基因优化液 编辑:程序博客网 时间:2024/06/05 22:55
如需转载请注明出处!
FreeVerb核心算法还是使用的Schroeder Reverb算法,采用了8个comb filter并联,4个allpass filter串联的结构。
鉴于Google出来的FreeVerb中使用的滤波器数学表达良莠不齐,为了避免混淆视听,结合算法实现,本人对FreeVerb中实际的滤波器数学表达进行总结描述。
Lowpass comb filter: (在comb的feedback结构中,加入一阶低通滤波器来模拟低频-高频成分不同的反射传播衰减程度)
Allpass filter:
代码表示为:
inline float allpass::process(float input)
{
float output;
float bufout;
bufout = buffer[bufidx];
undenormalise(bufout);
output = -input + bufout;
buffer[bufidx] = input + (bufout*feedback);
if(++bufidx>=bufsize) bufidx = 0;
return output;
}
实测该allpass filter并不满足严格的allpass特性。
为了更明晰的展示Freeverb中所使用的allpass filter,代码可改为:
inline float allpass::process(float input)
{
float output;
float bufout;
bufout = buffer[bufidx];
undenormalise(bufout);
buffer[bufidx] = input + (bufout*feedback);
output = -buffer[bufidx] + (1+feedback)*bufout;
if(++bufidx>=bufsize) bufidx = 0;
return output;
}
真正的allpass filter可表达为:
故可修改FreeVerb源码:
inline float allpass::process(float input){ float output; float bufout; bufout = buffer[bufidx]; undenormalise(bufout); buffer[bufidx] = input + (bufout*feedback); output = -buffer[bufidx]*feedback + bufout; if(++bufidx>=bufsize) bufidx = 0; return output;}
- FreeVerb中滤波器使用总结
- Opencv中卡尔曼滤波器的使用
- KALMAN滤波器入门总结
- 各种自适应滤波器总结
- matlab 中使用fir滤波器后相位延迟如何补偿
- opencv3中scharr滤波器
- 工作中常用滤波器
- opencv滤波器的使用
- 2017.06.28 Gabor滤波器总结
- matlab中实现Gabor滤波器
- matlab中实现Gabor滤波器
- matlab中实现Gabor滤波器
- 滤波器中截止频率的理解
- 滤波器的使用与设计
- 滤波器的使用与设计
- matlab小波滤波器使用
- 滤波器
- 滤波器
- 【OC】thread 1:exc_bad_access(code=1,address=0x7fff7d72a7a0) 的一种解决方法
- C++ 中通过GetAdaptersInfo获取网卡配置和Ip地址信息
- 欢迎使用CSDN-markdown编辑器
- [九度OnlineJudge][剑指Offer]题目1283:第一个只出现一次的字符
- 微信开发注意事项
- FreeVerb中滤波器使用总结
- shiro 身份验证
- Oracle VM Virtual中CentOS自动获取IP地址设置方法
- 佳能相机的拍照应用开发canon EDSDK C#
- POJ 1611 The Suspects 并查集
- 1009. Product of Polynomials (25) 多项式乘法
- Minimum Window Substring
- 管理软件销售瓶颈
- Android界面资料篇——RelativeLayout相对布局(转)