解释这个DSP符号

时间:2009-12-17 00:34:21

标签: audio filter signal-processing pseudocode

我正在尝试实现Karplus-Strong弹拨字符串算法的this extenstion,但我不理解那里使用的符号。也许它需要多年的学习,但也许它不会 - 也许你可以告诉我。

我认为下面的等式是在频域或其他东西。刚开始使用第一个等式H p (z),拾取方向低通滤波器。对于一个方向,你使用p = 0,对另一个方向,可能是0.9。在第一种情况下归结为1,或在第二种情况下归结为0.1 /(1 - 0.9 z -1 )。

alt text http://www.dsprelated.com/josimages/pasp/img902.png

现在,我觉得这可能意味着,在编码方面,有些东西会出现:

H_p(float* input, int time) {
  if (downpick) {
    return input[time];
  } else {
    return some_function_of(input[t], input[t-1]);
  }
}

有人可以给我一个提示吗?或者这是徒劳的,我真的需要所有的DSP背景来实现这一点?我曾经是一名数学家......但这不是我的领域。

1 个答案:

答案 0 :(得分:7)

所以z -1 只是意味着一个单位的延迟。

我们取H p =(1-p)/(1-pz -1 )。

如果我们遵循输入的“x”和输出的“y”的约定,传递函数H = y / x(=输出/输入)

所以得到y / x =(1-p)/(1-pz -1

或(1-p)x =(1-pz -1 )y

(1-p)x [n] = y [n] -py [n-1]

或: y [n] = py [n-1] +(1-p)x [n]

在C代码中,这可以实现

y += (1-p)*(x-y);

除了使用输出“y”作为状态变量本身之外没有任何其他状态。或者你可以采用更直接的方法:

y_delayed_1 = y;
y = p*y_delayed_1 + (1-p)*x;

就其他方程式而言,它们都是典型的方程式,除了第二个方程式,看起来可能是选择H Β = 1-z -1的方式 OR 1-z -2 。 (什么是N?)

过滤器有点模糊,除非你能找到一些预先包装好的过滤器,否则它们对你来说会更难处理。一般来说,它们的形式是

H = H0 *(1 + az -1 + bz -2 + cz -3 ...)/(1+ RZ -1 + SZ -2 + TZ -3 ...)

你要做的就是写下H = y / x,交叉乘以得到

H0 *(1 + az -1 + bz -2 + cz -3 ...)* x =(1+ rz -1 + sz -2 + tz -3 ...)* y

然后单独隔离“y”,使输出“y”成为其自身和输入的各种延迟的线性函数。

设计过滤器(选择a,b,c等)比实施它们更困难。