Estratto del documento

–ASCII

Nel file elnino.mat (load elnino.mat) vi sono tali valori, misurati ogni mese per 14 anni.

Effettuare il grafico del fenomeno, ed il periodogramma.

Determinare i due picchi di massima potenza ed il corrispondente periodo.

Svolgimento

Tramite i valori contenuti nel file elnino.mat abbiamo calcolato i parametri essenziali per analizzare

il fenomeno nel tempo e nella frequenza.

load -ASCII elnino.mat;

samplingFrequency = 1; % una al mese

samplesNumber = numel(elnino); % numero di campioni

samplingInstants = 1:samplesNumber; % in mesi

time = samplesNumber/samplingFrequency; % tempo (in mesi)

spectrumFrequencies = (0:samplesNumber-1) / time; % frequenze dello spettro

maxFrequencyIndex = ceil((samplesNumber+1)/2);

%indice della frequenza più alta rappresentata nello spettro

Abbiamo graficato il fenomeno nel dominio del tempo.

% grafico del fenomeno nel dominio del tempo

figure();

subplot(2,1,1);

plot(samplingInstants, elnino);

xlabel('Months'); ylabel('Southern Oscillation Index');

title('Phenomenon El Nino');

% applicazione della fast fourier transform

elninoAbsSpectrum = abs(fft(elnino));

% grafico del fenomeno nel dominio della frequenza senza DC

subplot2 = subplot(2,1,2);

box(subplot2,'on');

hold(subplot2,'all');

xlim(subplot2,[0 0.51]);

stem(spectrumFrequencies(2:maxFrequencyIndex),elninoAbsSpectrum(2:maxFrequencyIndex),'Parent',su

bplot2);

title('Periodogram of Phenomenon El Nino');

xlabel('Frequency (1/Month)'); ylabel('Amplitude');

Per determinare i due picchi di massima potenza, analizziamo il fenomeno El Nino nel dominio

della frequenza tramite l’applicazione della “Fast Fourier Transform”. Inoltre abbiamo graficato il

periodogramma.

% prendo solo le componenti necessarie per un segnale reale

maxAmplitude = elninoAbsSpectrum(1:maxFrequencyIndex);

maxAmplitude(1) = 0; %annullo componente continuo

% calcolo dei picchi di massima ampiezza

[maxAmplitude,orderIndex] = sort(maxAmplitude,'descend');

% calcolo le frequenze relative ai picchi

maxFrequencies = spectrumFrequencies(orderIndex);

maxPeriod = 1./maxFrequencies;

Per determinare i picchi abbiamo preso solo le componenti significative del fenomeno e le abbiamo

ordinate in maniera decrescente; successivamente calcoliamo le frequenze e i periodi relativi ai

picchi.

stem(maxFrequencies(1:2),maxAmplitude(1:2),'MarkerFaceColor',[1 0 0],'Parent',subplot2);

text(maxFrequencies(1),maxAmplitude(1)+20,'1° Peak','FontSize',8);

text(maxFrequencies(2),maxAmplitude(2)+20,'2° Peak','FontSize',8);

text(0.20,200,[ ...

' --- First Peak --- ' 10 13 ...

'Amplitude: ' num2str(maxAmplitude(1)) 10 13 ...

'Frequency: ' num2str(maxFrequencies(1)) ' 1/month' 10 13 ...

'Period : ' num2str(maxPeriod(1)) ' months'],'FontSize',6);

text(0.35,200,[ ...

'--- Second Peak --- ' 10 13 ...

'Amplitude: ' num2str(maxAmplitude(2)) 10 13 ...

'Frequency: ' num2str(maxFrequencies(2)) ' 1/month' 10 13 ...

'Period : ' num2str(maxPeriod(2)) ' months'], 'FontSize',6);

Infine, abbiamo evidenziato nel periodogramma i primi 2 picchi trovati, ed inoltre visualizzato le

relative ampiezze, frequenze e periodi. Phenomenon El Nino

Index 20

Oscillation 15

10

Southern 5

0 0 20 40 60 80 100 120 140 160 180

Months

Periodogram of Phenomenon El Nino

300 1° Peak --- First Peak --- --- Second Peak ---

Amplitude: 259.5953 Amplitude: 118.9278

Amplitude 200 Frequency: 0.083333 1/month Frequency: 0.02381 1/month

Period : 12 months Period : 42 months

2° Peak

100

0 0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5

