Benvenuto, Visitatore. Per favore, effettua il login o registrati.

  Hai perso la tua email di attivazione?

Main Home Help Ricerca Login Registrati

+  Virtual Sound - FORUM
|-+  Computer (& Computerless) Music
| |-+  Tutorial
| | |-+  Tutorial MSP #3
« precedente successivo »
Pagine: [1] Stampa
Autore Topic: Tutorial MSP #3  (Letto 2253 volte)
franz
AAA1
Hero Member
*
Posts: 829


Guarda Profilo WWW
« il: Marzo 20, 2006, 20:20:42 »

Dunque dunque, visto che ci sono state parecchie richieste per quanto riguarda l'utilizzo di effetti di delay e visto che ho il pomeriggio libero, metto qui un tutorial che può chiarire alcune cose in merito.
Prima però concedetemi una piccola piccola piccola e poco noiosa considerazione in merito anche se molti di voi già sicuramente sanno quanto sto per scrivere.

Il delay è uno degli strumenti più noti, basti pensare ai primi delay a nastro...il funzionamento, anche in ambiti digitali è rimasto più o meno quello: c'è un buffer che viene registrato e riletto da una o più testine, dopo un certo tempo più o meno vicino a quello di scrittura.
Nonostante questo è uno strumento potentissimo che permette una vastità di azioni cui spesso, ad un primo sguardo non si pensa nemmeno.
Basti pensare che il segnale audio, escludendo FFT, DFT, Analisi Spettrale insomma, viene elaborato nel dominio del tempo...il delay è il principale strumento che lavora nel dominio del tempo.
Deduciamo allegramente sorseggiando un limoncello che è grazie al delay, inteso in senso lato, se esistono la maggior parte degli "effetti" che possiamo utilizzare.
Riverberi, Filtri (passa basso, passa alto, allpass, comb), Flanger, Phaser, effetti di spazializzazione,  pitch-shifting, sono effetti che nascono grazie ad utilizzi "intelligenti" del ritardo del segnale e che solo dopo sono stati integrati con altre tecnologie più nuove, esempio lampante è il Riverbero che solo da poco grazie allo studio sull'analisi spettrale ha potuto usufruire delle tecniche di convoluzione.

Spero come al solito che questo semplicissimo tutorial sia molto utile!

Se avete dubbi, trovate errore, volete aggiungere qualcosa di fondamentale che ho dimenticato, dite pure!
« Ultima modifica: Marzo 20, 2006, 20:22:20 da .franz » Loggato

mic
Sr. Member
****
Posts: 401


Guarda Profilo
« Risposta #1 il: Marzo 21, 2006, 00:04:08 »

grazieee Grossa risata
Loggato
brunozamborlin
Hero Member
*****
Posts: 774



Guarda Profilo
« Risposta #2 il: Marzo 23, 2006, 16:41:41 »

non sn connesso con il portatile, questo weekend scarico franz grazie.

una cosa: per riverbero flanger pitchshifter ecc non c'è problema, ma non ho ben capito come può un "delay" agire su un filtro, riesci a farmi un esempio spiccio?

cioè, come può far passare, ad esempio, solo le frequenze da 3000hz in giù?

thx Sorriso
Loggato

brunozamborlin
Hero Member
*****
Posts: 774



Guarda Profilo
« Risposta #3 il: Marzo 23, 2006, 16:42:17 »

ps: magari la risposta è nel tutorial che scaricherò questo weekend  Linguaccia
Loggato

franz
AAA1
Hero Member
*
Posts: 829


Guarda Profilo WWW
« Risposta #4 il: Marzo 23, 2006, 19:57:36 »

