Esercizio TAENSM I: creare un inviluppo esponenziale

Esercizio TAENSM I: creare un inviluppo esponenziale

Posted by frak on Gio, 02/19/2009 - 18:08

-Esercizio-
Creare l'inviluppo esponenziale di un suono periodico sinusoidale, noti:
frequenza= 1064.4Hz
durata= 0.3sec
ampiezza finale= -70dB
Qui presento tre soluzioni, proposte da Luca, Giulio, me.

~~~~~~~~~~~~~~~~~
~ Soluzione 1: Tizio: ~
~~~~~~~~~~~~~~~~~

fc=44100;
sinc=1/fc;
dur=0.3;
T=[0:sinc:dur-sinc];
frq=1064.4;
y=sin(2*pi*frq*T);
out=zeros(size(y),1);
ampi=0;
ampf=(-70);
inc=(ampi+ampf)/(fc*dur);
dim=10^(inc/20);
for i=1:length(T);
if i==1
dam(i)=1;
out(i)=y(i)*dam(i);
elseif i==2
dam(i)=dim;
out(i)=y(i)*dam(i);
elseif i>2
dam(i)=dam(i-1)*dim;
out(i)=y(i)*dam(i);
end
end
plot(T,out);
pause;

Questa soluzione, e' un po' sovrabbondante di operazioni logiche (di "IF", per intenderci) e potrebbe quindi creare un po' di confusione alla lettura, inoltre Octave presenta un WARNING al momento dell'esecuzione del codice, nulla di grave of course:
warning: implicit conversion from real matrix to real scalar

Il risultato grafico e':

~~~~~~~~~~~~~~~~~~
~ Soluzione 2: Caio: ~
~~~~~~~~~~~~~~~~~~

fc=44100;
sinc=1/fc;
dur=0.3;
T=[0:sinc:dur-sinc];
frq=1064.4;
ampi=0;
ampf=(-70);
amp=10^(ampf/20);
k=log(amp)/dur;
envelope=e.^(k*T);
y=sin(2*pi*frq*T);
y=envelope.*y;
plot(T,y);

Questa soluzione e' probabilmente la piu' bella, perche` e' sintetica (13 righe), fa il minimo indispensabile per funzionare giusto, e non comporta nessun WARNING di Octave.

Il risultato grafico, e':

~~~~~~~~~~~~~~~~~~~~~~
~ Soluzione 3, Sempronio: ~
~~~~~~~~~~~~~~~~~~~~~~

fc=44100;
sinc=1/fc;
dur=0.3;
T=[0:sinc:dur-sinc];
frq1=1064.4;
sign=sin(2*pi*frq1*T);
ampfin=(-70);
for i=1:length(T)
amp(i)=10^((ampfin*T(i)*exp(T(i)/(dur-sinc)))/20);
endfor
out=sign.*amp;
plot(T,out);

Dato che Sempronio e` Sempronio, questa soluzione e' a sua volta un po' strana, perche` provvede a creare un decadimento esponenziale un po' piu` "morbido". Questo si ottiene calcolando la potenza di un esponenziale anziche` l'esponenziale di una potenza. Ovvero se Caio faceva: EXP^(...10^qualcosa), Sempronio fa 10^(...EXP^qualcosa).
Anche questa soluzione non comporta alcun WARNING di Octave, ed e` sintetica (12 righe).

Il risultato grafico e':

Qual e` la migliore? De gustibus... :-)

ciao!
frak