Upload
others
View
5
Download
0
Embed Size (px)
Citation preview
LABORATORIO MATLAB:
TEORIA DEI SEGNALI
Segnali deterministici e stocasticiElaborazione di dati e segnali Biomedici
2018/2019
2
Signal Processing Toolbox La Signal Processing Toolbox™ fornisce funzioni e app per analizzare, pre-elaborare ed estrarre feature da segnali campionati in modo uniforme o non uniforme. Il toolbox comprende gli strumenti per la progettazione di filtri e l’analisi, il ricampionamento, la linearizzazione, l’eliminazione del trend e la stima dello spettro di potenza. Il toolbox fornisce inoltre funzionalità per estrarre feature come changepoint e inviluppi, trovare modelli di picchi e segnali, quantificare somiglianze di segnale ed eseguire misurazioni come SNR e distorsione. È inoltre possibile eseguire l’analisi modale e degli ordini dei segnali di vibrazione.Oltre alle funzioni che permettono l’elaborazione dei segnali, le toolbox di MATLAB contengono app integrate per l’analisi semplificata dei dati, una di queste è la Signal Analyzer.
3
Teoria dei segnali in MATLAB
MATLAB è uno degli strumenti più importanti utilizzati in ricerca scientifica biomedica per l’analisi e il processamento dei segnali biologici. Lo studio di essi deve passare prima per l’applicazione della teoria dei segnali mediante MATLAB.
Come esempio saranno mostrate le funzioni MATLAB per la generazione di segnali notevoli, quali:- Rect- Tri- Delta di Dirac- Treno di impulsi
NB. Dato che sono funzioni si presuppone che i parametri di input siano dichiarati al di fuori delle funzioni (script o command window)
Per semplicità, l’intervallo dei tempi è stato definito con>> t = [ -10:0.01:10 ];
4
Generazione segnali: rect.m
function [y]=rect(x);
y=(abs(x)<0.5)+0.5*(abs(x)==0.5);
end
5
Generazione segnali: tri.m
function [y]=tri(t)
y=(1-abs(t)).*(abs(t)<1);
end
6
Generazione segnali: delta.mfunction [y]=delta(t)
y=zeros(1,length(t));
[~,i]=min(abs(t));
y(i)=1/(t(2)-t(1));
end
7
Generazione segnali: treno.mfunction [y]=treno(t,T)
i=T;
y=delta(t); %delta in 0
while i<=max(t)
y=y+delta(t-i)+delta(t+i);
i=T+i;
end
end
8
Area ed energia di un segnale Scrivere un programma che mostri la figura su un periodo del segnale periodico (con passo di campionamento pari a 0.02):
e ne calcoli area ed energia.Il segnale è periodico di periodo 2π. Per calcolare area ed energia avendo a che fare con campioni di segnale (vettore) è necessario effettuare le approssimazioni:
AREA
ENERGIA
con T passo di campionamento.
)(sin)(sin 3
2
0
2
0
3 kTTdttT
k
=
2
2
0
2
0
2)()( kTfTdttf
T
k
=
)(sin)( 3 ttf =
function [e]=energia(y,t)
e=sum((abs(y)).^2)*(t(2)-t(1));
end
function [e]=area(y,t)
e=sum(y)*(t(2)-t(1));
end
9
Figura
10
Energia di un segnale Scrivere un programma che mostri la figura del segnale tempo discreto (sequenza):
f[nT]=e−0.02nTsin[nT](ho una sequenza, per cui T=1) e ne calcoli l’area e l’energia (su un intervallo finito, ad esempio tra 0 e 200).
N.B. stem(Y) plots the data sequence Y as stems from the x axis terminated with circles for the data value.
11
Convoluzione
Consideriamo due sequenze a[n] e b[n] a supporto limitato. La loro convoluzione èdefinita come
Il segnale b risulta ribaltato (b(-k)) come se venisse ruotato di 180 gradi attorno alprimo campione. Avendo a che fare con segnali di lunghezza finita la sommatoria avràin realtà estremi limitati e ciascun elemento n del segnale finale (convoluzione) saràdato dalla sommatoria di più contributi che vedono il segnale a in posizione kmoltiplicato di volta in volta per il segnale b in posizione n-k: mentre il segnale a èfisso, il segnale b scorre avanzando da sinistra verso destra. K andrà da 0 al valore dellalunghezza del risultato pari alla somma della lunghezza dei singoli segnali a e b meno 1.
][][])[( kaknbnbak
+
−=
−=
12
ESERCIZIOConsideriamo due segnali rettangolari scalati in ampiezza, traslati e su base diversa da 1, campionati a passoT=0.02:
s1 t = 2 rectt − 1.5
2s2 t =
1
3rect
t
3
Scrivere le due rect utilizzando la funzione implementata precedentemente che è di seguito riportata(ricordare che x è un vettore dei tempi, su cui costruisco la rect, del tipo t = [−X, ..., −dx, 0, dx, ..., X] ):
function y = rect( x )
y = (abs(x) < .5) + .5 * (abs(x) == .5);
end
Calcolare la loro convoluzione (senza utilizzare il comando conv) con uno script che definisca le due recterichiami una funzione che si presenta nella forma:
function X=conv(s1,s2)
Rappresentare su tre figure diverse le due rect e il risultato della funzione conv.
Convoluzione
Sono tutti vettori colonna
Codice convoluzione.m
t = -10:0.01:10;
s1 = 2*rect((t-1.5)/2);
s2 = 1/3*rect(t/3);
X = conv(s1,s2);
t2 = linspace(min(t),max(t),length(X));
plot(t2,X)
S1(t)
S2(t)X(t)
14
Convoluzione
CONVOLUZIONE
S1(t) S2(t)
FIGURE FINALI
15
Convoluzione tempo TCScrivere uno script che, utilizzando la funzione convoluzione implementata, calcoli la convoluzione tra una sinc2(t) e una δ(t-10) e la rappresenti graficamente.
))((sin 2 tc
tempo(s)
16
Campionamento del segnaleIl campionamento del segnale consiste nella moltiplicazione del segnale stesso per un treno diimpulsi.La frequenza di Nyquist (fs/2) è la minima frequenza alla quale campionare il segnale per evitaredistorsioni e perdita di informazioni sul segnale (aliasing): data una funzione la cui trasformata diFourier sia nulla al di fuori di un certo intervallo di frequenze (ovvero un segnale a banda limitata)la frequenza di Nyquist corrisponde al doppio della sua frequenza massima.
𝑓𝑠 ≥ 2 ∗ 𝑓𝑚𝑎𝑥
Con:
fs, frequenza di campionamentofmax, frequenza massima del segnale da campionare
A livello pratico, il segnale risulta correttamente campionato se
fs > 10*fmax
17
Effetti del campionamento
t = [0:0.1:10];
x = sin(2*pi*100*t);
plot(t,x)
t = [0:0.1:10];
x = sin(2*pi*1*t);
plot(t,x)
18
❑ Lo strumento matematico che consente di trasferire lo studio dei segnali e dei sistemi dal dominio deltempo al dominio della frequenza è la trasformata di Fourier. Il vantaggio che deriva dall’introduzione deidue domini è la possibilità di cambiare la prospettiva con la quale si osserva un dato fenomeno.
Analisi dei segnali nel dominio della frequenza
❑ La relazione che definisce la trasformata di Fourier non è direttamente implementabile mediante unelaboratore digitale di segnale, sia perche essa richiede l’analisi di segnali continui, x(t) e X(f), sia perchel’integrale si estende all’infinito e richiederebbe dunque un numero infinito di dati da elaborare.
❑ Per poter effettuare tale trasformazione con un sistema digitale sono dunque necessarie tre operazionifondamentali:
→Campionamento (Segnali discreti)→il troncamento del segnale→la discretizzazione dell’asse delle frequenze.
Ciascuna di queste operazioni può influenzare significativamente l’attendibilita del risultato dell’analisi.
19
Trasformata discreta di FourierN
knjN
n
nexX k21
0
−−
=
=
La sequenza Xk prende il nome di Trasformata discreta di FourierDFT (Discrete Fourier Transform)NB: Nella formula non compare T
10 − Nk
La relazione che permette di calcolare gli N campioni di xn partendodagli N campioni di Xk prende il nome di
Trasformata discreta di Fourier inversaIDFT (Inverse Discrete Fourier Transform).
N
knjN
k
keXN
xn21
0
1=−
= 10 − Nn
20
❑ La DFT avrà lo stesso numero di campioni delsegnale nel tempo, ma distanziati di un intervalloΔf = Fs/N (risoluzione in frequenza: minimadistanza alla quale si devono trovare duefrequenze per essere distinte) con Fs pari allafrequenza di campionamento ed N numero dielementi del vettore dei tempi t
Xn
Campionamento nel tempo e in frequenza
21
Trasformata discreta di Fourier
❑ La trasformata di Fourier viene implementata in Matlab utilizzando il comando fft(x)che calcola la DFT del vettore x utilizzando l’algoritmo FFT.
❑ Il successo di questo strumento è in buona parte dovuto all'esistenza di un algoritmo,noto come FFT (Fast Fourier Transform, i.e. trasformata veloce di Fourier), chepermette di calcolare la DFT in maniera veloce.
❑ La FFT consente di decomporre il problema in sottoproblemi di complessità minore.Con questa si riduce il numero delle operazioni computazionali da N2 a NlogNnell’ipotesi che N sia una potenza di 2. Nel caso in cui il numero di campioni nonsoddisfi l’ipotesi si aggiungono dei campioni nulli (operazione di Zero Padding).
22
La sintassi: fft(x,N) →calcola la FFT su N punti, aggiungendo zeri se x ha meno di N punti, e troncando se ne ha di più.
Poiche in generale la X(f) cioè Y è complessa, essa puo essere descritta mediante gli spettri di ampiezza e fase. Per semplicita di trattazione, le figure che riportano gli andamenti degli spettri in frequenza dei segnali complessi X(f) si riferiranno, implicitamente, soltanto alle loro ampiezze.
Trasformata discreta di Fourier
23
Trasformata discreta di FourierCOMANDI
fft(x) :
La trasformata di Fourier di un segnale discreto è un segnale periodico nel dominio delle frequenze. Matlab lavorasempre nel dominio discreto, quindi usando la funzione fft si ottengono sempre segnali periodici in frequenza. Ad
esempio: dato un segnale di N campioni, definito rispetto al vettore di tempo t=[-N/2 : +N/2-1]*t0 ( t0 =passo di
scansione), la sua trasformata di Fourier sarà un segnale periodico nelle frequenze che si ripeterà ogni N campioni .Per questo motivo dopo una fft il segnale che si ottiene è quello in figura 1 dove i campioni relativi a frequenzenegative, vengono riportati in fondo, nella seconda metà del vettore .
24
Trasformata discreta di FourierCOMANDI
fftshift(fft(x)) :Shift zero-frequency component to center of spectrum
La funzione fftshift permette di riordinare le frequenze e rappresentare così il segnale trasformato al centro delvettore delle frequenze, come ci si aspetta.
25
Trasformata discreta di FourierFIGURA FINALE
26
Trasformata discreta di Fourier: fourierTransform.m
function
[X,f,df]=fourierTransform(x,fs,nfft)
N=length(x);
t=linspace(0,N/fs,N);
dT=t(2)-t(1);
X=fftshift(fft(x,nfft));
f=linspace(-.5*1/dT,+.5*1/dT,nfft);
df=abs(f(2)-f(1));
end
27
Trasformata discreta di Fourier: Esempio
Scrivere un programma che restituisca il PSD della somma di:- Seno di ampiezza 10 e frequenza 10 Hz;- Seno di ampiezza unitaria e frequenza 30 Hz;
NB. Si ricorda che secondo il teorema del campionamento la frequenza di campionamento (fs) deve essere maggiore o uguale alla frequenza MASSIMA del segnale.
dT = 0.01; % passo di campionamento (scelto secondo Nyquist)
fs = 1/dT; % frequenza di campionamento
t = [0:0.01:10]; %asse dei tempi
x = 10*sin(2*pi*10*t) + sin(2*pi*30*t); %segnale
nfft = 2^nextpow2(length(x)); %numero di punti in frequenza
[X,f,df] = fourierTransform(x,fs,nfft); %trasformata di Fourier
plot(f,abs(X))
28
Trasformata discreta di Fourier: Risultato
29
❑ Si è gia visto che l’analisi di Fourier si applica formalmente a segnali di durata infinitamente estesa e pertanto anche lasequenza dei campioni che rappresenta il segnale in forma discreta dovra essere teoricamente di lunghezza infinita.Tale ipotesi non è ovviamente realizzabile nella pratica. In generale, con riferimento a un processo di campionamentoreale, la sequenza dei campioni avra necessariamente un inizio e una fine.
❑ Per esaminare il problema è utile considerare il segnale di durata limitata come una porzione del segnale generico x(t),prelevata attraverso una opportuna finestra temporale w(t) (window), detta anche finestra di troncamento o diosservazione.
Troncamento del segnaleDispersione spettrale (leakage)
L’effetto del troncamento sul segnale si puo rappresentare nel seguente modo:xw (t) = x(t) ⋅ w(t)
La trasformata di Fourier del segnale troncato risulta dalla convoluzione degli spettri:
Xw(f)= X(f)∗W(f)
La convoluzione della trasformata X(f) del segnale con la trasformata W(f) della finestra di troncamento introduce un nuovo tipo di distorsione, detta dispersione spettrale (spectral leakage).
30
Troncamento del segnaleDispersione spettrale (leakage)
In pratica se lo spettro del segnale originario X(f) contiene delle transizioni nette, ad esempio componenti armonicheimpulsive come nel caso di un segnale periodico nel tempo, tali transizioni vengono smussate e lo spettro del segnaleperiodico troncato si disperde in frequenza, tanto piu quanto piu è stretta la finestra di troncamento.
L’entita della dispersione in frequenza dipende dalla durata Tw della finestra di osservazione e dal suo andamentotemporale. In particolare l’andamento nel tempo della finestra di troncamento determina l’ampiezza dei lobi laterali delladispersione e risulta quindi direttamente responsabile della accuratezza con cui viene stimato lo spettro del segnaletroncato. Sotto questo aspetto, concreti vantaggi possono essere ottenuti ampliando, entro limiti accettabili dal punto divista pratico, la durata Tw o utilizzando finestre temporali non rettangolari, ma con transizione piu graduale delle estremita(smoothing windows).
31
t=0:0.0002:63*0.2e-3; % vettore dei tempi
s1=4*cos(2*pi*1000*t+0.2*pi); % generazione del segnale
x dato
s2=1.5*cos(2*pi*1500*t); % dalla somma di due sinusoidi
x=s1+s2;
L=length(x);
NFFT= 2^nextpow2(L);
X=abs(fft(x,NFFT)); % calcolo dell'FFT su NFFT punti
f=linspace(-1/0.0002*1/2,1/0.0002*1/2,NFFT); % vettore
delle frequenze
plot(f,X);
xlabel('Frequenza [Hz]');
ylabel('Ampiezza');
Il seguente script calcola e visualizza la FFT di un segnale composto dalla somma di due sinusoidi rispettivamente a 1000 e 1500 Hz.
NFFT=64
N.B. La risoluzione spettrale (Δf, distanza tra i campioni in frequenza) non permette la visualizzazione dei lobi secondari, ma si nota un allargamento alla base del lobo principale. Lo spettro del segnale x infinito (non finestrato) mostra invece due nette armoniche alle frequenze 1000 e 1500 Hz
Troncamento del segnale
32
NFFT=256
FFT del segnale x=s1+s2
precedente valutata su 256
campioni
Troncamento del segnale
33
Scrivere uno script che calcoli e visualizzi la FFT di un segnale composto da una sinusoide a 500 Hz
Esercizio
34
PSD: periodogrampxx = periodogram(x)
pxx = periodogram(x,window)
pxx = periodogram(x,window,nfft)
restituisce la stima dello spettro di potenza del segnale di ingresso x, modificata utilizzando un tipo di finestra. La finestra è un vettore della stessa lunghezza di x.
restituisce la stima dello spettro di potenza del segnale di ingresso x, utilizzando nfft punti nella trasformazione discreta di Fourier (DFT).
restituisce la stima dello spettro di potenza del segnale di ingresso x, rilevato utilizzando una finestra rettangolare.
'Bartlett''Bartlett-Hann''Blackman''Blackman-Harris''Bohman’'Gaussian''Hamming’'Rectangular''Triangular''Tukey'
[pxx,f] = periodogram(x,window,nfft,fs) restituisce la stima dello spettro di potenza del segnale di ingresso x e il vettore delle frequenze f. La frequenza di campionamento, fs, è il numero di campioni per unità di tempo. Se l'unità di tempo è secondi, allora f è in cicli / secondo (Hz).
N.B. Se nfft è la potenza di 2 più vicina alla lunghezza del segnale, il vettore di default restituito da periodogram è pari a: nfft/2+1. Se invece come terzo ingresso alla funzione specifico un numero di elementi su cui lavorare pari a NFFT, per un segnale reale avrò:Pxx di lunghezza (NFFT/2+1) se NFFT è pari, di lunghezza (NFFT+1)/2 e NFFT è pari.
35
Power spectral density (PSD) estimateWELCH PERIODOGRAM
pxx = pwelch(x)
❑ Restituisce la stima della densità spettrale di potenza (PSD), pxx, del segnale in ingresso, x,rilevata utilizzando lo stimatore di Welch che calcola la media di segmenti sovrapposti.Quando x è un vettore, viene trattato come un singolo canale.
❑ Quando x è una matrice, la PSD viene calcolata indipendentemente per ogni colonna ememorizzata nella colonna corrispondente di pxx.
❑ Di default, il segnale x viene diviso in segmenti più lunghi possibili per ottenere un valoreprossimo e non superiore a 8 segmenti con il 50% di sovrapposizione e ogni segmento vienefinestrato con una finestra di Hamming. I periodogrammi ottenuti vengono mediati perottenere la stima PSD. Se la lunghezza di x non può essere divisa esattamente in un numerointero di segmenti con il 50% di sovrapposizione, x viene troncato di conseguenza
36
pxx = pwelch(x,window)pxx = pwelch(x,window,noverlap)pxx = pwelch(x,window,noverlap,nfft)[pxx,f] = pwelch(___,fs)
window può essere un vettore (la funzione in tal caso divide il segnale in segmenti di lunghezza uguale alla lunghezza di window e li moltiplica per esso) o un numero intero (il segnale viene diviso in segmenti, di lunghezza pari al numero indicato, che vengono successivamente moltiplicati per una finestra di Hamming della stessa lunghezza). noverlap se specificato è un numero intero, necessariamente minore della lunghezza di window. Di default esso viene ricavato dividendo per 2 la lunghezza di window (50% di overlapping).nfft specifica il numero di campioni per la Trasformata Discreta di Fourier da usare nella stima della PSD. Nfft di default è il numero più grande tra 256 e la più vicina potenza di 2 superiore alla lunghezza dei segmenti in cui ho suddiviso il segnale x.
[pxx,f] = pwelch(x,window,noverlap,f,fs)
restituisce la stima della PSD di Welch alle frequenze specificate nel vettore f. fs è la frequenza di campionamento. f deve contenere almeno 2 elementi in cicli per unità di tempo. Se l’unità di tempo è in secondi, allora f è in Hz.
Power spectral density (PSD) estimateWELCH PERIODOGRAM
37
Elettromiografia di superficie (sEMG): acquisizione ed elaborazione
38
Acquisizione del segnale sEMG
39
• Filtraggio del segnale nella banda 10 Hz - 450 Hz, fondamentale per eliminare rumori e artefatti al di fuori del contenuto frequenziale del segnale
• Stima di inviluppo Metodo classico: IEMG (Integrated ElectroMyoGraphy) che consiste in-rettificazione del segnale -filtraggio passa-basso (a seconda delle esigenze) o smoothing
• Normalizzazione, poiché il segnale EMG è dipendente dalle condizioni di misura
• Determinazione degli intervalli di attivazione muscolare
Pre-processing del segnale sEMG
40
Pre-processing del segnale sEMGStima di inviluppo
load('segnaliEMG.mat')
RBFrettificato=abs(RightBicepsfemoriscaputlongus);
RBFinviluppo=smooth(RBFrettificato,100);
figure
plot(Time,RightBicepsfemoriscaputlongus, 'b','LineWidth', 2)
xlabel('time','FontSize', 20)
ylabel('Right Biceps femoris caput longus (mV)', 'FontSize', 20)
figure
plot(Time,RBFrettificato, 'y')
hold on
plot(Time,RBFinviluppo, 'b','LineWidth', 2)
xlabel('time','FontSize', 20)
ylabel('Right Biceps femoris caput longus (mV)', 'FontSize', 20)
hold on
plot(stance_dx/1000,0, 'ro', 'LineWidth', 3)
hold on
plot(swing_dx/1000,0,'go', 'LineWidth', 3)
Per risolvere il problema della natura casuale del segnale EMG si utilizzano algoritmi di smoothing sul segnale rettificato che ne vadano ad evidenziare l’andamento del trend medio:
41
Segnale EMG grezzo
42
Stima di inviluppo
43
Elaborazione del segnale sEMGParametri nel dominio del tempo
Idealmente vorremmo ottenere un tracciato che sia direttamente legato a una caratteristica del muscolo(principalmente forza generata): a parità di task motorio è del tutto improbabile osservare gli stessi patternnel segnale tra soggetti diversi (non riproducibilità). Selezionando opportuni parametri di “ampiezza”,calcolati per piccoli sottointervalli (in genere tra 50ms e 100ms a seconda della rapidità dei movimenti) sicerca di limitare la parte non riproducibile del segnale:
SMOOTHING DEL SEGNALE RETTIFICATO A MEDIA MOBILE
SMOOTHING SULLA POTENZA MEDIA DEL SEGNALE
44
ESERCIZIO: 1)Calcolare ARV dei segnali EMG di Retto Femorale, Bicipite Femorale, Tibiale Anteriore e Gastrocnemio Laterale in un sottointervallo a scelta di appoggio e di volo del passo (utilizzare il file .mat SegnaliEMG).2)Calcolare l’RMS nelle stesse condizioni del punto precedente.
Applicazioni EMG
muscles=[RightBicepsfemoriscaputlongus, RightGastrocnemiuslateralis, RightRectusfemoris,
RightTibialisanterior];
%fase di appoggio
ARVstance=[];
for j=1: size(muscles,2)
ARVstance(j)=sum(abs(muscles(stance_dx(1):swing_dx(1),j)))/(swing_dx(1)-stance_dx(1));
end
%fase di volo
ARVswing=[];
for j=1: size(muscles,2)
ARVswing(j)=sum(abs(muscles(swing_dx(1):stance_dx(2),j)))/(stance_dx(2)-swing_dx(1));
end
45
Analisi spettrale del tracciato originale: frequenza mediana (valore che divide l’area in parti uguali) o frequenza media (valore che identifica il baricentro dello spettro di densità di
potenza) come indici del processo di reclutamento delle UM.
:
MDF
Elaborazione del segnale sEMGParametri nel dominio della frequenza
46
Frequenza media e medianaSINTASSI MATLAB
47
Fs=1000; %freq di campionamento
nfft= 2^nextpow2(size(RightGastrocnemiuslateralis,1));
[Pvv,fv]= periodogram(RightGastrocnemiuslateralis,[],nfft,Fs);
% dove l'argomento è vuoto ([]) si può usare il nome di una finestra
figure
plot(fv,Pvv,'m');
xlabel('f [Hz]','FontSize', 20); ylabel('PSD(f)','FontSize', 20);
title(' Densità spettrale di potenza (periodogramma)','FontSize', 20);
%Calcolo frequenza media e mediana
freqmean=meanfreq(Pvv,fv);
freqmedian=medfreq(Pvv,fv);
figure
meanfreq(Pvv,fv);
hold on
medfreq(Pvv,fv);
Stima dello spettro di densità di potenza
48
Stima dello spettro di densità di potenza
49
Stima dello spettro di densità di potenza
50
Scrivere una funzione « analisiEMG» che dati 4 segnali EMG li racchiuda in una matrice nF(numero frame segnali)x nS(numero segnali) e che calcoli tramite ciclo for per ogni segnale : AVR, RMS , PSD, Frequenza media e mediana.
function[Pvv,fv,freqmean,freqmedian,ARV,RMS]=analisiEMG(segn1,segn2,segn3,segn4,window,noverlap,
Fs)
segnTOT=[segn1,segn2,segn3,segn4];
[N,M]=size(segnTOT);
ARV=[];
RMS=[];
Pvv=[];
fv=[];
freqmean=[];
freqmedian=[];
for i=1:M
ARV(1,i)=sum(abs(segnTOT(:,i)))/N;
RMS(1,i)=sqrt((sum(segnTOT(:,i).^2))/N);
[Pvv(:,i),fv(:,i)]= pwelch(segnTOT(:,i),window,noverlap,Fs);
freqmean(1,i)=meanfreq(Pvv(:,i),fv(:,i));
freqmedian(1,i)=medfreq(Pvv(:,i),fv(:,i));
end
end
Esercizio