Expliquer cette notation DSP

voix
3

Je suis en train de mettre en œuvre cette extenstion de l'algorithme de cordes pincées Karplus-Strong, mais je ne comprends pas la notation il y avait. Peut - être il faudra des années d'études, mais peut - être il ne sera pas - vous pouvez peut - être me dire.

Je pense que les équations ci - dessous sont dans le domaine de fréquence ou quelque chose. Juste en commençant par la première équation, H p (z), la direction de sélection de filtre passe - bas. Pour une direction que vous utilisez p = 0, pour l'autre, peut - être 0,9. Cela revient à 1 dans le premier cas, ou 0,1 / (1 à 0,9 z -1 ) dans le second.

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

Maintenant, je me sens comme cela pourrait vouloir dire, en termes de codage, vers quelque chose:

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

Quelqu'un peut-il me donner un indice? Ou est-ce futile et je vraiment besoin de tout l'arrière-plan DSP pour mettre en œuvre ce? J'étais mathématicien une fois ... mais ce n'est pas mon domaine.

Créé 17/12/2009 à 01:34
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
7

Ainsi , le z -1 signifie juste un retard d' une unité.

Prenons H p = (1-p) / (1-pz -1 ).

Si nous suivons la convention de « x » pour l'entrée et « y » pour la sortie, la fonction de transfert H = y / x (= sortie / entrée)

de sorte que nous obtenons y / x = (1-p) / (1-pz -1 )

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

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

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

Dans le code C, cela peut être mis en œuvre

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

sans aucun état supplémentaire au-delà de l'utilisation de la sortie « y » en tant que variable d'état lui-même. Vous pouvez également opter pour l'approche plus littérale:

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

En ce qui concerne les autres équations vont, ils sont toutes les équations typiques , sauf pour cette seconde équation qui ressemble peut - être est une façon de sélectionner soit H Β = 1-z -1 ou 1-z -2 . (ce qui est N?)

Les filtres sont un peu vagues et ils seront plus difficiles pour vous de traiter avec moins que vous pouvez trouver des filtres pré-emballés. En général, ils sont de la forme

H = H0 * (1 + z -1 + bz -2 + cz -3 ...) / (1 + rz -1 + sz -2 + tz -3 ...)

et tout ce que vous faites est écrire H = y / x, traverser multiplier pour obtenir

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

puis isoler « y » par lui-même, ce qui rend la sortie « y » une fonction linéaire de divers retards de lui-même et de l'entrée.

Mais la conception de filtres (choisir le a, b, c, etc.) Est plus difficile que de les mettre en œuvre, pour la plupart.

Créé 17/12/2009 à 01:48
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more