Объясните это обозначение DSP - PullRequest
3 голосов
/ 17 декабря 2009

Я пытаюсь реализовать это расширение алгоритма сбора строк Karplus-Strong, но я не понимаю, какие там обозначения используются Может быть, это займет годы обучения, но, может быть, это не так - может быть, вы можете сказать мне.

Я думаю, что уравнения ниже находятся в частотной области или что-то в этом роде. Просто начнем с первого уравнения, H p (z), фильтра нижних частот направления выбора. Для одного направления вы используете p = 0, для другого - 0,9. Это сводится к 1 в первом случае или 0,1 / (1 - 0,9 z -1 ) во втором.

альтернативный текст 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 Ответ

7 голосов
/ 17 декабря 2009

То есть 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 & Beta; = 1-z -1 ИЛИ 1-z -2 . (что такое N?)

Фильтры немного расплывчаты, и вам будет сложнее с ними работать, если вы не найдете несколько предварительно упакованных фильтров. В общем они имеют вид

H = H0 * (1 + az -1 + bz -2 + cz -3 ...) / (1 + rz -1 + SZ -2 + * TZ +1053 * -3 * * ... тысяча пятьдесят-четыре) * +1055 *

и все, что вы делаете, это записываете 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 и т. Д.) Сложнее, чем их реализация, по большей части.

...