Frequency (1/Month)

Il risultato dell’elaborazione è mostrato in figura.

Esercizio 3

Specifiche

Realizzare due function file:

1) La codifica DTMF di un numero di telefono. Il segnale generato è costituito per ogni cifra

da un tono di 0.5sec. seguito da un silenzio di 0.2sec. La frequenza di campionamento è

Fs=8000Hz.

2) La decodifica di un segnale che individua un numero di telefono. Il segnale è composto da

un tono di 0.5sec. per ogni cifra seguito da un silenzio di 0.2sec. La frequenza di

campionamento è Fs=8000Hz.

Svolgimento

Vedere documentazione esterna di dtmf.m; dtmfInv.m; dtmfPhone.m.

Esempi d’uso:

>> audio = dtmf('08173855AB');

>> sound(audio,8000);

>> dtmfInv(audio),

ans =

08173855AB

>> audio = dtmfPhone('withVoice');

Prima della digitazione Dopo la digitazione del numero

>> % chiuderea la GUI e proseguire

>> dtmfInv(audio),

ans =

0817309#BCC

>>

Esercizio 4

Specifiche

Comporre un file musicale, ascoltarlo e scriverlo su un file WAVE.

Nel file WAVE note.wav vi è un segnale sonoro costituito da sei note, ognuna della durata di 0.5 sec.,

con frequenza di campionamento Fs=8000. Fare il grafico dello spettro di note.wav. Estrarre le sei note

