这是一个关于如何使公式适用于代码的一般性问题。我的数学技能很差,当我尝试在代码中实现简单的东西时,我迷失了。
例如,我如何解释这个公式:
- 什么意思?或者是什么等等
y(n) = y (n-1) + ((x (n) - y (n-1))/slide)
此公式是从maxmsp对象中获取的,用于滑动音频值 slide~在信号值的变化之间以对数方式过滤输入信号。公式是y(n)= y(n-1)+((x(n)-y(n-1))/ slide)。它对于包络跟随和低通滤波特别有用。
非常感谢每一位帮助!
答案 0 :(得分:2)
y(n)
的数学用法对应于C ++中的数组(或vector
)索引:y[n]
。
因此它很简单:
std::vector<float> x = foo();
std::vector<float> y(x.size());
float slide = 10; // Random guess - you should understand x[]
y[0] = x[0]; // Start the same; there's no y[-1]
for (int n = 1; i != x.size(); ++i) {
y[n] = y[n-1] + ((x[n] - y[n-1])/slide);
}
基本上,这是RC滤波器的离散等价物,可能是最常见的Infinite Impulse Response(IIR) filters
之一答案 1 :(得分:1)
float y(int n, float slide)
{
if (n <= 0)
{
// TODO: figure out what to do here. i.e. what is y(0).
}
float nMinus1 = y(n - 1);
return nMinus1 + (x(n) - nMinus1) / slide);
}
答案 2 :(得分:0)
这很容易。 您只需解析公式以生成将用于创建公式语法树的标记列表。然后,您只需要使用所需的变量值来评估树并解析任何函数条目。最后,你会得到一个很好的数学公式翻译器到某种可评估的IR ......
但是,如果您只是需要执行一些数学计算,那么请认真使用MathCAD等适当的工具。 如果你需要编写一个使用某些公式的程序,那么在代码中按原样实现它们并按照你的意愿使用。 如果您需要一个可以解释任何公式的程序......那么,请阅读答案的第一部分:)