Virtual Sound - FORUM

Linguaggi per la Computer Music => Max MSP Jitter => Topic iniziato da: aledl su Giugno 29, 2007, 23:28:37



Titolo: nyquist
Post di: aledl su Giugno 29, 2007, 23:28:37
Si legge sul manuale di msp che per evitare aliasing inarmonico dovuto al sampling del segnale digitale bisogna collegare un lowpass prima di mandare il segnale al dac...volevo sapere... max già si occupa di questo oppure in ogni patch è necessario collegare un lowpass settato sulla nyiquist frequency?

Stessa cosa per gli oscillatori in genere, spesso ci si imbatte in frequenze che superano la fatidica barriera, per esempio lavorando su spettri di armoniche...come fare per tagliare le frequenze oltre il nyquist prima che vengano riflesse? il fatto che una volta riflesse le frequenze diventano inarmoniche ma più gravi, quindi il filtro non le può togliere teoricamente  :P

Dove e come va messo questo low pass? ??? quale oggetto sarebbe meglio usare?
mi sembra un problema fondamentale...c'è già qualche opzione di max che lo gestisce? (visto che è un fattore automatico dipendente dal sampling rate che si decide di usare...)

grazie delle dritte, superati i primi scogli sto cominciando a produrre qualche rumore, ora posterò un po' di più in questa sezione penso...


Titolo: Re: nyquist
Post di: mauriziogiri su Giugno 30, 2007, 21:28:03
ahimé, come giustamente dici tu, le frequenze che superano quella di nyquist diventano più gravi e quindi filtrarle non serve... non credo che il manuale msp dica di usare un lowpass nel dominio digitale per risolvere il problema, sarebbe impossibile, perché nel digitale non c'è modo di distinguere una frequenza riflessa da una frequenza reale. Probabilmente hai letto del filtraggio analogico che si fa prima di convertire un suono esterno in digitale (c'e' poi un altro filtro, sempre analogico, che filtra il segnale dopo che è stato ri-convertito dal digitale, ma per quanto riguarda l'aliasing arriva troppo tardi...).
Il problema dell'aliasing deve risolverlo il programmatore, evitando di generare frequenze superiori a quella di nyquist, max in automatico non ci puo' fare niente (per fortuna... e se io volessi proprio creare un aliasing?).
Comunque esistono degli oscillatori che generano forme d'onda limitate in banda, ovvero che non superano mai nyquist, e sono rect~, saw~ e tri~ (vedi gli help relativi), ma per il resto devi vedertela tu! (e questo vale per qualsiasi linguaggio di programmazione per la computer music, max, csound, supercollider, pure data e quant'altro).
In ogni caso, per quel che riguarda la mia esperienza, il numero delle volte che mi è capitato di dover affrontare e risolvere un problema di aliasing (non provocato volontariamente) credo che sia pari a zero o poco più.

m


Titolo: Re: nyquist
Post di: brunozamborlin su Luglio 02, 2007, 01:44:17
mi sorge una domanda spontanea: perchè creare un aliasing volontariamente?
ci fai vedere una patch semplice che usa l'aliasing a fin di bene?  ;D


Titolo: Re: nyquist
Post di: franz su Luglio 02, 2007, 11:10:35
mi sorge una domanda spontanea: perchè creare un aliasing volontariamente?
a scopo creativo per esempio, o didattico per capire come "suona" l'aliasing e le frequenze che si riflettono rispetto alla frequenza di nyquist (fold-over).

ciao


Titolo: Re: nyquist
Post di: mauriziogiri su Luglio 02, 2007, 11:38:08
mi sorge una domanda spontanea: perchè creare un aliasing volontariamente?
ci fai vedere una patch semplice che usa l'aliasing a fin di bene?  ;D
La risposta di Franz mi sembra perfetta...
ora ti faccio una domanda io: come fai a rovesciare uno spettro (le frequenze acute al posto delle gravi e viceversa) senza usare la fft?  ;)

m


Titolo: Re: nyquist
Post di: franz su Luglio 02, 2007, 20:06:05
Questa è fantastica!! Mi vengono in mente due soluzioni, una più semplice che riguarda i suoni "generati" di cui conosco frequenza e altre caratteristiche e potendola controllare sarebbe più facile., sempre utilizzando l'aliasing e il relativo fold-over....ma per quanto riguarda i suoni preregistrati, non ne sono sicuro...sicuramente è una cosa per niente macchinosa e abbastanza "semplice" nel suo genere...!
Vediamo l'ingegner Bruno che dice  ;)


Titolo: Re: nyquist
Post di: brunozamborlin su Luglio 02, 2007, 21:48:29
oddio...
per suoni generati all'interno della patch stessa ok, ma per suoni campionati esternamente proprio non ne ho idea... userei la fft appunto...
mi sembra di capire che la risposta sia aliasing ma proprio non saprei come fare :)

