Spiegare questa notazione DSP

voti
3

Sto cercando di implementare questo extenstion dell'algoritmo corda pizzicata Karplus-Strong, ma non capisco la notazione non utilizzato. Forse ci vorranno anni di studio, ma forse non sarà - forse si può dirmi.

Credo che le equazioni di seguito sono nel dominio della frequenza o qualcosa del genere. Solo a partire dalla prima equazione, H p (z), il filtro passa-basso direzione scelta. Per una direzione di utilizzare p = 0, per l'altro, forse 0.9. Questo si riduce a 1 nel primo caso, o 0,1 / (1 - 0,9 z -1 ) nel secondo.

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

Ora, mi sento come questo potrebbe significare, in termini di codifica, qualcosa verso:

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

Qualcuno può darmi un suggerimento? O è questo inutile e ho davvero bisogno di tutti i retroscena DSP per implementare questo? Ero un matematico una volta ... ma questo non è il mio dominio.

È pubblicato 17/12/2009 alle 01:34
fonte dall'utente
In altre lingue...                            


1 risposte

voti
7

Così z -1 significa solo un ritardo di un unità.

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

Se usiamo la convenzione di "x" per l'ingresso e "y" per l'uscita, la funzione di trasferimento H = y / x (= uscita / ingresso)

così otteniamo y / x = (1-p) / (1-pz -1 )

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

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

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

In questo codice C può essere implementato

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

senza alcuna condizione aggiuntiva oltre utilizzando l'uscita "y" come variabile stato stesso. Oppure si può andare per l'approccio più letterale:

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

Per quanto riguarda le altre equazioni vanno, sono tutte le equazioni tipiche tranne quella seconda equazione che sembra forse è un modo di selezione di una H Β = 1-z -1 O 1-z -2 . (cosa c'è di N?)

I filtri sono una specie di vaga e saranno più dura per voi da affrontare a meno che non si possono trovare alcuni filtri preconfezionati. In generale, sono di forma

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

e tutto ciò che fai è scrivere giù H = y / x, attraversare moltiplicano per ottenere

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

e quindi isolare "y" di per sé, rendendo uscita una funzione lineare dei vari ritardi di se stesso e dell'ingresso "y".

Ma la progettazione di filtri (raccogliendo l'a, b, c, ecc.) È più duro di loro attuazione, per la maggior parte.

Risposto il 17/12/2009 a 01:48
fonte dall'utente

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