TUTORIAL
Pedro Gomis
ECG lead II
1
-20
0.5
PSD (dbm/Hz)
-40
0
Ampl
(mV)
-0.5
-60
-80
-1
-100
-1.5
-120
-2
0
100
200
300
400
t (ms)
500
600
700
50
100
150
200
250
300
frecuencia (Hz)
350
800
Funcion de criterio
-8.8
AIC
MDL
CIC
-9
-9.2
-9.4
-9.6
-9.8
-10
-10.2
-10.4
-10.6
-10.8
10
15
20
ordene na
25
30
35
40
nb
PARMA (q ) = e
B(q)
A(q )
PARMA ( f ) = Ts e
2
q =e
b e
k =0
na
2
j 2kf / f s
1 + ak e
k =1
2
j 2kf / f s
400
450
500
ISBN: 978-84-695-3841-8
ii
TABLA DE CONTENIDOS
Objetivos. ................................................................................................................................ 1
1. Seales en tiempo continuo, de valores continuos (analgica) ...................................... 1
1.1) Anlisis de Fourier de la seal en tiempo continuo .................................................... 2
1.2) Potencia y energa en el dominio de Fourier ............................................................... 2
2. Seales en tiempo discreto de valores discretos ............................................................ 4
2.1) Potencia y Energa en el dominio del tiempo .............................................................. 4
2.2) Anlisis de Fourier de la seal en tiempo discreto ...................................................... 5
2.3) Potencia y Energa en el dominio de Fourier .............................................................. 8
3. Anlisis espectral con tnicas no paramtricas (Fourier) . ........................................... 10
3.1) Introduccin .............................................................................................................. 10
3.2) Densidad de Potencia Espectral (PSD) con el periodograma estndar. .................... 12
3.3) Periodograma modificado (seal enventanada) ........................................................ 14
3.4) Mtodo de Welch (periodograma enventanado, segmentado y promediado) ........... 16
4. Anlisis Espectral con Mtodos Paramtricos ............................................................. 17
4.1) Modelado de seales ................................................................................................. 17
4.1.1) Estimacin de Modelos AR................................................................................ 19
4.1.2) Estimacin de Modelos ARMA ......................................................................... 20
4.2) Bsqueda del mejor orden de modelo ................................................................... 24
4.2.1) Bsqueda del mejor modelo con estructura AR ............................................. 24
- Uso de MATLAB para hallar el mejor orden de modelo AR............................. 27
4.2.2) Bsqueda del mejor modelo ARMA .............................................................. 29
- Uso de MATLAB para hallar el mejor orden de modelo ARMA ...................... 30
4.3) Densidad de Potencia Espectral (PSD) con modelado paramtrico .......................... 32
4.3.1) Densidad de Potencia Espectral con modelos AR ............................................. 33
4.3.2) Densidad de Potencia Espectral con modelos ARMA ....................................... 37
5. Estimacin Espectral. Aplicaciones a seales biomdicas .......................................... 44
5.1) Energa espectral del complejo QRS de un ECG. ..................................................... 44
5.1.1) PSD con tcnicas no-paramtricas ..................................................................... 45
5.1.2) PSD con mtodos paramtricos.......................................................................... 48
5.1.2.1) Estructuras AR ............................................................................................ 48
5.1.2.2) Estructuras ARMA ...................................................................................... 51
5.2) Seal de variabilidad del ritmo cardiaco (HRV) simulada. ...................................... 57
5.2.1) PSD y potencia promedio con tcnicas no paramtricas .................................... 58
5.2.2) PSD y potencia promedio con mtodos paramtricos ........................................ 61
a) Estructuras AR...................................................................................................... 61
b) Estructuras ARMA ............................................................................................... 64
5.3) Seal de variabilidad del ritmo cardiaco (HRV) real remuestreada a 3 Hz. ............. 71
5.3.1) PSD y potencia promedio con tcnicas no paramtricas .................................... 71
5.2.2) PSD y potencia promedio con mtodos paramtricos ............................................ 76
a) Estructuras AR...................................................................................................... 76
b) Estructuras ARMA ............................................................................................... 79
Referencias ........................................................................................................................... 84
iii
iv
Objetivos.
OBJETIVOS.
Analizar y caracterizar seales biomdicas discretas de duracin finita a travs de su
espectro estimado de frecuencias, considerando la energa o potencia de la seal distribuida a
travs de su espectro de frecuencias.
Amplitud (V)
1
0.5
0
-0.5
-1
-1.5
-2
0.01
0.02
0.03
t (segundos)
0.04
0.05
0.06
E=
x (t )
a
dt
(1.1)
1
2
Pm = x a (t ) dt
T 0
(1.2)
1
Pm =
0.025
0.025
A2
=2
A sin( 2 40t ) dt =
2
2
[Volts2] [Watts]
La energa de un ciclo de seal ser E=A2T/2 = 0.05 Wattssegundo, de dos ciclos ser E =
0.1 Ws. En una hora de seal habr 144000 ciclos y E= 7200 Ws = 2 Whora.
En el caso de seales no-periodicas (que pudieran incluir una seal periodica limitada en el
un tiempo Tc), tenemos que la potencia media es
1
2
xa (t ) dt
Tc Tc Tc
Pm = lim
(1.3)
= Pm
R =1
(1.4)
por lo tanto
x RMS =
1
T
xa (t ) dt
(1.5)
xa (t ) =
ck e j 2kF t ,
donde ck =
k =
1
T
xa (t )e
j 2kF0 t
dt (1.6)
Sin embargo si la seal continua es de duracin finita, estamos en el caso de una seal noperiodica. En estos casos de seales de energa finita, su descomposicin espectral se realiza
con la transformada de Fourier, que est definida como:
X a (F ) =
xa ( t ) e
j 2Ft
dt
[Volts s]
The Mathworks
(1.7)
E=
xa ( t )
dt =
1
X a ( F ) dF =
2
2
X a ( )
(1.8)
(1.9)
(1.10)
donde XaTc es la transformada de Fourier de xa(t) sobre el intervalo de tiempo Tc, xaTc(t), y la
energa finita de la seal es
ETc =
X aTc ( F ) dF
(1.11)
ETc
1
2
= lim
X aTc ( F ) dF
Tc Tc
Tc Tc
Pm = lim
(1.12)
Pxx ( F )dF = Pm
(1.13)
Y si comparamos la ecuacin (1.13) con (1.12), intercambiando el orden del lmite y la integral,
1
2
X aTc ( F ) dF = Pxx ( F )dF , por lo que la PSD de la seal no
tenemos Pm = lim
Tc Tc
1
2
X aTc ( F )
Tc Tc
Pxx = lim
[Volts2/Hz = Watts/Hz]
(1.14)
Aunque, en general, el intercambio del lmite y la integral que nos condujo a la expresin (1.14)
no es estrictamente correcto, en un rango de frecuencias finitas, digamos f1 y f2, s lo es; es decir,
f2
f2
f2
Tc f1
1
2
X aTc ( F ) dF
Tc
(1.15)
x(n) = xa(nTs),
(2.1)
donde x(n) es la seal en tiempo discreto obtenida tomando muestras de la seal analgica
xa(t) cada Ts segundos. La seal xa(t) muestreada, xa(nTs), se denota tambin xa*(t). El intervalo
de tiempo Ts entre muestras sucesivas se llama perodo de muestro o intervalo de muestreo y su
inverso: 1/Ts = fs se denomina frecuencia de muestreo (en muestras por segundo o Hz). La
conversin analgico-digital (A/D) de la seal xa(t) produce la secuencia, seal digital o serie de
tiempo, x(n), que puede considerarse como la seal de salida de un muestreador ideal. De esta
forma, x(n) se puede expresar en funcin de una suma de impulsos escalados, como el producto
de la seal xa(t) por un tren de impulsos unitario
p(t)=+(0)+ (t-Ts)+ (t-2Ts)+... =
(t nTs )
(2.2)
n =
de forma:
(2.3)
(t)
xa(t)
xa(t)
x(n)
fs=1/T
Modulador
de
Impulsos
x(n)
E=
x(n)
(2.4)
n =1
Sin embargo, tomando en cuenta que las muestras estn espaciadas en Ts=0.001, podemos
calcular la energa como
N
1 N
2
x(n)
f s n =1
E = Ts x ( n ) =
2
n =1
[W-s]
(2.5)
>> Ener=Ts*sum(x.^2) %
La potencia media de la seal discreta puede hallarse, a partir de (1.2) y (1.3), como:
Pm =
1
N
x ( n)
(2.6)
n =1
N
1
2
x(n) (seal no-periodica de duracin 2N+1) (2.7)
N 2 N + 1
n= N
Pm = lim
x RMS =
1
N
x ( n)
(2.8)
n =1
P = 2 [Watts]
>> Pm=1/length(x)*sum(x.^2)
Pm = 1.992 [W]
t=0:Ts:3;
x=2*sin(2*pi*Fo*t);
N=length(x); % Nmero de muestras de la seal (N=3001)
Ener=Ts*sum(x.^2) %
La potencia media es
>> Pm=1/length(x)*sum(x.^2)
Pm = 1.9993
X ( e j ) =
x(n)e j n
(2.9)
n =
Para seales discretas, x(n), de duracin finita: 0 n N-1 (N muestras), como suelen ser
las seales biomdicas adquiridas en la prctica, se calculan N valores de la transformada de
Fourier entre los puntos 0 k N 1. Estos coeficientes se hallan muestreando X ( e j ) sobre el
eje (normalizado), entre 0 2 (muestreo en el dominio de la frecuencia) para valores
= 2k/N, 0 k N 1. Se halla as la transformada discreta de Fourier (DFT) de la seal x(n)
X ( k ) = X ( e j )
= 2k / N
N 1
x(n)e j 2kn / N ,0 k N 1
(2.10)
n =0
xa (nT )e j nTs =
n =
x(n)e j nTs
(2.11)
n =
donde x(n) xa(nT) y X*(F) denota el espectro de la seal xa(t) muestreada, xa*(t)=xa(nTs).
Si usamos la representacin en serie de Fourier de un tren de impulsos unitarios
p (t ) =
(t nTs ) =
n =
1 j 2kt / Ts
e
Ts k =
(2.12)
xa (t )
(2.13)
X ( e j ) =
1
X ( F kf s )
Ts k =
(2.14)
(2.15)
n =1
El ndice de la primera muestra de la seal x(n) es 0 y la ltima muestra es N-1 para la frmula de Fourier.
En Matlab, la primera muestra tiene ndice 1 y la ltima N
El clculo de la DFT, que se realiza en MATLAB con la FFT, es ms rpido si se hace con
un nmero de puntos, Nfft, potencia de 2. Si utilizamos un nmero de coeficientes Nfft=4096, se
hallara: X=fft(x,Nfft)=fft(x,4096); En este caso el vector X es de 4096 elementos. Sigamos este
ejemplo con las 3001 muestras de x y X=fft(x). Utilizaremos Nfft para denotar el nmero de
puntos de clculo de la fft y N el tamao del vector x(n).
Como la seal x (de 3 s de duracin) fue muestreada a fs = 1000 Hz, entonces los ndices
que representan los 3001 valores de Fourier k de X(k) deben escalarse para llevarlos a escala de
frecuencia, f, como f=k fs/Nfft. As X(k) X(f). Trabajemos con Nfft = N;
>> f=(0:N-1)*fs/N;
>> plot(f,abs(X))
Espectro de amplitud de X(jw)
3000
2500
Amplitud
2000
1500
1000
500
600
400
frecuencia (Hz)
200
800
1000
Se puede observar que la amplitud est escalada por fs=1000. Es decir, si dividimos abs(X)
entre fs, de acuerdo a la ecuacin (2.14), obtenemos los valores de amplitud del espectro
equivalentes a la seal analgica muestreada. Es conveniente, adems, expresar el espectro de
frecuencias de esta seal (originalmente analgica) en el ancho de banda de 0 a la mitad de la
frecuencia de muestreo, es decir, hasta la frecuencia de Nyquist.
>>if rem(N,2), % se evalua la paridad de N
>>
select = 1:(N+1)/2; % si N es impar
>>else
>>
select = 1:N/2+1; % si N es par
>> end
>>% select en este caso es de 1501 elementos
>>plot(f(select),Ts*2*abs(X(select)))
Espectro de frecuencias X(f) de x
6
Amplitud
50
100
150
200
250
300
frecuencia (Hz)
350
400
450
500
1 N 1
2
X( f )
(2.16)
N k =0
Tomando en cuenta que las muestras estn espaciadas en Ts (en el ejemplo Ts=0.001),
podemos calcular la energa como (tomaremos los ndices como en MATLAB 1 n N, en
lugar de 0 k N-1)
T N
1 N
2
2
[W-s]
(2.17)
E = s X(f ) =
X(f )
N n =1
N f s n =1
E=
>> Ener=(Ts/N)*sum(abs(X).^2)
Por lo cual, la Energa puede ser hallada de acuerdo al teorema de Parseval de conservacin
de la energa en ambos dominios, considerando la frecuencia de muestreo, como:
1 N
1 N
2
2
(2.18)
E=
x
(
n
)
=
X(f )
f s n =1
f s N n =1
La densidad de potencia espectral (PSD) 2, Pxx, est dada, por la expresin
Pxx ( f ) =
1
2
X(f )
fs N
[Watt/Hz]
(2.19)
Hallemos la PSD de la seal xa(t) de 3 s, discretizada, con el espectro completo (los dos
lados simtricos del espectro),
>> Pxx=(abs(X).^2)/(N*fs);
>> plot(f,Pxx)
PSD de x(n) 'ambos lados del espectro'
3
2.5
PSD
(Watt/
Hz)
1.5
0.5
200
400
600
frecuencia (Hz)
800
1000
20
10
0
-10
PSD (dB/Hz)
PSD (Watt/Hz)
-20
-30
-40
-50
-60
-70
0
100
-80
500
400
300
200
frecuencia (Hz)
100
200
300
frecuencia (Hz)
400
500
La potencia media de esta seal se puede aproximar, utilzando las ecuaciones (2.6), (2.7),
(2.16) y (2.19), a partir del valor Pxx como:
Pm =
1
N2
X(f )
n =1
fs N
Pxx(k )
N k =1
(2.19)
entre f1 y f 2
f2
Tc f1
f2
1
2
X aTc ( F ) dF
Tc
(2.20)
cuando el tiempo de duracin de la seal truncada es mucho mayor que los periodos de los
componentes de mayor frecuencia. Probemos las dos ecuaciones para hallar la potencia media
de este segmento de seal sinusoidal
>> Pxx=(abs(X).^2)/(N*fs);
>> Pm=(fs/N)*sum(Pxx) % igual a Pm=(fs/N)*sum(Pxx_u)
Pm = 1.9993 [Watts]
>> Pm=trapz(f_u, Pxx_u) % En este caso las frecuencias se integran entre f1 = 0 Hz y f2 = fs/2 Hz
Pm =
1.9993 [W]
(3.1)
La dispersin espectral se puede reducir, para mejorar la distorsin, con el uso de ventanas
de tipo cosenoidales que suavizan los extremos del segmento. Una definicin prctica de
resolucin espectral, con el uso de ventanas, es el ancho de banda efectivo del espectro de la
ventana [Har78], considerado como el intervalo de frecuencia que contiene la energa
Un anlisis mucho ms completo, con una amplia introduccin histrica, de estimacin espectral se puede
obtener en el libro de S.L. Marple Jr. [Mar87]
4
En ingls spectral leakage
10
(3.2)
donde Kw es una constante que refleja el incremento del ancho de banda para cada tipo de
ventana. Se suelen usar varios criterios para definir la energa significativa: (i) el 95 % de la
energa total (el ms conservador); (ii) la energa del espectro cuando ste cae 6 dB (sugerido
por Harris, 1978); (iii) la energa del espectro cuando ste cae 3 dB (el menos conservador).
Para ventanas de tipo cosenoidales, tpicamente usadas en seales biomdicas, como las de
Blackman-Harris, Hamming, Hanning o Keisser-Bessel, Kw est en el rango de 3,6 a 4 (usando
el criterio ms conservador). Esto implica que para un segmento de 120 ms la resolucin
espectral efectiva es alrededor de 32 Hz. Ventanas como la de Blackman-Harris de 4 trminos
producen una reducida dispersin espectral, pues presenta lbulos laterales muy atenuados. En
esta ventana Kw = 2,44, utilizando el criterio de -6 dB, lo que produce una resolucin espectral
de 20 Hz para el segmento de 120 ms.
La estimacin de la potencia espectral es realizada a partir de la seal misma. Este anlisis
se realizar utilizando el toolbox signal processing de MATLAB. A manera de ejemplo
utilizaremos una primera seal formada por dos sinusoides de frecuencias cercanas (80 y 100
Hz), de 2 segundos de duracin, muestreadas a 700 muestras por segundo con ruido aadido.
Posteriormente utilizaremos el QRS de un electrocardiograma (ECG) adquirido a fs = 1000
muestras por segundo y seales RR de variabilidad de ritmo cardiaco.
Seal 1 : 1,5 sen(2 80 t) + sen(2 100 t) + ruido. En MATLAB:
>>fs=700 ;
>>t = (0 :1/fs :2) ;
>>x1 = 1.5*sin(2*pi*80*t) + sin(2*pi*100*t) ;
>>ruido= 0.1*rand(size(t)) ;
>>x1n = x1 + ruido ;
>>N=length(x1n)
% N = 1401
Segmento de x1n(t)
3
Ampl (V)
-1
-2
-3
0.05
0.1
0.15
0.2
t (s)
0.25
0.3
0.35
0.4
11
|X1n(f)|
0.5
100
200
300
400
frecuencia (Hz)
500
600
700
1.2
PSD (Watt/Hz)
0.8
0.6
0.4
0.2
100
200
300
400
500
frecuencia (Hz)
12
600
700
PSD de x1n
10
2.5
0
-10
PSD (dB/Hz)
PSD (Watt/Hz)
-20
1.5
-30
-40
-50
-60
0.5
-70
0
50
100
150
200
frecuencia (Hz)
250
300
-80
350
50
100
150
200
frecuencia (Hz)
250
300
350
E = Pxx(k )
(3.3)
k =1
>> Ener=sum(Pxx)
Ener =
3.2557
[W-s] [V2-s]
La potencia media de cada componente sinusoidal es A2/2. Para la componente de 80 Hz, con
amplitud A=1,5 V, Pm1= 1,125 W, y para la componente de 100 Hz, de Amplitud 1 V, Pm2 = 0,5
W. La suma es Pm = Pm1 + Pm2 = 1,625 W.
Si quisiramos hallar la energa de la banda de frecuencia de 75 a 85 Hz, utilizamos:
>> ind75_85=find((f >= 75) & (f <= 85));
>> Ener75_85=sum(Pxx(ind75_85))
Ener75_85 =
13
% Nfft = 4096;
Obtenemos la misma grfica PSD (o similar). Sin embargo, la energa total se halla:
N
E=
N fft
N fft
Pxx(k )
(3.4)
k =1
Pm =
fs
N fft
N fft
Pxx(k )
(3.5)
k =1
>> Pm=fs*sum(P(ind75_85))/Nfft
Pm =
1.1124 [V2-s]
% equivale a w=hamming(N);
Xw( f )
f s NU
donde U es la constante de normalizacin de la ventana
14
(3.6)
U=
N fft 1
w(n) / N
(3.7)
n =0
U=sum(w.^2)/N;
Pxxw=(abs(Xw).^2)/(N*fs*U);
Pxx_unlado = Pxxw(select);
Pxxw_u = [Pxx_unlado(1); 2*Pxx_unlado(2:end-1); Pxx_unlado(end)];
ind75_85=find(f >= 75 & f <= 85);
0
Power Spectral Density (dB/Hz)
PSD (dB/Hz)
-20
-40
-60
-20
-40
-60
-80
-100
-80
50
100
150
200
frecuencia (Hz)
250
300
-100
350
50
200
150
Frequency (Hz)
100
250
300
La ausencia del uso de una ventana en el segmento de seal usada se interpreta como una
ventana rectangular. La ventana rectangular en el comando periodogram, es el valor por
defecto del tipo de ventana: se coloca en la 2da entrada [ ] o boxcar(length(x1n)). Los tipos de
ventanas se describen en la pgina. 4-13 del tutorial de Signal Processing.
Los espectros de ambos lados se pueden hallar como:
>>plot(f,10*log10(Pxxw)),grid
>> periodogram(x1n,hamming(N),N,fs,twosided);
0
-10
-20
-20
-10
PSD (dB/Hz)
-30
-40
-50
-60
-70
-80
-30
-40
-50
-60
-70
-80
-90
-90
-100
-100
100
200
300
400
frecuencia (Hz)
500
600
700
15
100
200
300
400
Frequency (Hz)
500
600
-30
-40
-50
-60
-70
50
100
200
150
Frequency (Hz)
16
250
300
(4.1)
donde y(n) es la seal de salida, u(n), la de entrada y (n) es el trmino aditivo no considerado o
explicado por el modelo, que se considera el error o ruido. La funcin f() puede ser
parametrizada con un vector de parmetros , de dimensin finita, y expresada en trminos de
un vestor de regresin (n). De esta forma, el sistema en tiempo discreto de la ecuacin (4.1)
representa una estructura general de modelo de regresin:
(4.2)
y (n) = f ( (n), ) + (n)
siendo (n) es el vector de regresin de dimensin finita
(4.3)
(n) = ( y (n 1),, y (n na), u (n), u (n 1),, u (n nb))
donde na y nb son los retardos mximos considerados para las muestras de las seales salida y
entrada, respectivamente. Los parmetros se seleccionan de = N ; es decir, son ajustados a
partir de los valores de entrada y salida, minimizando una funcin de prdida VN( , definida en
trminos del error entre la seal real y la modelada:
(4.4)
N = arg min V N ( )
17
(4.6)
(4.8)
A( q) = 1 + a1q 1 + + ana q na
(4.9)
B ( q) = b0 + b1q 1 + + bnb q nb
(4.10)
donde
(4.11)
donde G(q) sera la funcin de transferencia del sistema, que evaluada en el crculo unitario
(q=ej) sera una funcin de frecuencia G(ej). El trmino de error o perturbacin (n) est
expresado en funcin de e(n): ruido blanco de varianza e2, filtrado por H(q). Las propiedades
de (n) se pueden expresar en trminos de su espectro de potencia como
( ) = e2 H ( e j )
(4.12)
(4.14)
(4.15)
y ( n ) = a1 y ( n 1) ana y ( n na ) + e( n ) = ai y ( n i ) + e( n )
i =1
18
(4.16)
(4.18)
19
(4.20)
donde A(q) y B(q) estn descritas por (4.9) y (4.10). Si se expresa la estructura como
un modelo de funcin de transferencia, queda
B( q)
(4.21)
y (n) =
u( n ) + e( n ) (donde F(q)=A(q))
F ( q)
Esta estructura representa un caso especial del modelo lineal genrico de la ecuacin
(4.1) y (4.13), donde la secuencia no predecible e(t)=(t) representa la diferencia
20
B (q)
2
(4.22)
VOE ( ) = OE (n) = y (n)
u ( n)
A (q )
n = p +1
n = p +1
Este algoritmo, por defecto, inicia la bsqueda de los parmetros con un modelo de
Prony y realiza 5 iteraciones. Incluimos nuestra function
>> [B,A,e] = stmcb_e(y,nb,na);
21
donde = a1 a na b0 b1 bnb
(4.26)
( n) =
n = p +1
[y ( n )
N
(n)
(4.27)
n = p +1
(4.28)
donde
y = [ y( p + 1) y( p + 2) y( N )]
(4.29)
T ( p + 1)
T
( p + 2 )
(N)
y( p na + 1) u( p + 1) u( p nb + 1)
y( p )
y( p + 1) y( p na + 2) u( p + 2) u( p nb + 2)
y( N + 1)
y( N na)
u( N ) u( N nb)
(4.30)
(4.31)
V
T
T
= 2 y + 2 N = 0
=
N
(4.32)
N = ( T ) 1 T y
(4.33)
22
OE
OE
(n, )
n = p +1
OE
(n, )
(4.37)
siendo (n,) el gradiente del error de salida OE. El mtodo de Gauss-Newton aproxima
(N(i ) ) , en la vecindad del mnimo, a
VOE
(N(i ) ) =
VOE
(n, )
( n, )
(4.38)
n = p +1
Nuestra funcin
>> [B,A,e]=oe_arma(y,nb,na);
[C,A,e]=armax_arma(y,nc,na);
23
(4.41)
El modelo de la ecuacin (4.41) se puede estimar para un orden de Alargo(q) que tienda a
infinito cuando sus parmetros coinciden con los de la expansin en serie de A(q)/C(q).
En el mtodo de Durbin-Broersen, se estiman una primera vez los parmetros (q) y
(q), luego se usan los parmetros estimados (q) como condicin inicial para actualizar
iterativamente (q) y (q) con el un nuevo mtodo de Durbin adaptado por Broersen. Si
sustituimos y(n) de la ecuacin (4.40) en (4.41) y reemplazamos los valores reales de
e(n) por los estimados, tenemos
A l arg o (q)
C (q) 1
A (q )
(4.42)
Para estimar Alargo(q), Broersen [Bro00a],[Bro02] utiliza un orden 3 veces mayor que
para A(q) ms el nmero de parmetros que tienen que estimarse. C(q) se actualiza del
cociente (q)/Alargo(q) dado en (4.42). Luego (q) se estima de nuevo con la expresin
(q) Alargo(q) (q). La estimacin final se busca de los parmetros (q) que minimicen
la diferencia entre los dos modelos estimados dados por [(q)/(q), 1/ Alargo(q)]. En el
toolbox ARMASA [BroMat] la estimacin se realiza con la rutina
>> [A,B, sel] = sig2arma(y,na);
24
RES ( na )
= e2
N
N
na
1
1
2
[
]
=
=
+
x
(
n
)
x
(
n
)
x
(
n
)
ai x ( n i )
N na n = na +1
N na n = na +1
i =1
(4.43)
1 0
2
+
(
)
(
)
PE ( na ) = e =
x
n
a
x
n
i
2
i 2
M n = n +1
i =1
0
(4.44)
Una de las primeras tcnicas utilizada para la bsqueda del mejor orden es el Error de
Prediccin Final de Akaike Akaikes Final Prediction Error- (FPE) [Aka70]. Considerando
que el orden verdadero del modelo es K, y la varianza del error de ese modelo es ev2, Akaike
us los resultados asintticos de la divisin de los valores esperados de la varianza del residuo
(RES(na)) y del error de prediccin (PE(na))
2
E [PE ( na )] = ev
(1 + na / N ) , para na K
2
(1 na / N ) , para na K
E [RES ( na )] = ev
(4.45)
(4.46)
1 + na / N
(4.47)
1 na / N
Otro criterio de Akaike similar es el Criterio de Informacin Terica de Akaike Akaikes
Information Theoretic Criterion- (AIC) [Aka74].
na
(4.48)
AIC = ln e2 + 2
N
De acuerdo con estos criterios de Akaike, se escoje el modelo con el menor valor de FPE o
AIC. Otro criterio ampliamente usado es el de Rissanen -Rissanen's Minimum Description
Length- (MDL) [Ris78], el cual selecciona la estructura que permita la descripcin ms
compacta de la data observada. Este modelo penaliza un mayor nmero de muestras de la seal
relativas al orden del modelo y puede expresarse como
na
(4.49)
MDL = ln e2 +
ln( N )
N
Estos criterios pueden escribirse como un criterio de informacin generalizado (GIC)
[Bro93] como
na
(4.50)
GIC ( na, ) = ln e2 +
N
donde = 2
(AIC)
= ln(N)
(MDL)
= 2lnln(N) Criterio de consistencia mnima [Han79]
FPE = e2
( )
( )
25
E [RES ( na )]
2
ev
na
(4.55)
i =1
na
2
E [PE ( na )] ev
(1 + v(i, met ) , para na K
(4.56)
i =1
(4.57)
i =1
1, 3 v(i, met )
CIC (na ) = ln( e2 ) + max
(4.59)
i =1
i =0 1 v(i, met )
26
Se selecciona el orden na con el menor valor CIC de los rdenes probados. Adems del
tamao N de la seal y del orden aprobar, el criterio CIC depende del mtodo de estimacin
paramtrica utilizado. Por ejemplo, si tomamos un modelo AR, estimado con el mtodo de
Burg, el criterio CIC quedara
1
na 1 +
na
1
N + 1 i 1, 3
(4.60)
CIC (na ) = ln( e2 ) + max
1
N
1
i
+
i
=
1
i
=
0
1
N +1 i
En la prctica se desea un modelo con un menor error de prediccin, PE(na). Los errores de
prediccin de los modelos estimados pueden ser hallados con la seal dada a travs de [Bro02]
1 + v(i, met )
i =1 1 v (i , met )
Por ejemplo, para el mtodo de Burg (utilizando ecuacin 4.52):
1
na 1 +
N +1 i
PE (na ) = e2
1
i =1
1
N +1 i
na
PE (na ) = e2
(4.61)
(4.62)
x 10
-3
-5.2
-5.4
4.5
-5.6
-5.8
3.5
Criterio MDL
Error (Varinaza)
3
2.5
-6
-6.2
-6.4
1.5
-6.6
-6.8
0.5
-7
0
10
20
30
40
50
orden del modelo
60
70
80
27
10
20
30
40
50
orden del modelo
60
70
80
-4
-4.5
-5
-5.5
Cambio de pendiente
(na=14) ( na=20)
-6
MDL mnimo
(na=35)
-6.5
-7
10
20
30
40
50
orden de modelo (na)
60
70
80
El mejor orden segn el criterio MDL de Risanen es na = 35. Sin embargo la curva de la
funcin de prdida o error vs. el orden del modelo presenta cambios de pendiente que tienden a
una reduccin suave del error para na = 14 y tambin para na = 20. Estos valores pueden ser
tomados en la prctica, si se quiere trabajar con modelos de estructuras reducidas.
Una excelente referencia reciente sobre mtodos de escogencia del mejor orden de
modelo de estructuras ARMA se encuentra en el trabajo de Broersen [Bro02] y en su toolbox de
MATLAB ARMASA [BroMat], donde se propone calcular automticamente el mejor modelo
de estructura AR, MA y ARMA.
En el toolbox ARMASA, el mejor orden de modelo, as como, los parmetros estimados
para ese orden, la varianza del error de todos los rdenes probados y los respectivos valores
CIC, se busca automticamente con:
>> [A,sel] = sig2ar(x1n);
>> sig_e = sel.pe_est; % varianza del error para cada na probado
28
El orden de A es na=40 con el criterio CIC. La funcin sig2ar utiliza el mtodo de Burg
[Bur67] para estimar el modelo AR. Equivale a arburg y ar con el approach = burg. En la
variable estructurada sel est la informacin de la varianza del error y del valor CIC para cada
orden de modelo probado, que fue de 630 rdenes en este caso.
>> plot(na_candidato(5:80),sig_e(5:80))
>> plot(na_candidato(5:200),cic(5:200))
Criterio CIC
-4
0.018
0.016
-4.5
0.014
-5
0.01
CIC
0.012
-5.5
0.008
-6
0.006
0.004
-6.5
0.002
0
-7
10
20
30
40
ordenes na
50
60
70
80
20
40
60
80
100
120
ordenes na
140
160
180
200
Este mismo orden de modelo (na=40) se encontr con la funcin selarstruc, con el mtodo
arburg y el criterio cic, con la seal x1n removindole su valor medio: x1n mean(x1n).
4.2.2) Bsqueda del mejor modelo ARMA
Para modelos ARMA y otras estructuras de modelado de seales y sistemas, los criterios
FPE, AIC, MDL y GIC pueden expresarse utilizando la dimensin del vector de parmetros d en
lugar del factor na, del modelado AR [Lju87]. Por ejemplo, el criterio GIC quedara:
d
(4.63)
GIC (na, ) = ln e2 +
N
El criterio FPE de Akaike [Aka70] para modelos ARMA se puede expresar:
FPE = e2
1+ d / N
1d / N
(4.64)
El criterio propuesto por Broersen [Bro00b] para escoger el orden en los modelos ARMA
se basa en mtodos de estimacin de parmetros de Durbin [Dub60] adaptado descrito
previamente, utilizando el criterio GIC con =3. Para modelos ARMA de rdenes (na,nb), es
decir de dimensin d=na+nb el orden estar dado por el valor mnimo del criterio
29
d
N
(4.65)
Los errores de prediccin de los modelos estimados pueden ser hallados con la seal dada a
travs de [Bro02]
1+ d / N
(4.66)
PE (d ) = e2
1 d / N
- Uso de MATLAB para hallar el mejor orden de modelo ARMA
La bsqueda del mejor modelo con una estructura ARMA la realizamos con nuestra
funcin selarmastruc y graficamos luego la varianza del error o el Criterio con los valores de la
funcin min_arma. Para ello utilizamos nuestras funciones prony_e, stmcb_e, arx_arma,
oe_arma y armax_arma como mtodos para estimar los parmetros de la estructura ARMA. Y,
al igual que en la estructura AR, los criterios FPE, AIC, MDL y GIC con = 3 (GIC(d,3)).
>>[nn,V,Vn]=selarmastruc(x1n,'arx_arma',2:30,2:30,'mdl');
% Prueba todas las combinaciones de rdenes de
% modelo desde na = 2 hasta 30 y nb = 2 hasta 30
>>[Vmin,Vnmin]=min_arma(V,Vn);
>> plot(Vn(4,:),Vn(1,:),'+') % incluye todos los modelos probados
>> plot(Vmin(4,:),Vmin(1,:))
Funcion de error, todos los modelos ARMA
0.025
-4
0.02
-4.5
-5
0.015
MDL
Varianza el error
0.03
Cambio de pendiente
(na=12,nb=11)
-5.5
0.01
MDL minimo
(na=28,nb=27)
-6
0.005
-6.5
10
20
30
40
Numero de parametros = na+nb+1
50
-7
60
10
20
30
40
Numero de parametros = na+nb+1
50
60
Segn estos resultados, un modelo ptimo de acuerdo al criterio MDL puede ser un orden
na=28 y nb=27. Sin embargo, los cambios de pendiente de la funcin de error o prdida
proponen tamaos de estructura de 13 o 23 parmetros, que corresponde a rdenes de modelo
[na=11, nb=2] y [na=12, nb=11], respectivamente.
Una versin simplificada de la funcin selarmastruc es selarmastruc2, la cual solamente
prueba rdenes de modelo [na, nb=na-1].
>> [nn,V,Vn]=selarmastruc2(x1n,'arx_arma',2:30,'mdl'); % nn = [na=28, nb=27]
>> [nn,V,Vn]=selarmastruc2(x1n-mean(x1n),'armax_arma',2:30,'gic3');
% nn = [na=16, nb=15]
% Se le ha removido el valor medio a la seal x1n
>> plot(V(4,:),V(1,:))
30
GIC3
-5
-5.5
-6
[na=5, nb=4]
[na=16, nb=15]
-6.5
-7
-7.5
40
30
20
Numero de parametros: na+nb
10
50
60
Criterio GIC3
-6.1
-6.2
-6.3
-6.4
GIC3
-6.5
-6.6
orden
(na=8,nb=7)
-6.7
-6.8
-6.9
-7
-7.1
10
20
30
40
50
60
70
80
Ordenes na del modelo ARMA(na,na-1)
31
90
100
e2
A(q )
e2
2
q =e
na
1 + a k e j 2kf
(4.68)
k =1
1 + a k e j 2kf / f s
k =1
Del mismo modo, la PSD estimada de una seal con modelado ARMA es
nb
PARMA (q ) = e
B(q)
A(q )
PARMA ( f ) = Ts e
b e
k =0
na
2
j 2kf / f s
1 + a k e j 2kf / f s
q = e j
(4.70)
k =1
>> plot(fb,Pb)
10
1.4
1.2
-10
PSD (Watts/Hz)
-20
-30
0.8
0.6
-40
0.4
-50
0.2
-60
50
100
150
200
Frequency (Hz)
250
300
100
50
200
150
frecuencia (Hz)
250
300
350
[Pb,fb]=pburg(x1n,20,N,fs);
[P1,f1]=pwelch(x1n,[],[],N,fs);
plot(f1,10*log10(P1),':',fb,10*log10(Pb)), grid
legend('Welch','AR Burg')
PSD de x1n, mtodos AR de Burg (na=20) y Welch
0
Welch
AR Burg
-10
PSD (Watt/Hz)
-20
-30
-40
-50
-60
-70
50
100
200
150
frecuencia (Hz)
250
300
350
33
-10
-20
-30
-40
-50
-60
50
100
150
200
frecuencia (Hz)
250
350
300
PSD (dB/Hz)
0
-10
-20
-30
-40
-50
-60
50
100
200
150
frecuencia (Hz)
250
300
>> E=sum(Pxx)*N/length(0:0.01:fs)
E = 3.2511
>> Pm=fs/length(0:0.01:fs)*sum(Pxx)
Pm = 1.6244
>> ind75_85=find(f>=75 & f<85);
>> Pm80=fs/length(0:0.01:fs)*sum(Pxx(ind75_85))
34
350
Estos valores de Potencia promedio coinciden con los hallados con el mtodo noparamtrico y los valores tericos de Pm = 1,625 W, Pm80 = 1,125 W y Pm100 = 0,5 W.
Vamos a representar la seal x1n(n) como la respuesta al impulso del modelo AR obtenido.
>>impulso=[1;zeros(N-1,1)];
>> y=filter(1,Ab,impulso);
% es equivalente a
>> y=impz(1,Ab,N,fs);
>> plot(t(1:150),x1n(1:150), t(1:150),y(1:150))
Segmento de x1n y resp impulso model AR (na=14)
3
Amplitud
-1
-2
-3
0.05
0.1
tiempo (s)
0.15
0.2
Para hallar tambin los modelos paramtricos con el System Identification toolbox:
>> Abi=ar(x1n,14,'burg',[],[],1/fs)
Discrete-time IDPOLY model: A(q)y(t) = e(t)
A(q) = 1 - 0.459 q^-1 + 0.05819 q^-2 + 0.3916 q^-3
+ 0.08516 q^-5 - 0.2077 q^-6 - 0.2041 q^-7
- 0.117 q^-9 - 0.1128 q^-10 - 0.1874 q^-11
- 0.1674
Estimated using AR
Loss function 0.00145991 and FPE 0.00148938
Sampling interval: 0.00142857
+ 0.3042 q^-4
- 0.2016 q^-8
- 0.3006 q^-12
q^-13 + 0.147 q^-14
0.1470]
Son los mismos valores que los obtenidos con la funcin arburg de Signal Processing.
Para extraer la varianza del ruido o Funcin de Prdida:
>>VarNoise = Abi.NoiseVariance
% VarNoise= 0.00145991
>>LossFcn = Abi.EstimationInfo.LossFcn
% = 0.00148938
35
10
-10
-10
-20
-20
-30
-30
-40
-40
-50
-50
-60
-60
-70
50
100
150
200
250
300
-70
350
50
100
150
200
250
300
350
b) Mtodo de la covarianza
Se resume el procedimiento de la seccin anterior con un orden na = 14:
>> [Ac,ec]=arcov(x1n,14);
Ac = [1.0000 -0.4623 0.0557 0.3983 0.2996 0.0799 -0.2044 -0.1990 -0.2083
-0.1146 -0.1093 -0.1897 -0.2984 -0.1669 0.1469]
ec= 0.00145914 % Varianza del error o estimada del ruido
% Equivalente en System identification a
>> Aci=ar(x1n,14,'ls');
Ac=Aci.a;
>> e=Aci.NoiseVariance
e = 0.00145914
>>plot(fc,Pc)
PSD de x1n, AR metodo Covarianza (na=14)
1.4
10
1.2
PSD (Watt/Hz)
PSD (dB/Hz)
-10
-20
-30
0.8
0.6
-40
0.4
-50
0.2
-60
50
100
200
150
frecuencia (Hz)
250
300
350
50
100
150
200
frecuencia (Hz)
36
250
300
350
1.2
-10
1
PSD (Watt/Hz)
PSD (dB/Hz)
-20
-30
0.8
0.6
-40
0.4
-50
0.2
-60
50
100
200
150
frecuencia (Hz)
250
300
350
50
100
150
200
frecuencia (Hz)
250
300
350
d) Mtodo de Yule-Walker
>> [Ay,ey]=aryule(x1n,14);
Ay = [1.0000 -1.2691 0.6934 0.3015 -0.0631 -0.0779 -0.1055 0.0306 -0.0628
-0.0592 -0.0419 -0.0505 -0.1047 0.0102 0.0924]
ey = 0.008705831
% Equivalente en System identification a
>> Ayi=ar(x1n,14,'yw');
Ay=Ayi.a;
>> e=Ayi.NoiseVariance
e = 0.002832392
>> [Py,fy]=pyulear(x1n,14,N,fs);
>> plot(fy,10*log10(Py))
>>plot(fy,Py)
PSD de x1n, AR Yule-W alker (na=14)
10
0
1.2
PSD (Watt/Hz)
PSD (dB/Hz)
-10
-20
-30
0.8
0.6
-40
0.4
-50
0.2
-60
50
100
150
200
frecuencia (Hz)
250
300
350
50
100
150
200
frecuencia (Hz)
250
300
350
37
Utilizando la funcin arx_arma hay slo una ligera diferencia en la varianza del error,
e= . En este caso, 2 se obtiene directamente del modelo que proporciona la funcin arx. En
prony_e, 2 se calcula con la funcin pe.
2
>>[Ba,Aa,ea]=arx_arma(x1n,nb,na);
Ba=[0.0649 1.8210 1.5740 0.7090 0.2022 0.1294 0.2968 -0.0735 -0.8202
-1.4406 -1.2395 -0.6184]
Aa=[1.0000 -0.4828 0.0781 0.4197 0.3169 0.0831 -0.2000 -0.1955 -0.1696
-0.0988 -0.1176 -0.2418 -0.3649]
ea= 0.00152428
[H,f]=freqz(Bp,Ap,N,'whole',fs);
Pxp=ea*(abs(H).^2)/fs; % PSD (de ambos lados del espectro)
if rem(N,2), % se evala la paridad de N
select = 1:(N+1)/2; % si N es impar
else
select = 1:N/2+1; % si N es par
end
% select en este caso es de 701 elementos
Pxp_unlado=Pxp(select);
Pxp_u=[Pxp_unlado(1); 2*Pxp_unlado(2:end-1);Pxp_unlado(end)];
fp=f(select);
>> plot(fp,10*log10(Pxp_u))
>> plot(fp,Pxp_u)
PSD de x1n, con modelado ARMA, metodo Prony
20
12
10
10
PSD (Watt/Hz)
PSD (dB/Hz)
-10
-20
-30
-40
-50
2
-60
-70
50
100
150
200
frecuencia (Hz)
250
300
350
38
50
100
150
200
frecuencia (Hz)
250
300
350
Amplitud
-1
-2
-3
0.05
0.15
0.1
0.2
0.25
t (s)
Este mtodo no produce tan buenos resultados para estimar las cantidades correctas de
Energa y potencia media:
>>
>>
>>
>>
>>
[Pxx,f]=armaspectra(Bp,Ap,ep,N,fs);
ind75_85=find(f>=75 & f<85);
ind95_105=find(f>=95 & f<105);
Pm=fs/N*sum(Pxx);
% Pm =
Pm=fs/N*sum(Pxx(ind75_85)); % Pm =
>> Pm=fs/N*sum(Pxx(ind95_105));
% Pm =
6.3830
5.4320
0.9320
b) Mtodo de Steingltz-McBride
>> [Bs, As, es]=stmcb_e(x1n, nb, na);
Bs = [0.0397 1.8303 1.4761 0.5890 0.3106 0.1995 0.3386 -0.2674 -0.7788
-1.2259 -1.2413 -0.7643]
As = [1.0000 -0.5362 0.0804 0.5382 0.1843 0.1288 -0.3212 0.0142 -0.2074
-0.2192 -0.1011 -0.1215 -0.4397]
es = 0.00079935
>> armaspectra(Bs,As,es,N,fs);
>> title('PSD de x1n, con modelado ARMA, metodo Steingltz-McBride')
39
50
100
150
200
frecuencia (Hz)
250
300
350
50
100
200
150
frecuencia (Hz)
250
300
350
40
-25
10
-30
-35
-10
PSD (dB/Hz)
PSD (dB/Hz)
-40
-45
-20
-30
-50
-40
-55
-50
-60
-60
-65
50
100
150
200
frecuencia (Hz)
250
300
350
-70
50
100
150
200
frecuencia (Hz)
250
300
350
Se puede apreciar los diferentes valores de escalado al variar el nmero de puntos Nfft de
clculo del espectro. Probemos el orden [na=5, nb=4], con el cual obtenemos razonables valores
de Potencia media
>>
>>
>>
>>
>>
>>
>>
>>
[Bp,Ap,ep]=armax_arma(x1n,4,5);
[Pxx,f]=armaspectra(Bp,Ap,ep,300000,fs);
ind75_85=find(f>=75 & f<85);
ind95_105=find(f>=95 & f<105);
Pm=fs/300000*sum(Pxx);
% Pm =
Pm=fs/300000*sum(Pxx(ind75_85));
% Pm =
Pm=fs/300000*sum(Pxx(ind95_105)); % Pm =
armaspectra(Bp,Ap,ep,300000,fs);
2.0587
1.5926
0.4629
PSD (dB/Hz)
0
-10
-20
-30
-40
-50
-60
-70
50
100
200
150
frecuencia (Hz)
250
300
350
41
0.0073]
>> [P,f]=arma2psd(A,B,0:0.02:350,1/fs);
>> plot(f,10*log10(P)), grid
0
-10
-10
-20
-20
-30
-30
-40
-40
-50
-50
-60
-60
-70
-70
0
50
100
150
200
250
300
350
50
100
150
200
250
300
350
>> armaspectra(B,A,e,0:0.05:700,fs);
0
0
-10
-10
-20
PSD (dB/Hz)
PSD (dB/Hz)
-20
-30
-30
-40
-40
-50
-50
-60
50
100
150
200
frecuencia (Hz)
250
300
-60
350
>> armaspectra(B,A,e,0:0.015:700,fs);
50
100
200
150
frecuencia (Hz)
250
300
350
>> armaspectra(B,A,e,4096*10,fs);
42
-10
-10
PSD (dB/Hz)
PSD (dB/Hz)
-20
-30
-20
-30
-40
-40
-50
-50
-60
50
100
200
150
frecuencia (Hz)
250
300
350
-60
50
100
200
150
frecuencia (Hz)
250
300
350
Las grficas PSD previas del mismo modelo ARMA utilizando distintos nmero de puntos,
para evaluar la respuesta frecuencial de la funcin de transferencia discreta B(q)/A(q), muestran
la posible sensibilidad de la respuesta frecuencial y la PSD al clculo de los puntos frecuenciales
sobre el crculo unitario. Hay que notar que la seal a modelar se compone de dos sinusoides
puras de 80 y 100 Hz con ruido aadido, por lo que la evaluacin de los puntos frecuenciales
alrededor o sobre las frecuencias 80 y 100 Hz es crtica.
43
0.5
0.5
0
Ampl
(mV)
Ampl (mV)
-0.5
-0.5
-1
-1
-1.5
-2
0
-1.5
100
200
300
400
t (ms)
500
600
700
-2
800
10
20
30
40
50
t (ms)
60
70
80
90
100
|X2(f)| (mV-s)
0.06
0.05
0.04
0.03
0.02
0.01
0
50
100
150
300
250
200
frecuencia (Hz)
44
350
400
450
500
[Px,f]=periodogram(x2,[],N,fs);
plot(f,Px)
xlabel('frecuencia (Hz)')
ylabel('PSD (mV^2/Hz)')
title('PSD de x2 (QRS)')
>> plot(f,10*log10(Px))
PSD de x2 (QRS)
PSD de x2 (QRS)
0.03
-10
-20
0.025
-30
PSD (dbm/Hz)
PSD (mV2/Hz)
0.02
0.015
-40
-50
-60
0.01
-70
0.005
-80
50
100
150
200
250
300
frecuencia (Hz)
350
400
450
-90
500
50
100
150
300
250
200
frecuencia (Hz)
350
400
500
450
Vamos a hallar la energa y potencia media total y en las bandas de [0 20], [20 40], [40 80],
[80 150] y [150 250] Hz. Probaremos evaluar el crculo unitario del plano z con N=length(x2)
=95, 256 y 4096 puntos. El incoveniente de usar el periodograma estndar (sin envantanar) es
que el inicio y final del segmento a analizar puede contener un valor diferente de cero que, en la
prctica, equivale a funciones escaln que altera el contenido de altas frecuencias al aplicar la
FFT. El QRS de la seal x2 a analizar comienza y termina en valores cercanos al eje
isoelcltrico de potencial 0.
>>
>>
>>
>>
>>
>>
>>
>>
>>
[Px,f]=periodogram(x2,[],N,fs);
es la energa total
E=sum(Px);
% E = 0.0444 mV2-s
Pm=fs/N*sum(Px); % Pm = 0.4671 mV2 es la potencia media (average) total
Pm2= trapz(f, Px);
ind0_20=find(f>=0 & f<20);
ind20_40 =find(f>=20 & f<40);
ind40_80=find(f>=40 & f<80);
ind80_150=find(f>=80 & f<150);
ind150_250=find(f>=150 & f<=250);
N= length(x2)=95
Bandas (Hz)
Energa
E=sum(Px)
(mV2 s)
Total
[0 20]
[20 40]
[40 80]
[80 150]
[150 250]
0.0444
0.0325
0.0118
8.85e-005
1.54e-005
1.96e-006
Nfft = 256
Pot med
Pm=fs/N*
sum(Px)
Energa
E=sum(Px)*
N/Nfft
Pot med
Pm=fs/Nfft*
sum(Px)
(mV2)
(mV2 s)
(mV2)
0.4671
0.3421
0.1239
9.31e-004
1.62e-004
2.06e-005
0.0444
0.0403
0.0040
5.83e-005
1.60e-005
2.16e-006
0.4671
0.4246
0.0416
6.13e-004
1.68e-004
2.27e-005
45
Nfft = 4096
Pot med
Pm = 2 Px df
Energa
E=sum(Px)*
N/Nfft
Pot med
Pm=fs/Nfft*
sum(Px)
Pm = 2 Px df
(mV2)
(mV2 s)
(mV2)
(mV2)
0,0444
0,0385
0,0058
6,65E-05
1,60E-05
2,17E-06
0,4671
0,4048
0,0614
7,00E-04
1,69E-04
2,29E-05
f1
0,4547
0,3846
0,0282
5,47E-04
1,64E-04
2,20E-05
Pot med
f
f1
0,4663
0,4024
0,0598
6,90E-04
1,69E-04
2,28E-05
Amplitud (mV)
0.5
-0.5
-1
-1.5
0.01
0.02
0.03
0.07
0.08
0.09
0.1
Hallaremos otra vez la energa y potencia media total y en las bandas de [0 20], [20 40], [40 80],
[80 150] y [150 250] Hz.
N= length(x2)=95
Bandas (Hz)
Energa
E=sum(Px)
(mV2 s)
Total
[0 20]
[20 40]
[40 80]
[80 150]
[150 250]
0,0380
0,0262
0,0118
8,85E-05
1,54E-05
1,96E-06
Nfft = 256
Pot med
Pm=fs/N*
sum(Px)
Energa
E=sum(Px)*
N/Nfft
Pot med
Pm=fs/Nfft*
sum(Px)
(mV2)
(mV2 s)
(mV2)
0,4004
0,2754
0,1239
9,31E-04
1,62E-04
2,06E-05
0,0380
0,0344
0,0034
1,22E-04
6,72E-05
2,69E-05
0,4004
0,3616
0,0362
1,29E-03
7,07E-04
2,84E-04
Nfft = 4096
Pot med
Pm = 2 Px df
Energa
E=sum(Px)*
N/Nfft
Pot med
Pm=fs/Nfft*
sum(Px)
Pm = 2 Px df
(mV2)
(mV2 s)
(mV2)
(mV2)
0,0380
0,0324
0,0054
1,40E-04
6,80E-05
2,67E-05
0,4004
0,3410
0,0567
1,48E-03
7,16E-04
2,82E-04
f1
0,4004
0,3314
0,0244
1,20E-03
6,96E-04
2,70E-04
Pot med
f
f1
0,4004
0,3392
0,0549
1,45E-03
7,13E-04
2,81E-04
Se nota la elevacin de los componentes de alta frecuencia respecto a la seal x2, por los
efectos del inicio y final del segmento que distorsionan el espectro en las de altas frecuencias.
Al utilizar una ventana de Hamming con el periodograma enventanado:
>> periodogram(x2,hamming(N),N,fs);
>> periodogram(x2,hamming(N),256,fs);
% se usan 256 puntos parea la DFT
Periodogram PSD Estimate
-10
-20
-20
-30
-30
Power Spectral Density (dB/Hz)
-40
-50
-60
-70
-80
-40
-50
-60
-70
-80
-90
-90
-100
-100
-110
50
100
150
200
250
300
Frequency (Hz)
350
400
450
-110
46
50
100
150
200
250
300
Frequency (Hz)
350
400
450
500
N= length(x2)=95
Bandas (Hz)
Energa
E=sum(Px)
(mV2 s)
Total
[0 20]
[20 40]
[40 80]
[80 150]
[150 250]
0,0918
0,0600
0,0315
3,63E-04
3,03E-05
2,99E-06
Pot med
Pm=fs/N*
sum(Px)
Energa
E=sum(Px)*
N/Nfft
(mV s)
(mV )
0,9666
0,6313
0,3311
3,82E-03
3,19E-04
3,15E-05
0,0918
0,0772
0,0144
1,83E-04
2,97E-05
3,22E-06
0,9666
0,8124
0,1519
1,93E-03
3,13E-04
3,39E-05
Energa
E=sum(Px)
(mV2 s)
Total
[0 20]
[20 40]
[40 80]
[80 150]
[150 250]
0,0663
0,0346
0,0314
3,62E-04
3,04E-05
3,00E-06
Nfft = 4096
Pot med
f1
Energa
E=sum(Px)*
N/Nfft
(mV2)
(mV s)
(mV )
0,0918
0,0728
0,0187
2,39E-04
2,98E-05
3,25E-06
0,9666
0,7666
0,1971
2,51E-03
3,14E-04
3,43E-05
f2
Pm = Px df
(mV )
0,9344
0,7197
0,1113
1,49E-03
2,98E-04
3,22E-05
N= length(x2)=95
Bandas (Hz)
Pot med
Pm=fs/Nfft*
sum(Px)
Pot med
Pm=fs/N*
sum(Px)
Energa
E=sum(Px)*
N/Nfft
Pot med
Pm=fs/Nfft*
sum(Px)
(mV2)
(mV2 s)
(mV2)
0,6983
0,3637
0,3305
3,81E-03
3,20E-04
3,16E-05
0,0663
0,0515
0,0147
1,86E-04
2,97E-05
3,23E-06
0,6983
0,5416
0,1544
1,96E-03
3,12E-04
3,40E-05
Pot med
Pot med
Pm=fs/Nfft*
sum(Px)
2
Pot med
f
Pm = 2 Px df
f1
(mV2)
0,9646
0,7609
0,1935
2,45E-03
3,13E-04
3,41E-05
Nfft = 4096
Pm = Px df
Energa
E=sum(Px)*
N/Nfft
Pot med
Pm=fs/Nfft*
sum(Px)
Pm = 2 Px df
(mV2)
(mV2 s)
(mV2)
(mV2)
0,0663
0,0472
0,0189
2,40E-04
2,98E-05
3,26E-06
0,6983
0,4963
0,1991
2,53E-03
3,14E-04
3,43E-05
f2
f1
0,6904
0,4747
0,1130
1,52E-03
2,98E-04
3,22E-05
Pot med
f
f1
0,6978
0,4922
0,1955
2,46E-03
3,13E-04
3,42E-05
Se puede observar de las tablas que la remocin del valor medio de la seal x2 afecta la
estimacin de los componentes frecuenciales en la banda de [0 20] Hz, que incluye el nivel de
continua o frecuencia 0. El uso de 4096 aunque no mejora la resolucin para evaluar los
componentes de las distintas bandas de frecuencia, mejora la exactitud al aproximar mejor el
espectro continuo de una hipottica seal de duracin infinita, interpolando mayor nmero de
puntos en el dominio frecuencial.
Apliquemos el mtodo de Welch para estimar la PSD
>> pwelch(x2,[],[],128,fs);
Welch PSD Estimate
-10
-20
-30
-40
-50
-60
-70
50
100
150
200
250
300
Frequency (Hz)
47
350
400
450
Bandas (Hz)
Total
[0 20]
[20 40]
[40 80]
[80 150]
[150 250]
Bandas (Hz)
Total
[0 20]
[20 40]
[40 80]
[80 150]
[150 250]
Seal x2 original
Nfft = 256
Nfft = 4096
Energa
E=sum(Px)*
N/Nfft
Pot med
Pm=fs/Nfft*
sum(Px)
Pm = 2 Px df
Energa
E=sum(Px)*
N/Nfft
Pot med
Pm=fs/Nfft*
sum(Px)
Pm = 2 Px df
(mV2 s)
(mV2)
(mV2)
(mV2 s)
(mV2)
(mV2)
0,0548
0,0287
0,0168
0,0090
3,07E-04
9,98E-06
0,5770
0,3016
0,1768
0,0951
3,23E-03
1,05E-04
0,0548
0,0268
0,0180
0,0097
3,14E-04
9,91E-06
0,5770
0,2822
0,1890
0,1022
3,30E-03
1,04E-04
Pot med
f
f1
0,5622
0,2625
0,1414
0,0832
2,64E-03
1,01E-04
Pot med
f
f1
0,5760
0,2798
0,1868
0,1013
3,26E-03
1,04E-04
Nfft = 4096
Energa
E=sum(Px)*
N/Nfft
Pot med
Pm=fs/Nfft*
sum(Px)
Pm = Px df
Energa
E=sum(Px)*
N/Nfft
Pot med
Pm=fs/Nfft*
sum(Px)
Pm = 2 Px df
(mV2 s)
(mV2)
(mV2)
(mV2 s)
(mV2)
(mV2)
0,0453
0,0232
0,0139
0,0079
2,95E-04
8,96E-06
0,4774
0,2443
0,1467
0,0831
3,10E-03
9,43E-05
0,0453
0,0217
0,0149
0,0085
3,01E-04
8,91E-06
0,4774
0,2284
0,1565
0,0891
3,17E-03
9,38E-05
Pot med
f2
f1
0,4654
0,2126
0,1174
0,0729
2,55E-03
9,03E-05
Pot med
f
f1
0,4766
0,2265
0,1546
0,0883
3,12E-03
9,36E-05
-9
-9.2
-9.4
-9.6
-9.8
-10
-10.2
-10.4
-10.6
-10.8
10
15
20
ordene na
25
30
35
40
0.025
-20
0.02
PSD (dbm/Hz)
PSD (mV2/Hz)
-40
0.015
0.01
-60
-80
0.005
-100
50
100
150
400
350
250
300
200
frecuencia (Hz)
450
-120
500
50
100
150
200
250
300
frecuencia (Hz)
350
400
450
500
Con el toolbox ARMASA, se usa el criterio CIC con el mtodo de Burg para hallar el
mejor orden de modelo. Por defecto, el toolbox de ARMASA sustrae el valor medio de la
seal. Equivale a mtodo de Burg de Signal Processing, tomando en cuenta esta sustraccin.
Para deshabilitar la sustraccin del valor medio de la seal se utiliza: ASAglob_subtr_mean = 0;
>> [Ab2,sel]=sig2ar(x2);
na=length(Ab2)-1 ; % na = 11
>>sig_e=sel.pe_est; % varianza del error para cada na probado
>>cic=sel.cic; % criterio CIC para cada na probado
>>na_candidato=sel.cand_order; % valores na probados
Funcion de criterioi CIC (metodo Burg) vs na
0
-2
CIC
-4
-6
-8
-10
-12
10
>> [P,f]=arma2psd(A,1,128,1/fs);
>> plot(f,P), grid
15
20
25
30
orden na
35
40
45
50
49
0.04
0
0.035
-20
-40
0.025
PSD (dbm/Hz)
PSD (mV2/Hz)
0.03
0.02
0.015
-60
-80
0.01
-100
0.005
0
50
100
150
200
250
300
frecuencia (Hz)
350
400
450
-120
500
50
100
150
300
250
200
frecuencia (Hz)
350
400
450
500
-20
PSD (dbm/Hz)
-40
-60
Yule-Walker
-80
-100
-120
50
100
150
300
250
200
frecuencia (Hz)
350
400
450
500
En la grfica siguiente se comparan la PSD con los mtodos del periodograma con ventana
de Hamming, de Welch y paramtrico AR-Burg de orden 11:
>> [Pp,fp]=periodogram(x2,hamming(N),128,fs);
>> [Pw,fw]=pwelch(x2,[],[],128,fs);
50
-20
PSD (dbm/Hz)
-40
-60
-80
-100
-120
50
100
150
200
250
300
frecuencia (Hz)
350
400
450
500
Calcularemos la energa y la potencia media media total y en las bandas de [0 20], [20 40],
[40 80], [80 150] y [150 250] Hz. con modelado AR y el mtodo de Burg (orden na = 11).
>> [A,e]=arburg(x2,11);
>> [Px,f]=armaspectra(1,A,e,Nfft,fs);
Bandas (Hz)
Total
[0 20]
[20 40]
[40 80]
[80 150]
[150 250]
Bandas (Hz)
Total
[0 20]
[20 40]
[40 80]
[80 150]
[150 250]
Seal x2 original
Nfft = 256
Nfft = 4096
Energa
E=sum(Px)*
N/Nfft
Pot med
Pm=fs/Nfft*
sum(Px)
Pm = Px df
Energa
E=sum(Px)*
N/Nfft
Pot med
Pm=fs/Nfft*
sum(Px)
Pm = 2 Px df
(mV2 s)
(mV2)
(mV2)
(mV2 s)
(mV2)
(mV2)
0,0443
0,0414
0,0028
8,42E-05
1,67E-05
1,85E-06
0,4668
0,4357
0,0300
8,86E-04
1,76E-04
1,94E-05
0,0444
0,0387
0,0056
9,50E-05
1,68E-05
1,85E-06
0,4671
0,4073
0,0586
1,00E-03
1,76E-04
1,95E-05
Pot med
f2
f1
0,4425
0,3655
0,0192
7,36E-04
1,62E-04
1,86E-05
Pot med
f
f1
0,4656
0,4031
0,0561
9,87E-04
1,76E-04
1,95E-05
Nfft = 4096
Energa
E=sum(Px)*
N/Nfft
Pot med
Pm=fs/Nfft*
sum(Px)
Pm = Px df
Energa
E=sum(Px)*
N/Nfft
Pot med
Pm=fs/Nfft*
sum(Px)
Pm = 2 Px df
(mV2 s)
(mV2)
(mV2)
(mV2 s)
(mV2)
(mV2)
0,0378
0,0351
0,0026
8,76E-05
1,67E-05
1,87E-06
0,3974
0,3690
0,0273
9,22E-04
1,76E-04
1,96E-05
0,0380
0,0328
0,0051
9,86E-05
1,68E-05
1,87E-06
0,4004
0,3455
0,0537
1,04E-03
1,77E-04
1,97E-05
Pot med
f2
f1
0,3855
0,3118
0,0177
7,68E-04
1,62E-04
1,88E-05
Pot med
f
f1
0,3996
0,3421
0,0513
1,02E-03
1,76E-04
1,97E-05
-2
GIC3
-4
-6
-8
-10
-12
4
5
orden na (nb=na-1)
El orden propuesto con la seal original, sin remover su valor medio es (na = 3, nb = 2).
Utilizando nuestra funcin selarmastruc, podemos escoger el mtodo para estimar el
modelo ARMA. Utilizaremos la seal x2 original y removindole su valor medio y probaremos
el mtodo de Prony y el armax_arma:
>> m=mean(x2);
>> [nn,Vg,Vng]=selarmastruc(x2-m,'prony_e',1:20,1:19,'gic3');
52
-6
-7
-8
-9
-10
-11
30
25
20
15
10
orden: num de parametros = na+nb
35
40
53
ASAglob_subtr_mean =0;
[Aarmasa0,Barmasa0,sel0]=sig2arma(x2,3); % orden (na=3,nb=2)
earmasa0=sel0.pe_est;
[Pa0,fa0]=armaspectra(Barmasa0,Aarmasa0,earmasa0,128,fs);
[Aarmasa05,Barmasa04,sel054]=sig2arma(x2,5); % (na=5,nb=4)
earmasa054=sel054.pe_est;
[Pa054,fa054]=armaspectra(Barmasa04,Aarmasa05,earmasa054,128,fs);
[Aarmasa09,Barmasa08,sel098]=sig2arma(x2,9); % (na=9,nb=8)
earmasa098=sel098.pe_est;
[Pa098,fa098]=armaspectra(Barmasa08,Aarmasa09,earmasa098,128,fs);
PSD de x2 ARMA
0
Durbin-ARMASA (3,2)
Durbin-ARMASA (5,4)
Durbin-ARMASA (9,8)
-20
PSD (dbm/Hz)
-40
-60
-80
-100
-120
50
100
150
300
250
200
frecuencia (Hz)
350
400
450
500
[Bp2,Ap3,ep32]=prony_e(x2,2,3); % (na=3,nb=2)
[Bp4,Ap5,ep54]=prony_e(x2,4,5); % (na=5,nb=4)
[Bp8,Ap9,ep98]=prony_e(x2,8,9); % (na=9,nb=8)
[Ppr32,fpr32]=armaspectra(Bp2,Ap3,ep32,128,fs);
[Ppr54,fpr54]=armaspectra(Bp4,Ap5,ep54,128,fs);
[Ppr98,fpr98]=armaspectra(Bp8,Ap9,ep98,128,fs);
PSD de x2 ARMA
0
Durbin-ARMASA (5,4)
Prony (3,2)
Prony (5,4)
Prony (9,8)
-20
PSD (dbm/Hz)
-40
-60
-80
-100
-120
-140
50
100
150
200
250
300
frecuencia (Hz)
>> [Bamx2,Aamx3,eamx32]=armax_arma(x2,2,3);
54
350
400
450
500
-20
PSD (dbm/Hz)
-40
-60
-80
-100
-120
-140
50
100
150
200
250
300
frecuencia (Hz)
350
400
450
500
-20
PSD (dbm/Hz)
-40
-60
-80
-100
-120
50
100
150
200
250
300
frecuencia (Hz)
350
400
450
500
Hallemos la energa y la potencia media media total y en las bandas de [0 20], [20 40], [40
80], [80 150] y [150 250] Hz. con modelado ARMA y los mtodo de Durbin-Broersen de
ARMASA (orden na = 5, nb = 4) y armax_arma (orden na = 8, nb = 7) .
Mtodo de Durbin-Boersen de ARMASA:
>>
>>
>>
>>
55
Total
[0 20]
[20 40]
[40 80]
[80 150]
[150 250]
Energa
E=sum(Px)*
N/Nfft
Pot med
Pm=fs/Nfft*
sum(Px)
(mV2 s)
(mV2)
0,0542
0,0509
0,0031
2,07E-04
1,49E-05
2,05E-06
0,5706
0,5359
0,0324
2,18E-03
1,56E-04
2,15E-05
Pot med
Pm = Px df
Energa
E=sum(Px)*
N/Nfft
Pot med
Pm=fs/Nfft*
sum(Px)
Pm = 2 Px df
(mV2)
(mV2 s)
(mV2)
(mV2)
0,0543
0,0494
0,0046
2,34E-04
1,50E-05
2,05E-06
0,5712
0,5198
0,0487
2,47E-03
1,57E-04
2,16E-05
f2
f1
0,5566
0,4957
0,0228
1,80E-03
1,41E-04
2,05E-05
Pot med
f
f1
0,5703
0,5174
0,0472
2,43E-03
1,56E-04
2,15E-05
Total
[0 20]
[20 40]
[40 80]
[80 150]
[150 250]
Energa
E=sum(Px)*
N/Nfft
Pot med
Pm=fs/Nfft*
sum(Px)
(mV2 s)
(mV2)
0,0477
0,0443
0,0032
1,80E-04
1,43E-05
2,21E-06
0,5023
0,4665
0,0338
1,90E-03
1,50E-04
2,32E-05
Pot med
Pm = Px df
Energa
E=sum(Px)*
N/Nfft
Pot med
Pm=fs/Nfft*
sum(Px)
Pm = 2 Px df
(mV2)
(mV2 s)
(mV2)
(mV2)
0,0474
0,0421
0,0051
2,04E-04
1,44E-05
2,21E-06
0,4994
0,4429
0,0542
2,15E-03
1,51E-04
2,33E-05
f2
f1
0,4931
0,4231
0,0233
1,57E-03
1,37E-04
2,21E-05
Pot med
f
f1
0,4989
0,4404
0,0524
2,12E-03
1,50E-04
2,32E-05
Mtodo armax_arma:
>>[B,A,e]=armax_arma(x2,7,8);
>> [Px,f]=armaspectra(B,A,e,Nfft,fs);
Total
[0 20]
[20 40]
[40 80]
[80 150]
[150 250]
Energa
E=sum(Px)*
N/Nfft
Pot med
Pm=fs/Nfft*
sum(Px)
Pm = 2 Px df
Pot med
Energa
E=sum(Px)*
N/Nfft
Pot med
Pm=fs/Nfft*
sum(Px)
Pm = 2 Px df
(mV2 s)
(mV2)
(mV2)
(mV2 s)
(mV2)
(mV2)
0,0789
0,0765
0,0022
7,08E-05
1,27E-05
1,76E-06
0,8300
0,8056
0,0235
7,45E-04
1,34E-04
1,85E-05
0,0789
0,0755
0,0032
8,25E-05
1,28E-05
1,77E-06
0,8300
0,7951
0,0339
8,68E-04
1,34E-04
1,87E-05
f1
0,7591
0,7194
0,0165
6,04E-04
1,24E-04
1,75E-05
Pot med
f
f1
0,8256
0,7897
0,0331
8,54E-04
1,34E-04
1,86E-05
>> [B,A,e]=armax_arma(x20,7,8);
>> [Px,f]=armaspectra(B,A,e,Nfft,fs); % Nfft = 256 y 4096
Seal x20 = x2 mean(x2) (Modelado armax_ARMA)
Nfft = 256
Nfft = 4096
Bandas (Hz)
Total
[0 20]
[20 40]
[40 80]
[80 150]
[150 250]
Energa
E=sum(Px)*
N/Nfft
Pot med
Pm=fs/Nfft*
sum(Px)
Pm = 2 Px df
Pot med
Energa
E=sum(Px)*
N/Nfft
Pot med
Pm=fs/Nfft*
sum(Px)
Pm = 2 Px df
(mV2 s)
(mV2)
(mV2)
(mV2 s)
(mV2)
(mV2)
0,0333
0,0311
0,0021
1,10E-04
1,31E-05
1,71E-06
0,3508
0,3271
0,0224
1,16E-03
1,38E-04
1,80E-05
0,0496
0,0447
0,0048
1,23E-04
1,32E-05
1,72E-06
0,5225
0,4707
0,0503
1,30E-03
1,38E-04
1,81E-05
f1
0,3489
0,2521
0,0148
9,72E-04
1,26E-04
1,69E-05
56
Pot med
f
f1
0,5223
0,4669
0,0473
1,28E-03
1,38E-04
1,81E-05
>> N= length(x); %N =
>> plot(t, x)
901
Seal HRV simulada
14
12
Amplitud (ms)
10
50
100
150
t (s)
200
250
300
La potencia promedio es 102 ms2, correspondiente a 0,5 ms2 de cada una de las cuatro
componente sinusoidales (A2/2 cada componente) y 100 ms2 de la continua (A2). La varianza de
la seal coincide con la potencia promedio de la seal al removerle la continua. Si removemos la
componente continua: x0 = x 10 o x0 = x mean(x);
>> m=mean(x)
>> x0=x-m;
>> Pm=1/(t(end)-t(1))*trapz(t,x0.^2)
Pm =
2
>> Pm=1/N*sum(x0.^2)
Pm = 1.9978
>> sigma2=var(x0)
sigma2 = 2.0000
57
PSD (dB/Hz)
10
0
-10
-20
-30
-40
-50
0
0.2
0.4
0.6
0.8
f (Hz)
1.2
1.4
ms2-s (ms2/Hz)
Pm=fs/N*sum(Pxx)
= 101.9978
Pm=trapz(f(2:end),Pxx(2:end))
= 1.9978
Pm= Pxx(1)*fs/N + trapz(f(2:end),Pxx(2:end))
= 101.9978
% Pm_dc + Pm_sinusoides
58
Se puede observar que la potencia promedio de cada componte sinusoidal se aproxima a 0,5 ms2
(A2/2). Si trabajamos con la seal sin su valor medio (x0), tenemos
>> [Pxx,f]=periodogram(x0,[],N,fs);
>> periodogram(x0,[],N,fs);
40
160
30
140
20
120
10
PSD (ms 2/Hz)
50
0
-10
-20
100
80
60
-30
40
-40
20
-50
-60
0.2
0.4
0.6
0.8
Frequency (Hz)
1.2
1.4
0.5
1.5
frecuencia (Hz)
La energa y potencia promedio total coinciden con los de las componentes sinusoidales
halladas anteriormente:
>> Ener=sum(Pxx)
Ener = 599.9997
>> Pm=trapz(f,Pxx)
Pm = 1.9978
>> Pm=fs/N*sum(Pxx)
Pm = 1.9978
Y la energa y potencia media de cada banda evaluada anteriormente produce tambin los
mismos resultados.
59
30
20
10
0
-10
-20
-30
-40
-50
-60
0.2
0.4
0.6
0.8
Frequency (Hz)
1.2
1.4
>> Ener=sum(Pxx)
Ener = 600.6559
>> Pm=fs/N*sum(Pxx)
Pm = 2.0000
Como se puede observar, los valores de la potencia media son prcticamente igual a los
tericos aunque se usen las ventanas para suavizar el comienzo y final del segmento de seal a
estimar su espectro. Lo mismo ocurre con ventanas de Hanning o Blackman-Harris.
60
-10
-20
-30
-40
-50
-60
10
20
30
40
orden na
50
60
70
80
Le aadimos algo de ruido a la seal. Probaremos la funcin de criterio CIC con los mtodos de
Burg, covarianza modificado y Yule-Walker.
>>
>>
>>
>>
>>
>>
xd = x0 + 0.1*rand(size(t));
[nn,Vb,Vn]=selarstruc(xd,'arburg',2:80,'cic'); % nn = 63
[nn,Vc,Vn]=selarstruc(xd,'armcov',2:80,'cic'); % nn = 73
[nn,Vy,Vn]=selarstruc(xd,'aryule',2:80,'cic'); % nn = 19
plot(Vb(2,:),Vb(1,:),Vc(2,:),Vc(1,:),Vy(2,:),Vy(1,:))
legend('Burg','Covarianza modificado','Yule-Walker')
Funciones de Criterio
2
Burg
Covarianza modificado
Yule-Walker
1
0
-1
-2
-3
-4
-5
-6
-7
10
20
30
40
orden na
50
60
70
80
61
20
PSD (dB/Hz)
10
-10
-20
-30
-40
0.5
1.5
frecuencia (Hz)
PSD (dB/Hz)
20
10
0
-10
-20
-30
-40
0.5
1.5
frecuencia (Hz)
Al hallar la PSD con N puntos se consiguen los siguientes valores de potencia promedio:
>> Pm=fs/N*sum(Pxx) %
>> ind_vlf=find(f>=0.001 & f <= 0.04);
>> ind_lf=find(f>0.04 & f <= 0.15);
>> ind_hf=find(f>0.15 & f < 0.4);
>> ind_vhf=find(f>=0.4 & f < 1);
>> Pm=trapz(f(ind_vlf),Pxx(ind_vlf)); %
>> Pm=fs/N*sum(Pxx(ind_vlf)) %
>> Pm=fs/N*sum(Pxx(ind_lf)) %
>> Pm=fs/N*sum(Pxx(ind_hf)) %
>> Pm=fs/N*sum(Pxx(ind_vhf)) %
Pm = 4.4428
Pm = 0.6247
Pm = 0.6247
Pm = 3.8004
Pm = 0.0110
Pm = 0.0062
Si utilizamos un mayor nmero de puntos para hallar la respuesta frecuencial sobre el crculo
unitario del plano z, tenemos
>> [Pxx,f]=armaspectra(1,A,e,300000,fs);
62
PSD (dB/Hz)
20
10
0
-10
-20
-30
-40
0.5
1.5
frecuencia (Hz)
Pm = 1.9148
Pm = 0.5066
Pm = 0.4980
Pm = 0.4133
Pm = 0.4965
>> [A,e]=aryule(xd,30);
>> [Pxx2,f2]=armaspectra(1,A,e,300000,fs);
>> armaspectra(1,A,e,300000,fs);
PSD con modelado AR
30
30
20
20
10
PSD (dB/Hz)
PSD (dB/Hz)
10
-10
-10
-20
-20
-30
-30
-40
-40
0
0.5
1.5
0.5
1.5
frecuencia (Hz)
frecuencia (Hz)
Observamos que con un orden 19 no se puede discriminar los 2 componentes de baja frecuencia
mientras que con un orden 30 se logran discriminar pero con mayor desparramamiento en
comparacin con el mtodo de Burg. Los valores de Potencia promedio de los componentes
individuales son:
>> ind_vhf=find(f>=0.4 & f < 1);
>> ind_hf=find(f>0.15 & f < 0.4);
63
Pm = 0.3309
Pm = 0.6538
Pm = 0.4977
Pm = 0.4973
b) Estructuras ARMA
Con el toolbox ARMASA (mtodo de Durbin-Broersen) buscaremos el mejor orden de
modelo
>> [Aa,Ba,sel]=sig2arma(xd); % Aa y Ba son de orden 41 y 40 respectivamente
>> plot(sel.cand_ar_order,sel.gic3)
Criterio GIC3
1
0
-1
-2
-3
-4
na=15, nb=14
-5
na=41, nb=40
(mnimo)
-6
-7
10
20
30
40
50
na, nb = na-1
60
70
80
20
PSD (dB/Hz)
10
-10
-20
-30
-40
0.5
1.5
frecuencia (Hz)
Hallando la PSD con mayor nmero de puntos sobre el crculo del plano z
>> [Pxx,f]=armaspectra(Ba,Aa,e,300000,fs);
64
90
PSD (dB/Hz)
20
10
0
-10
-20
-30
-40
0.5
1.5
1
frecuencia (Hz)
2.5926
0.4961
0.5366
0.9795
0.5801
-3.5
-4
-4.5
-5
-5.5
-6
-6.5
-7
10
20
30
40
Orden na, nb=na-1
65
50
60
>> [B,A,e]=prony_e(xd,29,30);
>> [Pxx,f]=armaspectra(B,A,e,N,fs);
>>
armaspectra(B,A,e,N,fs);
PSD con modelado ARMA
40
30
20
PSD (dB/Hz)
10
0
-10
-20
-30
-40
-50
0.5
1.5
frecuencia (Hz)
Pm =
Pm =
Pm =
Pm =
Pm =
Pm =
14.75
14.75
2.90
8.92
2.25
0.68
>> [Pxx,f]=armaspectra(B,A,e,2048,fs);
>> armaspectra(B,A,e,2048,fs);
PSD con modelado ARMA
30
20
PSD (dB/Hz)
10
0
-10
-20
-30
-40
-50
0.5
frecuencia (Hz)
>> Pm=trapz(f,Pxx) %
>> ind_vlf=find(f>=0.001 & f <= 0.04);
>> ind_lf=find(f>0.04 & f <= 0.15);
>> ind_hf=find(f>0.15 & f < 0.4);
>> ind_vhf=find(f>=0.4 & f < 1);
>> Pm=trapz(f(ind_hf),Pxx(ind_hf)) %
>> Pm=trapz(f(ind_lf),Pxx(ind_lf)) %
Pm = 2.10
Pm = 0.43
Pm = 0.40
66
1.5
mdl
gic3
aic
0
-1
-1
-2
-2
-3
-3
-4
-4
-5
-5
-6
-6
-7
-8
mdl
gic3
aic
-7
0
10
20
30
40
Orden na, nb=na-1
50
60
-8
10
20
30
40
Orden na, nb=na-1
PSD (dB/Hz)
0
-10
-20
-30
-40
-50
-60
-70
0.5
1
frecuencia (Hz)
Pm = 0.21
Pm = 0.23
Pm = 0.27
67
1.5
50
60
armaspectra(B,A,e,N,fs);
30
60
20
40
10
20
PSD (dB/Hz)
PSD (dB/Hz)
0
-10
-20
-30
-20
-40
-40
-50
-60
0.5
1.5
-60
0.5
frecuencia (Hz)
1.5
frecuencia (Hz)
>> Pm=trapz(f,Pxx)
%
>> Pm=fs/2048*sum(Pxx(ind_vhf)) %
>> Pm=fs/2048*sum(Pxx(ind_hf)) %
>> Pm=fs/2048*sum(Pxx(ind_lf)) %
>> Pm=fs/2048*sum(Pxx(ind_vlf)) %
Pm =
Pm =
Pm =
Pm =
Pm =
1.3276
0.5938
0.2757
0.2333
0.2152
>> plot(V0(2,:),V0(1,:),Va0(2,:),Va0(1,:),Vai0(2,:),Vai0(1,:))
Funciones de criterio vs na, modelo ARMA - OE A rma
1
mdl
gic3
aic
0
-1
-2
-3
-4
-5
-6
-7
-8
10
20
30
40
Orden na, nb=na-1
68
50
60
>>armaspectra(B,A,e,N,fs);
PSD con modelado ARMA
40
60
20
40
20
PSD (dB/Hz)
PSD (dB/Hz)
-20
-40
-60
-20
-40
-80
-100
-60
1.5
0.5
-80
frecuencia (Hz)
0.5
1.5
frecuencia (Hz)
>> Pm=trapz(f,Pxx)
%
>> Pm=fs/2048*sum(Pxx(ind_vhf)) %
>> Pm=fs/2048*sum(Pxx(ind_hf)) %
>> Pm=fs/2048*sum(Pxx(ind_lf)) %
>> Pm=fs/2048*sum(Pxx(ind_vlf)) %
Pm =
Pm =
Pm =
Pm =
Pm =
1.346
0.218
0.239
0.282
0.607
-4
-4.5
-5
-5.5
-6
-6.5
-7
-7.5
10
20
30
40
Orden na, nb=na-1
[B,A,e]=armax_arma(x0d,15,16);
>> armaspectra(B,A,e,2048,fs);
10
60
40
-10
20
PSD (dB/Hz)
PSD (dB/Hz)
60
>> armaspectra(B,A,e,300000,fs);
-20
-20
-30
-40
-40
-60
-50
50
0.5
1.5
0.5
1
frecuencia (Hz)
frecuencia (Hz)
69
1.5
>> armaspectra(B,A,e,300000,fs);
-5
40
-10
-15
20
-25
PSD (dB/Hz)
PSD (dB/Hz)
-20
-30
-35
-20
-40
-45
-40
-50
0.5
1.5
frecuencia (Hz)
0.5
frecuencia (Hz)
>> [Pxx,f]=armaspectra(B,A,e,300000,fs);
>> Pm=trapz(f,Pxx) %
>> Pm=fs/300000*sum(Pxx(ind_vlf)) %
>> Pm=fs/300000*sum(Pxx(ind_lf)) %
>> Pm=fs/300000*sum(Pxx(ind_hf)) %
>> Pm=fs/300000*sum(Pxx(ind_vhf)) %
Pm =
Pm =
Pm =
Pm =
Pm =
0.0430
0.0041
0.0153
0.0087
0.0145
70
1.5
RR (ms)
1000
900
800
700
600
500
50
100
150
tiempo (s)
200
250
300
Pm = 3827.2 ms2
Pm = 3830.0 ms2
71
PSD (dB/Hz)
60
40
20
-20
0.5
1.5
frecuencia (Hz)
Pm = 3822.9 ms2
Pm = 3827.2 ms2
1.2509e+006 = VLF_dc
1484.9 = VLF
1463.9 (equivalente)
1272.6 = LF
1222.8 (equivalente)
995.48 = HF
987.85 (equivalente)
73.60
72
1.28
Calculemos de nuevo la potencia media utilizando un mayor nmero de puntos Nfft = 2048. Esta
seal con un valor continuo alto, sin envantanar, produce unos escalones que distorsionan las
altas frecuencias. Se comparan los resultados con Nfft = N = length(x) = 887.
[Pxx,f]=periodogram(x,[],2048,fs);
Seal x sin enventanar
N= length(x)=887
Bandas (Hz)
Pot med
Pm=fs/N*sum(Px)
2
(ms )
Pot med
Nfft = 2048
f2
Pot med
Pm=fs/Nfft*sum(Px)
f1
(ms )
Pm = Px df
Pot med
f
Pm = 2 Px df
f1
(ms )
Total
VLF_dc = [0 0,04]
VLF = [0,003 0,04
LF = [0,04 0,15]
HF = [0,15 0,4]]
VHF = [0.4 1]
LFnorm
HFnorm
LF/HF
1,253E+06
1,251E+06
1484,92
1272,63
995,48
73,60
54,33
42,50
1,278
6,285E+05
6,262E+05
1463,92
1222,84
987,85
73,51
51,84
41,88
1,238
(ms )
1,253E+06
1,241E+06
117766,44
8628,05
2881,68
859,10
68,25
22,80
2,994
9,827E+05
9,696E+05
96036,15
8602,44
2863,70
855,62
65,64
21,85
3,004
Si trabajamos con la seal sin su valor medio (x0), los escalones de inicio y final son menores,
disminuyendo los errores de altas frecuencias, sin embargo, la seal deber luego ser
enventanada:
>> [Pxx,f]=periodogram(x0,[],N,fs); [Pxx2,f2]=periodogram(x0,[],2048,fs);
>> plot(f,10*log10(Pxx),f2,10*log10(Pxx2)),grid, axis([0 1.5 -20 100])
>> legend('Nfft=length(x)=887','Nfft=2048')
PSD (dB/Hz)
60
40
20
-20
0.5
1.5
frecuencia (Hz)
73
Pm = 3827.2
Pot med
Pm=fs/N*sum(Px)
Pot med
f
Pot med
Pm=fs/Nfft*sum(Px)
f1
(ms )
Pm = 2 Px df
(ms )
Pot med
(ms )
Total
VLF_dc = [0 0,04]
VLF = [0,003 0,04
LF = [0,04 0,15]
HF = [0,15 0,4]]
VHF = [0.4 1]
LFnorm
HFnorm
LF/HF
3827,24
1484,92
1484,92
1272,63
995,48
73,60
54,33
42,50
1,278
Pm = 2 Px df
f1
(ms )
3827,23
1468,31
1463,92
1222,84
987,85
73,51
51,84
41,88
1,238
3827,24
1556,96
1551,41
1196,54
1000,86
72,39
52,70
44,09
1,196
3827,24
1529,70
1523,72
1177,82
991,56
72,30
51,26
43,16
1,188
Utilizando el periodograma donde la seal x original y con valor medio x0 se enventana con
una ventana de Hanning, tenemos
>> [Pxx,f]=periodogram(x,hann(N),2048,fs); % Seal x original
>> [Pxx2,f2]=periodogram(x0,hann(N),2048,fs); % Seal x removido su valor medio: x0
>> plot(f,10*log10(Pxx),f2,10*log10(Pxx2)),grid
>> xlabel('frecuencia (Hz)'), ylabel('PSD (dB/Hz)')
>> legend('PSD de x','PSD de x0 = x-mean(x)')
>> title ('Estimacion PSD con periodograma, ventana de Hanning, Nfft=2048')
Estimacion PSD con periodograma, ventana de Hanning, Nfft=2048
100
PSD de x
PSD de x0 = x-mean(x)
80
PSD (dB/Hz)
60
40
20
0
-20
-40
-60
0.5
frecuencia (Hz)
74
1.5
Pot med
Pm=fs/N*
sum(Px)
Total
VLF_dc = [0 0,04]
VLF = [0,003 0,04
LF = [0,04 0,15]
HF = [0,15 0,4]]
VHF = [0.4 1]
LFnorm
HFnorm
LF/HF
Nfft = 2048
Nfft = 100000
Pm = 2 Px df
Pot med
Pm=fs/Nfft*
sum(Px)
Pm = 2 Px df
Pm = 2 Px df
f1
Pot med
Pm=fs/Nfft*
sum(Px)
(ms )
(ms2)
(ms )
(ms2)
(ms2)
(ms2)
1,254E+06
1,252E+06
4,224E+05
1274,17
1111,27
57,85
52,15
45,48
1,147
8,395E+05
8,370E+05
2,120E+05
1222,74
1101,18
57,34
49,24
44,35
1,110
1,254E+06
1,252E+06
6,797E+04
1233,53
1114,14
57,89
51,28
46,31
1,107
1,075E+06
1,072E+06
3,696E+04
1212,60
1108,79
57,72
50,00
45,72
1,094
1,254E+06
1,252E+06
1,656E+05
1240,01
1114,96
58,03
51,39
46,21
1,112
1,250E+06
1,248E+06
1,630E+05
1239,51
1114,85
58,03
51,36
46,19
1,112
Pot med
f
Pot med
f
f1
Pot med
f
f1
Podemos observar de la tabla anterior que al utilizar un nmero elevado de puntos para hallar la
FFT (100000) los resultados utilizando la expresin de la sumatoria (Pm=fs/Nfft*sum(Px)) son
similares a los hallados con Nfft = 2048 puntos, sin embargo los clculos obtenidos con la
aproximacin de la integral se acercan ms a los de la frmulan discreta.
Si agregamos el ndice VHF normalizado (Nfft = 2048):
>> VHFnorm=Pm_vhf/(Pm_tot-Pm_vlf_dc)*100 % VHFnorm =
2.406
Total
VLF_dc = [0 0,04]
VLF = [0,003 0,04
LF = [0,04 0,15]
HF = [0,15 0,4]]
VHF = [0.4 1]
LFnorm
HFnorm
LF/HF
Pot med
Pm=fs/N*
sum(Px)
(ms2)
4090,92
1647,47
1645,25
1274,30
1111,26
57,85
52,15
45,48
1,147
Pot med
Nfft = 2048
Pm = 2 Px df
Pot med
Pm=fs/Nfft*
sum(Px)
(ms2)
(ms2)
f1
4089,80
1606,72
1601,02
1222,78
1101,18
57,34
49,24
44,35
1,110
4090,92
1686,87
1683,02
1232,00
1114,14
57,89
51,25
46,34
1,106
Pot med
Nfft = 100000
Pm = 2 Px df
Pot med
Pm=fs/Nfft*
sum(Px)
Pm = 2 Px df
(ms2)
(ms2)
(ms2)
4090,44
1665,74
1653,67
1211,37
1108,79
57,72
49,96
45,73
1,093
4090,92
1679,14
1676,46
1238,77
1114,96
58,03
51,36
46,23
1,111
4090,91
1678,73
1676,04
1238,26
1114,84
58,03
51,33
46,22
1,111
f1
Pot med
f
f1
Analizando los resultados, podemos sugerir que se puede usar un nmero de puntos Nfft = 2048
para esta longitud de seal RR, con una ventana de Hanning. En el caso de los ndices LF, HF,
VHF y sus valores relacionados, es similar usar la seal original o removindole el valor medio.
Vamos a calcular tambin la PSD y las potencias medias de la seal x eliminando su tendencia
de lineal (primer orden), es decir, restndole la recta que la interpola: xd. El valor medio de xd es
tambin cero. Aadiremos, adems, el ndice VHFnorm=Pm_vhf/(Pm_tot-Pm_vlf_dc)*100.
>> xd=detrend(x);
>> [Pxx,f]=periodogram(xd,hann(N),N,fs);
>> [Pxx2,f2]=periodogram(xd,hann(N),2048,fs);
>> [Pxx3,f3]=periodogram(xd,hann(N),100000,fs);
75
Total
VLF_dc = [0 0,04]
VLF = [0,003 0,04
LF = [0,04 0,15]
HF = [0,15 0,4]]
VHF = [0.4 1]
LFnorm
HFnorm
VHFnorm
LF/HF
Pot med
Pm=fs/N*
sum(Px)
(ms2)
4089,32
1645,87
1643,64
1274,30
1111,26
57,85
52,15
45,48
2,37
1,15
Nfft = 2048
Pot med
Pm = Px df
Pot med
Pm=fs/Nfft*
sum(Px)
(ms2)
(ms2)
f2
f1
4088,20
1605,11
1600,19
1222,78
1101,18
57,34
49,24
44,35
2,31
1,11
Nfft = 100000
Pot med
Pm = Px df
Pot med
Pm=fs/Nfft*
sum(Px)
Pm = 2 Px df
(ms2)
(ms2)
(ms2)
4088,83
1664,13
1653,26
1211,37
1108,79
57,72
49,96
45,73
2,38
1,09
4089,32
1677,54
1675,47
1238,77
1114,96
58,03
51,36
46,23
2,41
1,11
4089,31
1677,12
1675,05
1238,26
1114,84
58,03
51,33
46,22
2,41
1,11
4089,32
1685,26
1682,34
1232,00
1114,14
57,89
51,25
46,34
2,41
1,11
f2
f1
Pot med
f
f1
Es una buena oopcin remover la tendencia lineal a la seal x para el anlisis de las potencias
medias relacionadas con los ndices LF, HF y VHF.
5.2.2) PSD y potencia promedio con mtodos paramtricos
a) Estructuras AR
Busquemos el mejor orden de modelo con estructuras AR. Usaremos la seal x0, es decir,
con valor medio 0.
>> [na,Vcic,Vn]=selarstruc(x0,'arburg',2:80,'cic'); %
na = 21
>> [na,Vaic,Vn]=selarstruc(x0,'arburg',2:80,'aic');na %
na = 25
>> [na,Vmdl,Vn]=selarstruc(x0,'arburg',2:80,'mdl');na %
na = 12
>> plot(Vcic(2,:),Vcic(1,:),Vaic(2,:),Vaic(1,:),Vmdl(2,:),Vmdl(1,:))
Funciones de criterio vs na, modelo AR - Burg
5
cic
aic
mdl
4.5
3.5
namincic = 21
naminaic = 25
2.5
naminmdl = 12
1.5
10
20
30
40
Orden na
50
60
70
80
Realizando el mismo clculo con la seal original, x, y con la seal removindole la tendencia
lineal, xd, se obtienen los mismos resultados y una grfica muy similar de las funciones de
criterio vs el orden na. Con el mtodo de la covarianza y covarianza modificada se consiguen
valores muy similares de na para cada funcin de criterio. Utlizaremos los valores na = 12, na =
14 y na = 21 con el mtodo de Burg.
76
>> [A,e]=arburg(x0,12);
>> [A14,e14]=arburg(x0,14);
>> [A21,e21]=arburg(x0,21);
>> [Pxx,f]=armaspectra(1,A,e,N,fs);
>> [Pxx14,f14]=armaspectra(1,A14,e14,N,fs);
>> [Pxx21,f21]=armaspectra(1,A21,e21,N,fs);
>> plot(f,10*log10(Pxx),f14,10*log10(Pxx14),f21,10*log10(Pxx21)),grid
>> xlabel('frecuencia (Hz)')
>> ylabel('PSD (dB/Hz)')
>> title ('PSD con modelado AR, metodo de Burg')
>> legend('na = 12', 'na = 14', 'na = 21')
PSD con modelado AR, metodo de Burg
50
na = 12
na = 14
na = 21
40
PSD (dB/Hz)
30
20
10
0
-10
-20
-30
0.5
1.5
frecuencia (Hz)
Total
VLF_dc = [0 0,04]
VLF = [0,003 0,04
LF = [0,04 0,15]
HF = [0,15 0,4]]
VHF = [0.4 1]
LFnorm
HFnorm
VHFnorm
LF/HF
Pot med
Pm=fs/N*
sum(Px)
(ms2)
3827,24
1451,47
1364,14
1276,73
1034,51
64,51
53,74
43,54
2,72
1,23
Pot med
Nfft = 2048
Pm = Px df
Pot med
Pm=fs/Nfft*
sum(Px)
(ms2)
(ms2)
f2
f1
3783,57
1369,74
1239,79
1227,65
1018,97
62,85
50,86
42,21
2,60
1,20
3827,24
1480,64
1292,37
1244,55
1037,36
64,67
53,04
44,21
2,76
1,20
77
Nfft = 100000
Pm = Px df
Pot med
Pm=fs/Nfft*
sum(Px)
Pm = 2 Px df
(ms2)
(ms2)
(ms2)
3808,32
1446,21
1239,79
1223,48
1030,58
63,94
51,80
43,63
2,71
1,19
3827,24
1474,78
1321,11
1249,30
1037,82
65,30
53,11
44,12
2,78
1,20
3826,85
1474,08
1320,03
1248,87
1037,68
65,29
53,08
44,10
2,77
1,20
Pot med
f2
f1
Pot med
f
f1
Total
VLF_dc = [0 0,04]
VLF = [0,003 0,04
LF = [0,04 0,15]
HF = [0,15 0,4]]
VHF = [0.4 1]
LFnorm
HFnorm
VHFnorm
LF/HF
Pot med
Pm=fs/N*
sum(Px)
(ms2)
3827,24
1451,31
1365,01
1271,46
1039,39
65,06
53,51
43,75
2,74
1,22
Pot med
Nfft = 2048
Pm = Px df
Pot med
Pm=fs/Nfft*
sum(Px)
(ms2)
(ms2)
f2
f1
3784,09
1369,56
1241,10
1221,74
1023,75
63,51
50,60
42,40
2,63
1,19
Pot med
Pm = Px df
Pm = 2 Px df
(ms2)
(ms2)
(ms2)
3808,55
1446,46
1242,42
1217,48
1035,47
64,53
51,54
43,84
2,73
1,18
3827,24
1474,95
1323,09
1243,66
1042,80
65,80
52,87
44,33
2,80
1,19
3826,85
1474,25
1322,01
1243,21
1042,66
65,79
52,84
44,32
2,80
1,19
f2
f1
3827,24
1480,89
1294,82
1238,83
1042,28
65,21
52,80
44,42
2,78
1,19
Nfft = 100000
Pot med
Pm=fs/Nfft*
sum(Px)
Pot med
f
f1
Pot med
Pm=fs/N*
sum(Px)
2
(ms )
Total
VLF_dc = [0 0,04]
VLF = [0,003 0,04
LF = [0,04 0,15]
HF = [0,15 0,4]]
VHF = [0.4 1]
LFnorm
HFnorm
VHFnorm
LF/HF
3827,24
1497,93
1358,87
1249,19
1009,45
70,64
53,63
43,34
3,03
1,24
Pot med
Nfft = 2048
f1
Pot med
Pm=fs/Nfft*
sum(Px)
(ms2)
(ms )
f2
Pm = Px df
Pot med
3757,71
1404,28
1203,09
1217,33
998,49
69,03
51,73
42,43
2,93
1,22
f1
(ms2)
(ms )
f2
Pm = Px df
3827,24
1516,39
1221,38
1228,67
1011,37
70,79
53,17
43,77
3,06
1,21
Nfft = 100000
Pot med
Pm=fs/Nfft*
sum(Px)
3797,12
1476,45
1156,54
1215,00
1006,56
70,09
52,36
43,37
3,02
1,21
3827,24
1512,68
1270,71
1231,62
1011,53
71,38
53,21
43,70
3,08
1,22
Pot med
f
Pm = 2 Px df
f1
(ms2)
3826,62
1511,87
1269,33
1231,34
1011,43
71,37
53,20
43,69
3,08
1,22
Un orden de modelo AR na = 14, con el mtodo de Burg, es un buen compromiso para estimar
la PSD en seales RR de corta duracin. El nmero de puntos para hallar la PSD puede ser
2048. La PSD para este orden de modelo y usando Nfft = 887, 2048 y 100000 puntos es:
PSD con modelado AR, metodo de Burg, orden 14
50
Nfft=length(x)=887
Nfft=2048
Nfft=100000
40
PSD (dB/Hz)
30
20
10
-10
-20
0.5
1
frecuencia (Hz)
78
1.5
3.5
2.5
na = 10, nb = 9
2
1.5
10
20
30
40
50
60
Orden na, nb=na-1
70
80
90
>> [Aa,Ba,sel]=sig2arma(x0,10);
>> e=sel.pe_est
>> [Pxx,f]=armaspectra(Ba,Aa,e,N,fs);
>> [Pxx2,f2]=armaspectra(Ba,Aa,e,2048,fs);
>> [Pxx1,f1]=armaspectra(Ba,Aa,e,10000,fs);
>> plot(f,10*log10(Pxx),f2,10*log10(Pxx2),f1,10*log10(Pxx1)),grid
PSD con modelado ARMA, metodo Durbin-Broersen, orden na=10, nb=9]
50
Nfft=length(x)=887
Nfft=2048
Nfft=100000
40
PSD (dB/Hz)
30
20
10
0
-10
-20
-30
0.5
frecuencia (Hz)
79
1.5
Pot med
Pm=fs/N*
sum(Px)
f2
Pm = Px df
f1
(ms )
Total
Pot med
Pm=fs/Nfft*
sum(Px)
f2
Pm = Px df
(ms )
3918,50
1419,54
1226,49
1289,76
1053,18
65,21
51,61
42,14
2,61
1,22
Nfft = 100000
Pot med
(ms2)
3985,38
1517,23
1383,48
1332,84
1068,46
66,82
54,00
43,29
2,71
1,25
VLF_dc = [0 0,04]
VLF = [0,003 0,04
LF = [0,04 0,15]
HF = [0,15 0,4]]
VHF = [0.4 1]
LFnorm
HFnorm
VHFnorm
LF/HF
Nfft = 2048
Pot med
3985,38
1541,37
1258,03
1305,73
1071,29
66,98
53,43
43,83
2,74
1,22
f1
Pot med
Pm=fs/Nfft*
sum(Px)
2
%
%
%
(ms )
(ms2)
3985,38
1536,53
1304,03
1309,48
1071,75
67,59
53,47
43,77
2,76
1,22
3984,79
1535,67
1302,64
1309,10
1071,62
67,58
53,45
43,76
2,76
1,22
nn = [50 49]
nn = [10 9]
nn = [12 11]
2.5
2.4
2.3
2.2
2.1
2
1.9
10
20
30
40
Orden na, nb=na-1
80
f1
(ms2)
2.6
1.8
Pm = 2 Px df
3956,42
1499,60
1192,60
1287,18
1064,61
66,27
52,39
43,33
2,70
1,21
Pot med
50
60
PSD (dB/Hz)
55
50
45
40
35
30
25
0.5
1.5
frecuencia (Hz)
N = 2048
Pm_tot = 2.6579e+005
Pm_vlf_dc 6.7281e+004
Pm_lf = 9.3021e+004
Pm_hf = 9.5712e+004
Pm_vhf = 7.3093e+003
LFnorm = 46.86
HFnorm = 48.22
LFdivHF = 0.972
N = 10000
Pm_tot = 2.6579e+005
Pm_vlf_dc = 6.7022e+004
Pm_lf = 9.3282e+004
Pm_hf = 9.5678e+004
Pm_vhf = 7.3437e+003
LFnorm = 46.93
HFnorm = 48.14
LFdivHF = 0.975
El modelado ARMA con el mtodo Prony no produce tan buenos resultados como el de DurbinBroersen. Probemos el mtodo Armax-ARMA.
>> [nn,Vm,Vn] = selarmastruc2(x0,'armax_arma',2:30,'mdl');
>> [nn,Vg,Vn] = selarmastruc2(x0,'armax_arma',2:30,'gic3');
>> [nn,Vai,Vn] = selarmastruc2(x0,'armax_arma',2:30,'aic');
>> plot(Vai(2,:),Vai(1,:),Vm(2,:),Vm(1,:),Vg(2,:),Vg(1,:))
% nn = [7 6]
% nn = [18 17]
% nn = [18 17]
3.6
3.4
3.2
3
2.8
2.6
2.4
na = 7, nb = 6
na = 13, nb = 12
2.2
2
1.8
10
20
15
Orden na, nb=na-1
>> [B,A,e]=armax_arma(x0,6,7);
>> [Pxx,f]=armaspectra(B,A,e,N,fs);
>> [Pxx2,f2]=armaspectra(B,A,e,2048,fs);
81
25
30
40
PSD (dB/Hz)
30
20
10
0
-10
-20
-30
0.5
1.5
frecuencia (Hz)
Seal x removida su valor medio: x0, modelo armax_ARMA, orden na=7, nb=6
N= length(x)=887
Bandas (Hz)
Total
VLF_dc = [0 0,04]
VLF = [0,003 0,04
LF = [0,04 0,15]
HF = [0,15 0,4]]
VHF = [0.4 1]
LFnorm
HFnorm
VHFnorm
LF/HF
Pot med
Pm=fs/N*
sum(Px)
(ms2)
4270,97
1728,39
1586,60
1336,83
1141,56
64,17
52,58
44,90
2,52
1,17
Pot med
Nfft = 2048
Pm = 2 Px df
Pot med
Pm=fs/Nfft*
sum(Px)
(ms2)
(ms2)
f1
4200,07
1621,21
1414,95
1289,55
1126,21
62,11
50,00
43,67
2,41
1,15
4270,97
1756,58
1454,86
1305,78
1144,20
64,38
51,93
45,51
2,56
1,14
Pot med
Nfft = 100000
Pm = 2 Px df
Pot med
Pm=fs/Nfft*
sum(Px)
Pm = 2 Px df
(ms2)
(ms2)
(ms2)
4240,26
1710,90
1383,00
1285,44
1137,53
63,46
50,82
44,97
2,51
1,13
4270,97
1750,93
1503,68
1310,40
1144,44
65,18
52,00
45,41
2,59
1,15
4270,34
1749,99
1502,17
1309,98
1144,30
65,16
51,98
45,40
2,59
1,14
f1
Pot med
f
f1
Seal x removida su valor medio: x0, modelo armax_ARMA, orden na=10, nb=9
N= length(x)=887
Bandas (Hz)
Total
VLF_dc = [0 0,04]
VLF = [0,003 0,04
LF = [0,04 0,15]
HF = [0,15 0,4]]
VHF = [0.4 1]
LFnorm
HFnorm
VHFnorm
LF/HF
Pot med
Pm=fs/N*
sum(Px)
(ms2)
4252,21
1750,94
1611,31
1376,02
1062,19
63,04
55,01
42,47
2,52
1,30
Pot med
Nfft = 2048
Pm = Px df
Pm = Px df
Pot med
Pm=fs/Nfft*
sum(Px)
(ms2)
(ms2)
(ms2)
(ms2)
(ms2)
4221,92
1733,77
1409,47
1324,24
1057,99
62,42
53,22
42,52
2,51
1,25
4252,16
1773,24
1529,31
1349,44
1065,55
63,91
54,44
42,98
2,58
1,27
4251,54
1772,32
1527,81
1349,01
1065,41
63,89
54,41
42,97
2,58
1,27
f2
f1
4182,40
1645,04
1441,01
1327,78
1045,85
61,24
52,33
41,22
2,41
1,27
4252,16
1778,83
1480,93
1344,98
1065,10
63,22
54,38
43,06
2,56
1,26
82
Pot med
Nfft = 100000
Pot med
Pm=fs/Nfft*
sum(Px)
f2
f1
Pot med
f
Pm = 2 Px df
f1
110
PSD (dB/Hz)
100
90
80
70
60
50
0.5
1.5
frecuencia (Hz)
>> [B,A,e]=oe_arma(x0,12,13);
>> armaspectra(B,A,e,2048,fs);
PSD con modelado ARMA
120
110
PSD (dB/Hz)
100
90
80
70
60
50
0.5
1.5
frecuencia (Hz)
Entre las estructuras ARMA analizadas sugerimos el uso de los mtodos de DurbinBroersen y armax_ARMA para estimar los componentes frecuenciales de este tipo de seal. Los
rdens na = 10, nb = 9, propuesto por el criterio GIC en Durbin-Broersen y na = 7, nb = 6 en
armax_ARMA pueden ser una buena aproximacin para seales RR re-muestreadas a fs = 3 Hz
de 3 minutos de duracin. Un nmero de puntos Nfft = 2048 es suficiente con esta seal
analizada. Dependiendo de la longitud del segmento HRV a evaluar, y el nmero de muestras
luego del remuestreo, se pueden escoger rdenes y nmero de puntos diferentes.
83
Referencias
REFERENCIAS
[Aka70] Akaike H. Statistical predictor identification. Ann Inst Stat Math, vol 22, pp. 173-220,
1970.
[Aka74] Akaike H. A new look at the statistical model identification. IEEE Trans Autom
Control, vol 19, pp. 716-723, 1974.
[Bro93] Broersen PMT, Wensink HE. On finite sample theory autoregressive model order
selection. IEEE Trans Signal Processing, vol. 41 (1), pp. 194-204, 1993.
[Bro00a] Broersen PMT. Autoregressive Model Order for Durbins MA and ARMA
Estrimator. IEEE Trans Signal Processing, vol. 48 (8), pp. 2454-2457, 2000.
[Bro00b] Broersen PMT. Finite sample criteria for autoregressive order selection. IEEE Trans
Signal Processing, vol. 48 (12), pp. 3550-3558, 2000.
[Bro02] Broersen, PMT. Automatic spectral analysis with time series models. IEEE Trans
Instrum Meas, vol 51 (2), pp 211-216, 2002.
[BroMat] Broersen, PMT. Matlab Toolbox ARMASA [oOnline]. Available:
http://www.tn.tudelft.nl/mmr.
[Bur67] Burg JP, Maximun likehood spectral analysis. In Proc 37th Meet Soc Exploration
Geophysicist., Oklahoma City, OK, p. 1-6, 1967.
[Car68] Carlson AB, Communication Systems: An Introduction to Signals and Noise in
Electrical Communication, McGraw-Hill, Tokyo, 1968.
[Den83] Dennis J, Schnabel R, "Numerical methods for unconstrained optimization and and
nonlinear equation", Prentice Hall, Englewood Cliffs, New Jersey. 1983.
[Dur60] Durbin J. The fitting of time series models. Rev Inst Int Stat, vol 28, pp. 233-243,
1960.
[Han79] Hannan EJ, Quinn BG. The determination of the order of an autoregression. J R Statist
Soc. Ser B, vol B-41, pp. 190-195, 1979.
[Har78] Harris FJ (1978), "On the use of windows for harmonic analysis with discrete Fourier
transform", Proc IEEE, 66:51-84.
[Kay81] Kay SM, Marple SL. Spectrum Analysis A modern perspective. Proc IEEE, vol 69,
pp. 1380-1419, 1981.
[Lju87] Ljung L. Identification Systems. Theory for the user, Prentice Hall, New Jersey, 1987.
[Mar77] Marple Jr., S.L. Resolution of conventional Fourier, autoregressive and special
ARMA methods of spectral analysis IEEE International Conf. on ASSP pp 747, 1977.
[Mar82] Marple Jr., S.L. Frequency Resolution of Fourier and Maximum Entropy Spectral
Estimates, Geophysics, vol. 47, No. 9, pp. 1303-1307, Sep. 1982.
[Mar87] Marple Jr, S.L. Digital Spectral Analysis with Applications. Prentice Hall, New Jersey,
1987.
[Par87] T.W. Parks and C.S. Burrus, Digital Filter Design, John Wiley and Sons, 1987, p226.
[Pro92] Proakis JG, Rader CM, Ling F, Nikias CL, "Advanced Digital Signal Processing",
Macmillan Pub. Co., New York, 1992
[Ris78] Rissanen J. Modeling by the shortest data description. Automatica, vol 14, pp. 465-471,
1978.
[Sod88] Sderstrm T, Stoica P, "On some identification techniques for adaptive filtering",
IEEE Trans Circuits Syst, CAS-35:457-461. 1988.
[Ste65] Steiglitz K, McBride LE, "A technique for the identification of linear systems", IEEE
Trans Autom Control, AC-10:461-464. 1965
[Tas96] Task Force of The European Society of Cardiology and The North American Society of
Pacing and Electrophysiology. Heart rate variability: standards of measurement,
physiological interpretation, and clinical use. Eur Heart J 1996;17:354-
84
Referencias
[The92] Ch. W. Therrien, Discrete Random Signals and Statistical Signal Processing.
Englewood Cliffs, New Jersey: Prentice-Hall, pp. 550-575, 1992.
85