che idea però quella di rovesciare le frequenze!


Titolo: Re: nyquist
Post di: mauriziogiri su Luglio 03, 2007, 12:25:09
Ti basta moltiplicare il suono per una sinusoide che oscilla alla frequenza di nyquist, una ringmodulation, insomma:

#P window setfont "Sans Serif" 9.;
#P window linecount 1;
#P newex 502 83 27 196617 / 2.;
#P flonum 502 60 62 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P newex 488 34 54 196617 dspstate~;
#P user spectroscope~ 12 262 300 100 20 0 0 0 1 1 0 0 0 0 0 0;
#X frgb 224 224 224;
#X brgb 255 255 255;
#X rgb2 0 0 0;
#X rgb3 243 204 204;
#X rgb4 255 0 0;
#X rgb5 184 184 184;
#X rgb6 0 0 0;
#X rgb7 0 0 0;
#X rgb8 255 255 255;
#X rgb9 255 0 0;
#X rgb10 255 191 0;
#X rgb11 0 191 127;
#X rgb12 127 0 127;
#X rgb13 0 0 0;
#X range 0. 1.2;
#X domain 0. 22050.;
#X done;
#P user spectroscope~ 12 157 300 100 20 0 0 0 1 1 0 0 0 0 0 0;
#X frgb 224 224 224;
#X brgb 255 255 255;
#X rgb2 0 0 0;
#X rgb3 243 204 204;
#X rgb4 255 0 0;
#X rgb5 184 184 184;
#X rgb6 0 0 0;
#X rgb7 0 0 0;
#X rgb8 255 255 255;
#X rgb9 255 0 0;
#X rgb10 255 191 0;
#X rgb11 0 191 127;
#X rgb12 127 0 127;
#X rgb13 0 0 0;
#X range 0. 1.2;
#X domain 0. 22050.;
#X done;
#P message 327 324 27 196617 stop;
#P message 327 307 67 196617 startwindow;
#P newex 400 324 29 196617 dac~;
#P user gain~ 400 204 21 89 158 0 1.071519 7.94321 10.;
#P newex 474 119 73 196617 cycle~ 22050;
#P newex 400 163 27 196617 *~;
#P newex 387 53 48 196617 loadbang;
#P toggle 332 83 15 0;
#P message 359 84 37 196617 loop 1;
#P message 400 84 89 196617 open drumloop.aif;
#N sfplay~  1 120960 0 ;
#P newobj 400 118 44 196617 sfplay~;
#P connect 7 0 8 0;
#P connect 7 0 8 1;
#P connect 5 0 12 0;
#P connect 5 0 7 0;
#P connect 0 0 11 0;
#P connect 0 0 5 0;
#P connect 6 0 5 1;
#P connect 15 0 6 0;
#P connect 14 0 15 0;
#P connect 13 1 14 0;
#P connect 4 0 2 0;
#P connect 4 0 1 0;
#P connect 9 0 8 0;
#P connect 10 0 8 0;
#P connect 3 0 0 0;
#P connect 2 0 0 0;
#P connect 1 0 0 0;
#P window clipboard copycount 16;

La spiegazione del funzionamento è un po' lunga: come sai la modulazione ad anello genera la somma e la differenza di tutte le frequenze delle due sorgenti con l'ampiezza dimezzata. Se la portante è un suono complesso e la modulante è una sinusoide, avrò in uscita lo spettro complesso disposto simmetricamente attorno alla frequenza della sinusoide, in pratica una versione dritta e una rovesciata dello spettro che fanno perno sulla frequenza della sinusoide. Questi due spettri sono dimezzati in ampiezza. Quando la sinusoide è alla frequenza di nyquist, lo spettro dritto è tutto al di fuori delle frequenze gestibili dalla scheda, e viene quindi riflesso (foldover) nel campo delle frequenza udibili, viene in pratica rovesciato, e si somma allo spettro simmetrico generando un unico spettro rovesciato con l'ampiezza giusta.
Puoi capire meglio il meccanismo cambiando la frequenza della sinusoide e osservando nello spettroscopio lo spettro speculare del suono complesso che si sposta parallelamente alla frequenza della sinusoide.


Titolo: Re: nyquist
Post di: franz su Luglio 03, 2007, 21:52:07
chiaro come l'acqua di montagna...era semplicissima!


Titolo: Re: nyquist
Post di: aledl su Luglio 03, 2007, 22:56:00
grande! ;D ecco un ottimo motivo per non considerare l'aliasing semplicemente un nemico :D.

Comunque ad intuito penso che un ottimo filtro sia anche semplicemente un bel ">", adesso non so di preciso però..."tutte le volte che una variabile di frequenza supera 22000, amplitude=0, oppure filtrarla, in senso numerico più che acustico.... Per quanto riguarda gli oscillatori o wavetables darivate da samples o in un buffer si potrebbe usare un low pass settato sulla nyquist...dico bene?