No no è un discorso un bel pò più ampio ovvero: tutto ciò che lavora nel dominio del tempo è un "delay" ovvero qualcosa che provoca "spostamenti in avanti sulla linea temporale".
I filtri in linea di massima sono dei delay che agiscono a livello di singoli campioni ritardandoli secondo un preciso algoritmo, questo come risultato provoca un cambiamento nel contenuto spettrale del segnale elaborato corrispondente all'attenuazione  di frequenze che vogliamo, però non lavoriamo tramite analisi dello spettro.
Idem con patate per il flanger, il phaser, il riverbero, l'eco.
Poi ovvimente ci sono anche filtri, riverberi (lexicon, altiverb), delay (spektral delay) che lavorano modificanto direttamente il contenuto spettrale tramite FFT, convoluzion , analisi ed elaborazione spettrale insomma, ma non i filtri, riverberi, delay classici.
Nel tutorial questo non è affrontato l'argomento FILTRI perchè è un argomento non proprio facile, ma come premessa per uno strumento come il delay inteso in senso lato, mi sembrava quantomeno doveroso mettere la pulce nell'orecchio e ampliare il concetto di "delay"  ;P
Spero non sia stato fuorviante in questo senso.
« Ultima modifica: Marzo 23, 2006, 20:03:17 da .franz » Loggato

mauriziogiri
Amministratore
Sr. Member
*****
Posts: 348


Guarda Profilo WWW
« Risposta #5 il: Marzo 23, 2006, 20:34:34 »

Integro la risposta di franz: il filtro è un ritardo, quando diciamo filtro del primo ordine, del secondo ordine etc, intendiamo che l'algoritmo del filtro prevede il ritardo di un campione, due campioni etc. L'ordine del filtro è equivalente al massimo ritardo in campioni che contiene. Ne consegue che un delay di 1 secondo (magari con feedback, a simulare un effetto di eco che si smorza) è un filtro del 44100esimo ordine.

Vedi anche l'help di biquad~, c'è questa forrmula:

y[n] = a0 * x[n] + a1 * x[n-1] + a2 * x[n-2] - b1 * y[n-1] - b2 * y[n-2]

x[n] è il campione in entrata e y[n] è il campione in uscita dal filtro (quello che vogliamo calcolare).
x[n-1] è il campione che era entrato precedentemente (delay di 1 campione) e y[n-1] è il precedente campione in uscita, e così via. Ognuno di questi campioni viene moltiplicato per un coefficiente (a0, a1 etc) e sono questi coefficienti applicati ai campioni ritardati che danno la risposta in frequenza del filtro.

