解释这个DSP符号

Gru*_*rig 3 audio signal-processing pseudocode filter

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

我认为下面的等式在频域或其他东西.刚开始使用第一个等式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]);
  }
}
Run Code Online (Sandbox Code Playgroud)

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

Jas*_*n S 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);
Run Code Online (Sandbox Code Playgroud)

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

y_delayed_1 = y;
y = p*y_delayed_1 + (1-p)*x;
Run Code Online (Sandbox Code Playgroud)

就其他方程式而言,它们都是典型的方程,除了第二个方程,看起来可能是选择H B = 1-z -1或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等)比实现它们更困难.