Titolo: Re: nyquist
Post di: mauriziogiri su Luglio 04, 2007, 09:20:50
Comunque ad intuito penso che un ottimo filtro sia anche semplicemente un bel ">", adesso non so di preciso però..."tutte le volte che una variabile di frequenza supera 22000, amplitude=0, oppure filtrarla, in senso numerico più che acustico.... Per quanto riguarda gli oscillatori o wavetables darivate da samples o in un buffer si potrebbe usare un low pass settato sulla nyquist...dico bene?

Nope. Un low pass settato sulla nyquist non filtra niente, perché le frequenze al di sopra della nyquist semplicemente non esistono (vengono rimbalzate all'indietro).
Una sinusoide a 440 Hz e una sinusoide alla (frequenza di campionamento - 440) non solo suonano identiche, ma sono identiche dal punto di vista digitale, e un filtro le filtrerebbe esattamente nello stesso modo.

#P window setfont "Sans Serif" 9.;
#P window linecount 1;
#P comment 409 95 158 196617 ...meno 440;
#P number 350 71 51 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P user scope~ 78 231 208 361 4 3 128 -1. 1. 0 0. 1 0. 102 255 51 135 135 135 0;
#P user scope~ 391 233 521 363 4 3 128 -1. 1. 0 0. 1 0. 102 255 51 135 135 135 0;
#P user gain~ 321 225 21 89 158 0 1.071519 7.94321 10.;
#P message 228 344 27 196617 stop;
#P message 228 327 67 196617 startwindow;
#P newex 301 344 29 196617 dac~;
#P user gain~ 297 225 21 89 158 0 1.071519 7.94321 10.;
#P newex 350 144 40 196617 cycle~;
#P number 350 117 51 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P newex 350 92 39 196617 - 440.;
#P newex 336 47 54 196617 dspstate~;
#P newex 248 142 61 196617 cycle~ 440;
#P window linecount 2;
#P comment 411 117 115 196617 questa frequenza non è distinguibile da 440 Hz;
#P window linecount 1;
#P comment 409 72 158 196617 frequenza di campionamento...;
#P connect 6 0 11 0;
#P connect 6 0 12 0;
#P connect 5 0 6 0;
#P connect 4 0 5 0;
#P connect 14 0 4 0;
#P connect 3 1 14 0;
#P connect 7 1 11 0;
#P connect 11 0 8 1;
#P connect 10 0 8 0;
#P connect 9 0 8 0;
#P connect 7 0 8 0;
#P connect 2 0 13 0;
#P connect 2 0 7 0;
#P window clipboard copycount 16;



Titolo: Re: nyquist
Post di: brunozamborlin su Luglio 04, 2007, 16:12:22
Uh!
Grazie :)


Titolo: Re: nyquist
Post di: aledl su Luglio 06, 2007, 21:53:34
ho una versione di max anteriore alla 4.5.5 quindi penso di non riuscire a vedere la tua patch Maurizio   :s

Però ho provato a fare una "semplice" ringmodulation con un sfplay (sample di una voce) * cycle 22050 ma esce solo uno sfrigolio sovracuto, è quello lo spettro rovesciato? ehm...forse è il caso di leggere il sample ad una frequenza molto più bassa? per farla sembrare la STESSA voce con lo spettro rovesciato?


Titolo: Re: nyquist
Post di: brunozamborlin su Luglio 07, 2007, 01:16:21
Tutto per te  :)


Titolo: Re: nyquist
Post di: franz su Luglio 07, 2007, 10:41:01
abbassando la frequenza di modulazione sempre in rapporto con nyquist, /3, /4, /5 ecc.... puoi spostare l'asse di simmetria dello spettro. Se vuoi agire abbassando e alzando il pitch dovresti ALZARE il pitch del file che suoni per avere frequenze concentrate sul basso e ABBASSARLO per avere più frequenza alte (che è quello che NON ti interessa ) :)

 


Titolo: Re: nyquist
Post di: aledl su Luglio 09, 2007, 17:38:55
Tutto per te  :)
grazie mille ;)


Titolo: Re: nyquist
Post di: aledl su Luglio 09, 2007, 17:40:31
abbassando la frequenza di modulazione sempre in rapporto con nyquist, /3, /4, /5 ecc.... puoi spostare l'asse di simmetria dello spettro. Se vuoi agire abbassando e alzando il pitch dovresti ALZARE il pitch del file che suoni per avere frequenze concentrate sul basso e ABBASSARLO per avere più frequenza alte (che è quello che NON ti interessa ) :)

 
mmmmmmm, capisco...adesso provo smacchinare un po' con la patch di Maurizio e vedo di chiarirmi le idee ;)


© 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