Riguardo la convoluzione, altro non è che un filtro FIR di ordine molto alto (equivalente al numero dei campioni della risposta all'impulso), quindi implica assolutamente il delay. Il motivo per cui spesso si usa la fft per calcolarlo è dovuto al fatto che la convoluzione nel dominio del tempo equivale alla moliplicazione nel dominio delle frequenze (e viceversa), ovvero se moltiplico due spettri è come se facessi la convoluzione tra i due suoni corrispondenti, e grazie alla fft posso velocizzare i calcoli.

m
« Ultima modifica: Marzo 23, 2006, 20:44:24 da mauriziogiri » Loggato

Maurizio Giri Home Page: http://www.giri.it
franz
AAA1
Hero Member
*
Posts: 829


Guarda Profilo WWW
« Risposta #6 il: Marzo 24, 2006, 06:34:07 »

Grazie per la spiegazione Maurizio, in effetti detta così ha molto più senso Wow

Quindi buffir~ contiene un filtro a risposta impulsiva finita di 256esimo ordine..
con un IIR però, che è a risposta impulsiva infinita, è indispensabile chiamare in causa la fft per via del calcolo della Delta Dirac o sbaglio?
Forse non è questo il thread più adatto alla discussione, percò chiedo lo stesso Occhiolino
Loggato

mauriziogiri
Amministratore
Sr. Member
*****
Posts: 348


Guarda Profilo WWW
« Risposta #7 il: Marzo 24, 2006, 09:57:41 »

mmh... la domanda non è chiara...

La delta di Dirac, o impulso unitario, definisce un impulso di larghezza infinitesimale ed altezza infinita la cui area (cioè l'integrale) è 1.
La versione digitale di tale impulso è un singolo campione di valore 1 seguito da campioni di valore 0.
Immettendo questo impulso in un filtro IIR si ottiene la risposta all'impulso del filtro (che è solo teoricamente infinita, perché ad un certo punto va al di sotto della precisione numerica del computer) .
Se intendevi che facendo la FFT della risposta all'impulso così ottenuta, si ottiene la risposta in frequenza del filtro, la risposta è sì.

Per ulteriori approfondimenti chiediamo agli amici ingegneri che frequentano il forum, io sono solo un compositore! Occhiolino

m
Loggato

Maurizio Giri Home Page: http://www.giri.it
el mario
Newbie
*
Posts: 49



Guarda Profilo
« Risposta #8 il: Marzo 24, 2006, 16:13:33 »

..se non sbaglio, tutta la tecnica di sintesi a guide d'onda si basa su blocchi funzionali tipo delay..
Loggato

brunozamborlin
Hero Member
*****
Posts: 774



Guarda Profilo
« Risposta #9 il: Marzo 24, 2006, 16:35:26 »

Integro la risposta di franz: il filtro è un ritardo, quando diciamo filtro del primo ordine, del secondo ordine etc, intendiamo che l'algoritmo del filtro prevede il ritardo di un campione, due campioni etc. L'ordine del filtro è equivalente al massimo ritardo in campioni che contiene. Ne consegue che un delay di 1 secondo (magari con feedback, a simulare un effetto di eco che si smorza) è un filtro del 44100esimo ordine.

Grazie maurizio.
La mia domanda però era: perchè se ritardo di x campioni, alcune frequenze vengono tagliate?
Nel mio esempio, di quanti campioni devo ritardare per tagliare le frequenze da 3000hz in su?
Loggato

el mario
Newbie
*
Posts: 49



Guarda Profilo
« Risposta #10 il: Marzo 24, 2006, 19:27:46 »



Grazie maurizio.
La mia domanda però era: perchè se ritardo di x campioni, alcune frequenze vengono tagliate?
Nel mio esempio, di quanti campioni devo ritardare per tagliare le frequenze da 3000hz in su?
[/quote]


prova quà, c'è anche un esempio in excel..

http://www.sknote.it/DSP_Tutorial_3.htm
Loggato

mauriziogiri
Amministratore
Sr. Member
*****
Posts: 348


Guarda Profilo WWW
« Risposta #11 il: Marzo 24, 2006, 20:38:20 »

La mia domanda però era: perchè se ritardo di x campioni, alcune frequenze vengono tagliate?
Nel mio esempio, di quanti campioni devo ritardare per tagliare le frequenze da 3000hz in su?

Il numero dei campioni non ha niente a che vedere con la frequenza di taglio, ma (approssimativamente) con la pendenza del filtro, con la sua precisione, diciamo. Avrai sicuramente sentito dire che un filtro di quarto ordine filtra "meglio" di uno di secondo ordine, questo significa che se usi un filtro di quarto ordine come passa-basso con frequenza di taglio 3000, le frequenze sopra i 3000 Hz (quelle da filtrare, appunto) saranno più attenuate di quanto sarebbero con un filtro di secondo ordine: ma il fatto che un filtro abbia un ritardo massimo di 4 campioni e l'altro di 2, non influisce sulla frequenza di taglio.
Che cosa determina la frequenza di taglio, quindi? I fattori di moltiplicazione (coefficienti) dei campioni ritardati e no, come avevo sommariamente detto in un messaggio precedente.
L'oggetto biquad~ è un filtro del secondo ordine, e quindi ha due campioni di ritardo; ma con biquad~ ci fai tutti i filtri che vuoi (passaalto, possabasso, risonanti e no, etc...) e con tutte le frequenze di taglio che vuoi.
Allora come si calcolano i coefficienti, ad esempio per una frequenza di taglio di 3000 Hz? Tramite calcoli abbastanza complicati, che ad esempio l'oggetto filtergraph~ realizza per noi. Filtergraph~ infatti produce una lista di 5 numeri ciascuno dei quali è un coefficiente di moltiplicazione che si applica al campione in entrata, ai due campioni entrati precedentemente e ai due campioni prodotti precedentemente dal filtro (per un totale, appunto, di 5 campioni). Vedi questa patch esemplificativa:

#P window setfont "Sans Serif" 9.;
#P window linecount 1;
#P comment 281 467 242 196617 e il risultato è il nuovo campione in uscita;
#P window setfont "Sans Serif" 10.;
#P comment 193 444 449 196618 y[n] = a0 * x[n] + a1 * x[n-1] + a2 * x[n-2] - b1 * y[n-1] - b2 * y[n-2];
#P window setfont "Sans Serif" 9.;
#P window linecount 4;
#P comment 505 315 71 196617 segnale in uscita ritardato di un campione;
#P comment 580 316 71 196617 segnale in uscita ritardato di 2 campioni;
#P comment 433 315 71 196617 segnale in entrata ritardato di 2 campioni;
#P comment 360 316 71 196617 segnale in entrata ritardato di un campione;
#P window linecount 1;
#P comment 82 275 205 196617 3) ...e filtergraph~ produce i coefficienti;
#P user umenu 235 54 70 196647 1 64 70 0;
#X add display;
#X add lowpass;
#X add highpass;
#X add bandpass;
#X add bandstop;
#X add peaknotch;
#X add lowshelf;
#X add highshelf;
#X add resonant;
#X add allpass;
#P flonum 295 296 47 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P flonum 366 297 47 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P flonum 437 296 47 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P flonum 508 296 47 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P flonum 580 298 47 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P newex 295 273 296 196617 unpack 0. 0. 0. 0. 0.;
#P user filtergraph~ 295 101 255 124 3 9 0. 22050. 0.0625 16. 1 1 1 0 0 1 1;
#X frgb 193 193 255;
#X brgb 233 233 255;
#X rgb2 0 0 0;
#X rgb3 130 130 130;
#X rgb4 0 0 0;
#X rgb5 118 121 166;
#X rgb6 210 74 54;
#X rgb7 255 22 22;
#X linmarkers 5512.5 11025. 16537.5;
#X logmarkers 10. 100. 1000. 10000.;
#X nfilters 1;
#X setfilter 0 1 0 0 0 2086.222168 1. 3.028512 0.0001 22050. 0.0001 16. 0.5 25.;
#X done;
#P comment 194 33 137 196617 1) seleziona un tipo di filtro;
#P comment 107 159 190 196617 2 modifica frequenza e/o risonanza....;
#P window linecount 3;
#P comment 280 316 76 196617 segnale in entrata (non ritardato);
#P window linecount 1;
#P comment 14 326 263 196617 4) questi coefficienti moltiplicano i seguenti campioni:;
#P window linecount 4;
#P comment 281 384 242 196617 una volta moltiplicati per i rispettivi coefficienti i campioni in entrata vengono sommati tra loro e al risultato vengono sottratti i due campioni in uscita \, ovvero viene applicata l'equazione;
#P connect 6 4 7 0;
#P connect 6 3 8 0;
#P connect 6 2 9 0;
#P connect 6 1 10 0;
#P connect 6 0 11 0;
#P connect 5 0 6 0;
#P connect 12 1 5 0;
#P window clipboard copycount 20;
Loggato

Maurizio Giri Home Page: http://www.giri.it
brunozamborlin
Hero Member
*****
Posts: 774



Guarda Profilo
« Risposta #12 il: Marzo 30, 2006, 14:39:13 »

Ho già letto il post da una settimana ma nn posso provare la pathc perchè non posso connettermi ad internet con il portatile.
Grazie mille maurizio cmq, questione d giorni  Sorriso
Loggato

Pagine: [1] Stampa 
« precedente successivo »
Salta a:  


Login con username, password e lunghezza della sessione

Powered by MySQL Powered by PHP © Copyright 1996 - 2008 - ConTempoNet Edizioni Musicali ® - P.IVA: 05174251008
Tutti i diritti riservati - Tutti i marchi sono registrati -
È vietata la riproduzione, anche parziale, dei testi e delle immagini.
Powered by SMF 1.1.5 | SMF © 2006-2008, Simple Machines LLC
Traduzione Italiana a cura di SMItalia
XHTML 1.0 Valido! CSS Valido!