(A=LA4, B=SI4, C=DO#5, D=RE5, E=MI5, F=FA#5) e combinarle per ottenere il brano musicale da

salvare, composto dalla seguenti strofe:

Strofa (I) AA EE FF EE

Strofa (II) DD CC BB AA

Strofa (III) EE DD CC BB x2

ripetere strofe I e II.

Svolgimento

Carichiamo il file audio note.wav e calcoliamo i parametri essenziali per analizzare il file.

[notes samplingFrequency]=wavread('note.wav'); %caricamento file note.wav

samplesNumber = numel(notes); % numero di campioni

samplingInstants = (0:(samplesNumber-1))/samplingFrequency; % in sec

time = samplesNumber/samplingFrequency; % tempo (in sec)

spectrumFrequencies = (0:samplesNumber-1) / time; % frequenze dello spettro

maxFrequencyIndex = ceil((samplesNumber+1)/2);

%indice della frequenza più alta rappresentata nello spettro

noteNumber = 6; %numero di note del file note.wav

samplesPerNote = floor(samplesNumber/noteNumber);

%calcolo dello spettro dell'audio note.wav

notesAbsSpectrum = abs(fft(notes));

%calcolo dello spettrogramma usando la Short-Time Fourier Transform (STFT)

[notesSTFT,notesSTFT_F,notesSTFT_T] = spectrogram(notes,128,120,256,samplingFrequency);

% notesSTFT (matrice)spettrogramma dell'audio note.wav

% notesSTFT_F vettore delle frequenze su cui lo spettrogramma è calcolato

% notesSTFT_T vettore dei tempi su cui lo spettrogramma è calcolato

%

Calcolo dello spettro e dello spettrogramma di note.wav.

% grafico dello spettrogramma dell'audio note.wav

figure1 = figure;

axes1 = subplot(2,2,1,'Parent',figure1);

hold(axes1,'all');

surf(notesSTFT_T,notesSTFT_F,abs(notesSTFT),'Parent',axes1,'EdgeColor','none');

xlim([0 time]); ylim([0 1000]);

colormap(1-gray);

title('STFT of Signal');

xlabel('Time (sec)'); ylabel('Frequency (Hz)');

% grafico dello spettro dell'audio note.wav

axes2 = subplot(2,2,2,'Parent',figure1);

plot(spectrumFrequencies(2:maxFrequencyIndex),notesAbsSpectrum(2:maxFrequencyIndex));

view([90 -90]); xlim([0 1000]);

title('Spectrum of Signal');

xlabel('Frequency (Hz)'); ylabel('Amplitude');

% grafico dell'audio note.wav nel dominio del tempo

axes3 = subplot(2,2,3,'Parent',figure1);

plot(samplingInstants,notes);

xlim([0 time]);

xlabel('Time (sec)'); ylabel('Signal');

Grafichiamo lo spettro, lo spettrogramma e l’andamento temporale di note.wav .

STFT of Signal Spectrum of Signal

1000 1000

(Hz) (Hz)

Frequency Frequency

500 500

0 0

0 1 2 3 0 500 1000 1500

Time (sec) Amplitude

1

0.5

Signal 0

-0.5

-1 0 1 2 3

Time (sec)

% estrazione note dal segnale

A = notes(1:samplesPerNote)'; %LA4

B = notes(samplesPerNote+1:2*samplesPerNote)'; %SI4

C = notes(2*samplesPerNote+1:3*samplesPerNote)'; %DO#5

D = notes(3*samplesPerNote+1:4*samplesPerNote)'; %RE5

E = notes(4*samplesPerNote+1:5*samplesPerNote)'; %MI5

F = notes(5*samplesPerNote+1:6*samplesPerNote)'; %FA#5

% composizione delle strofe

strophe1 = [A A E E F F E E];

strophe2 = [D D C C B B A A];

strophe3 = [E E D D C C B B];

% composizione del brano

track = [strophe1 strophe2 strophe3 strophe3 strophe1 strophe2];

% salvo il brano nel file brano.wav

wavwrite(track,samplingFrequency,'track.wav');

Sono state estratte le 6 note da note.wav, ed è stato composto il brano come da specifica.

% Costruzione dello spartito del brano

figure();

axes4 = axes();

hold(axes4,'all');

%calcolo dello spettrogramma usando la Short-Time Fourier Transform (STFT)

[trackSTFT,trackSTFT_F,trackSTFT_T] = spectrogram(track,256,120/8,256,samplingFrequency);

% trackSTFT (matrice)spettrogramma del brano

% trackSTFT_F vettore delle frequenze su cui lo spettrogramma è calcolato

% trackSTFT_T vettore dei tempi su cui lo spettrogramma è calcolato

%

pentagramLabel = {'Do4','Do#4','Re4','Re#4','Mi4','Fa4','Fa#4','Sol4', ...

'Sol#4','La4','La#4','Si4','Do5','Do#5','Re5','Re#5', ...

'Mi5','Fa5','Fa#5','Sol5'};

pentagramNote = 440.* 2.^((-9:10)./12);

pentagramLine = 440.* 2.^([-5 -2 2 5 8]./12);

trackLevel = double(abs(trackSTFT)>60);

colormap([1 1 1; 0 0 0]);

surf(trackSTFT_T,trackSTFT_F,trackLevel,'Parent',axes4, 'EdgeColor','none');

set(axes4,'YTickLabel',pentagramLabel,'YTick',pentagramNote,'Yscale','log');

plot([0 numel(track)/samplingFrequency],[pentagramLine ; pentagramLine], ...

'LineWidth',2, 'Color',[0.5 0.5 0.5] , 'LineStyle' ,'-');

title('Sheet music of track');

xlabel('Time (sec)'); ylabel('Notes');

ylim([200 900]); xlim([0 numel(track)/samplingFrequency]);

% riproduzione del brano

sound(track,samplingFrequency);

Infine abbiamo creato il pentagramma e graficato lo spartito del brano.

Sheet music of track

Sol5

Fa#5

Fa5

Mi5

Re#5

Re5

Do#5

Do5

Si4

La#4

Notes La4

Sol#4

Sol4

Fa#4

Fa4

Mi4

Re#4

Re4

Do#4

Do4 0 5 10 15 20

Time (sec)

dtmf :: Functions file:///D:/Universita/workspaceCN/Elaborati2/dtmf/dtmf.html

dtmf

Dato in ingresso un codice numerico lo codifica in un segnale sonoro secondo il sistema Dual Tone Multi-

Frequency(DTMF).

Sintassi

audio = dtmf(number)

Descrizione , restituisce

Anteprima
Vedrai una selezione di 4 pagine su 15
Calcolo Numerico II – Elaborato Pag. 1 Calcolo Numerico II – Elaborato Pag. 2
Anteprima di 4 pagg. su 15.
Scarica il documento per vederlo tutto.
Calcolo Numerico II – Elaborato Pag. 6
Anteprima di 4 pagg. su 15.
Scarica il documento per vederlo tutto.
Calcolo Numerico II – Elaborato Pag. 11
1 su 15
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Scienze matematiche e informatiche MAT/08 Analisi numerica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher Sara F di informazioni apprese con la frequenza delle lezioni di Calcolo Numerico II e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli studi di Napoli Federico II o del prof D'Amore Luisa.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community