Esercizio TAENSM I: creare un inviluppo esponenziale
-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
- blog di frak
- Login o registrati per inviare commenti

