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
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
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

Dettagli
Publisher
A.A. 2009-2010
15 pagine
1 download
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.