Práctica 1: Modelado y Estimación de Señales de Voz

Modelo 1: Espacio de Muestreo Discreto

Es un modelo muy sencillo que considera la generación de muestras de señal de voz como un experimento aleatorio con un espacio de muestreo discreto S, formado por los 256 valores distintos que puede tomar una muestra mi y que se encuentran en el rango S = {m1 = −127, m2 = −126,…, m255 = 127, m256 = 128}. Determine una ley de probabilidad ai = P[s(n) = mi] para este experimento aleatorio, usando la base de datos formada por los ficheros de voz “aage3201r.8bi”, “tsge3270r.8bi”, “euge0013r.8bi”, “vege1850r.8bi” (contienen enteros con signo de 8 bits, cada uno de los cuales corresponde al valor de una muestra). Los ficheros no tienen ningún tipo de cabecera.

% Abrimos y dibujamos cada muestra

f1=fopen('aage3201r.8bi','r');

s1=fread(f1,'int8')

plot(s1)

f2=fopen('euge0013r.8bi','r');

s2=fread(f2,'int8')

plot(s2)

f3=fopen('tsge3270r.8bi','r');

s3=fread(f3,'int8')

plot(s3)

f4=fopen('vege1850r.8bi','r');

s4=fread(f4,'int8')

plot(s4)

% Unimos los vectores s1, s2, s3 y s4 en un solo vector de muestras s

s=[s1;s2;s3;s4]

% Creamos un vector x que almacena los valores enteros desde –127 a 128.

x=-127:1:128;

% Calculamos el número de veces que se repite una muestra en dicho intervalo determinado anteriormente

frec=hist(s,x);

% Obtenemos el número de muestras que tenemos

ntotal=length(s);

% Calculamos la probabilidad de s

prob=frec/ntotal;

% Comprobamos que las probabilidades suman 1

sum(prob);

plot(prob)

% Creamos un nuevo vector p, con los valores del vector prob.

p=prob

% Bucle que recorre las posiciones del vector p, y sustituye aquellos que valen cero, por 10e-6.

for k=1:1:256;

if p(k)==0,

p(k)=10e-6;

end

end

% Normalizamos el nuevo vector de probabilidades p

p=p/sum(p);

Tabla de Probabilidades (Modelo 1)

Modelo 2: Cadena de Markov de Primer Orden

Es un modelo más sofisticado que considera la producción de una secuencia de muestras de señal de voz como un experimento aleatorio secuencial formado por experimentos dependientes que pueden ser modelados como una cadena de Markov de primer orden.

En este tipo de modelado se ha de determinar el valor de las probabilidades condicionales aij = P[s(n) = mj | s(n − 1) = mi], i,j = 1,2,…,256. Se ha de obtener, por tanto, una matriz de probabilidades condicionales de dimensión 256 × 256. Para ello se usa la misma base de datos indicada anteriormente.

% Creamos una matriz de ceros

matrizp = zeros(256);

k=256;

% Bucle de procesamiento

for i=1:1:(ntotal-1)

a=s(i);

b=s(i+1);

d=matrizp(128+a,128+b);

matrizp(128+a,128+b)=d+1;

end

% Bucle que cambia los 0 por 10e-6

for j=1:1:k

for k=1:1:k

if(matrizp(j,k)==0)

matrizp(j,k)=10e-6;

end

end

end

% Obtenemos la matriz normalizada

for i=1:k;

matrizp(i,:)=matrizp(i,:)/sum(matrizp(i,:));

end

Tabla de Probabilidades Condicionales (Modelo 2)

Con los dos modelos estadísticos desarrollados en el apartado anterior, realice las siguientes 4 estimaciones estadísticas para cada una de las muestras de voz que falten en el receptor.

Estimación 1: Máxima Probabilidad (Modelo 1)

Basada en el primer modelo. Estimaremos la muestra que falta s(n) como s(n) dada por:

s(n) = mi que hace máxima la P[s(n) = mi], i = 1,2,…,256

% Abrimos la 5ª muestra

f5=fopen('aage3201r.8bi','r');

s5=fread(f5,'int8')

% Asignamos la muestra s5

muestra1=s5;

% Escogemos el valor que más se repite

[maximo,posicion]=max(p);

maxim=posicion-128;

% Longitud de la muestra

n=length(muestra1)

% Bucle que sustituye al azar una de cada 10 muestras por el valor que más se repite

for k=1:10:n;

va=rand(1,10);

[vmax1,pos1]=max(va);

muestra1(k-1+pos1)=maxim;

end

Estimación 2: Valor Promedio (Modelo 1)

Basada en el primer modelo. Estimaremos la muestra que falta s(n) como s(n) dada por:

% Asignamos la muestra s5

muestra2=s5;

% Eliminamos un valor de cada 10 muestras

for n=1:10:(length(muestra2)-10)

sx=muestra2(n:n+9);

% Eliminaremos la posición que ocupe el valor máximo

va=rand(1,10);

[valor,posicion]=max(va);

% Bucle que recorre las 256 posiciones y sustituye el valor que falta por el valor promedio

sx(posicion)=0;

for i=1:1:256

sx(posicion)=sx(posicion)+round((i-128)*p(i));

end

muestra2(n:n+9)=sx;

end

Estimación 3: Máxima Probabilidad Condicional (Modelo 2)

Basada en el 2º modelo. Supongamos que hemos recibido la muestra mr en el instante n−1, es decir, s(n−1) = mr. Estimaremos la muestra que falta en el instante siguiente s(n) como s(n) dada por:

s(n) = mj que hace máxima la P[s(n) = mj | s(n − 1) = mr], j = 1,2,…,256

% Asignamos muestra s5

muestra3=s5;

% Sustituimos muestras escogidas al azar por el valor esperado

% después de la muestra anterior a la sustituida

for n=1:10:(length(muestra3)-10)

sx=muestra3(n:n+9);

% Creamos un vector de 10 posiciones de manera aleatoria donde la

% posición que ocupe el valor máximo será la que eliminemos en el

% archivo transmitido

va=rand(1,10);

[valor,posicion]=max(va);

sx(posicion)=0;

if posicion~=1

a=sx(posicion-1);

[prob,posicionmax]=max(matrizp(a+128,:));

sx(posicion)=(posicionmax-128);

else

post=0;

prob1=0;

prob2=0;

% Bucle que busca la máxima probabilidad mediante la fórmula de Bayes.

% El número que corresponde a la

% posición de la columna será el que mayor probabilidad condicional

% tiene y rellenaremos el hueco con él.

for k=1:256

a=sx(posicion+1);

prob1=matrizp(a+128,k);

prob1=prob1*p(sx(posicion+1)+128);

prob1=prob1/p(k);

if prob1>prob2

prob2=prob1;

post=k;

end

end

sx(posicion)=post-128;

end

muestra3(n:n+9)=sx;

end

Estimación 4: Valor Esperado (Modelo 2)

Basada en el 2º modelo. Supongamos que hemos recibido la muestra mr en el instante n−1, es decir, s(n−1) = mr. Estimaremos la muestra que falta en el instante siguiente s(n) como s(n) dada por:

muestra4=s5;

m=zeros(1,256);

% Sustituimos muestras escogidas al azar por el valor esperado

% después de la muestra anterior a la sustituida

for k=1:256

for j=1:256

m (k)=m (k)+((j-128)*matrizp(k,j));

end

end

% Sustituimos una muestra al azar de cada 10 y la sustituimos por el valor

% que más se repite

for k=1:10:50500

a=rand(1,10);

[valorm,posicion]=max(a);

% Almacenamos en la variable valor el valor de la muestra que vamos a

% sustituir

valor=muestra4(i-1+pos);

% Sustituimos la muestra elegida por el valor esperado

muestra4(i-1+pos)=m (valor-1+128);

end

3. Evaluación de la Calidad de la Señal

Se va a llevar a cabo a continuación una evaluación objetiva y subjetiva de la calidad de la señal de estas 4 señales de voz. Para la evaluación objetiva, utilizad la denominada relación señal-ruido (SNR) que viene definida por:

donde Nmuestras es el número total de muestras del fichero “euge0019r.8bi”.

% Calculamos la relación señal-ruido

snr1=10*(log10((sum(s5.^2))/sum((s5-muestra1).^2)))

snr1 = 10.0582

snr2=10*(log10((sum(s5.^2))/sum((s5-muestra2).^2)))

snr2 = 9.9296

snr3=10*(log10((sum(s5.^2))/sum((s5-muestra3).^2)))

snr3 = 16.0601

snr4=10*(log10((sum(s5.^2))/sum((s5-muestra4).^2)))

snr4=19.908

Desde el punto de vista objetivo, el método con el que hemos obtenido mejor relación señal-ruido es la **Estimación 4**.

Desde el punto de vista subjetivo, cualquiera de las dos estimaciones del **Modelo 2** se escuchan mejor que las dos primeras, ya que al escuchar dichos archivos el ruido es mayor en las dos primeras.


Práctica 2: Verificación de Hipótesis de Distribución

1. Descripción del Problema

Vamos a considerar el valor de las muestras de una señal como una variable aleatoria continua donde una muestra m puede tomar cualquier valor real −inf < m < inf. Después de realizar el experimento aleatorio consistente en la generación de muestras de dicha señal, hemos obtenido los datos experimentales contenidos en el fichero “muestras”. Deseamos verificar si alguna de las dos hipótesis siguientes es aceptable:

1. ¿Es una hipótesis aceptable que los datos experimentales se ajustan a una función de densidad de probabilidad Laplaciana, con varianza igual a la determinada a partir de los datos experimentales?

La forma de una distribución Laplaciana es:

con y media cero.

2. ¿Es una hipótesis aceptable que los datos experimentales se ajustan a una función de densidad de probabilidad Gaussiana, con media y varianza iguales a las determinadas a partir de los datos experimentales? La forma de una distribución Gaussiana es:


donde μ es la media y σ² es la varianza.

2. Aproximación Gráfica Inicial

Podemos inicialmente ver qué hipótesis es la más probable realizando una verificación gráfica de la PDF aproximada que se deriva de los datos y la PDF de la hipótesis. Para ello se va a usar el comando hist. Este comando nos proporciona un histograma i en una serie de intervalos (i = 1,…,n) a partir de las realizaciones de la variable aleatoria del fichero “muestras”. Obtener dicho histograma para n = 50 intervalos de la variable aleatoria y normalizar el histograma por el número total de realizaciones. La razón de la normalización es facilitar la comparación del histograma con la PDF correspondiente. Los intervalos tomados para el histograma están centrados en los puntos xi (i = 1,2,…,50) y tienen un ancho δx que puede obtenerse como la distancia entre 2 centros consecutivos (xi, xi−1). El histograma normalizado i es una aproximación a la probabilidad.

Lo que puede aproximarse (para δx pequeño) como

2.1. Obtención y Superposición de PDFs

1. Obtener los valores aproximados de la PDF a partir del histograma como fx(xi)= i/δx y superponer la gráfica resultante con la PDF Gaussiana y la PDF Laplaciana.

¿Cuál de ellas se ajusta mejor?

2.2. Código MATLAB para la Aproximación Gráfica

% Guardamos en la variable s el fichero de muestras del experimento

% aleatorio

f=fopen('muestras');

s=fread(f,'single');

% Función de Densidad de Probabilidad

% Histograma del vector leído

[,x]=hist(s,50);

% Dividimos entre el número total de muestras para calcular la probabilidad

p=./length(s)

% Calculamos el ancho de cada intervalo, calculando la diferencia

% entre 2 centros consecutivos.

ax=x(2)-x(1)

% Calculamos la PDF dividiendo las probabilidades entre el ancho anterior calculado

pdf=p./ax

% Representamos la PDF

figure(1)

plot(x,pdf,'g'),title('pdf')

hold off

% Función de Densidad de Probabilidad Laplaciana

% La alfa se relaciona con la varianza de la siguiente forma:

alfa=sqrt(2/var(s))

% Definimos la función Laplaciana

laplaciana=(alfa/2)*exp(-alfa.*abs(x))

% Representamos la función Laplaciana en rojo

figure(2)

plot(x,laplaciana,'r'),title('funcion laplaciana')

hold off

% Función de Probabilidad Gaussiana

% Asignamos a la variable media la media de las muestras

media=mean(s)

% Definimos la función Gaussiana

gausiana=(exp(-(x-media).^2/2*var(s)))/sqrt(2*pi*var(s))

% Representamos la función Gaussiana en azul

figure(3)

plot(x,gausiana,'b'),title('funcion gaussiana')

hold off

% Representamos las 3 PDF en una misma gráfica

figure(4)

plot(x,pdf,'g',x,laplaciana,'r',x,gausiana,'b'),legend('pdf de la señal','pdf laplaciana','pdf gausiana')

hold off

Las representaciones gráficas obtenidas son las siguientes:

Si observamos las gráficas obtenidas tomando 50 intervalos, la aproximación de la PDF que más se ajusta a la PDF experimental es la PDF Gaussiana; por el contrario, la PDF Laplaciana dista bastante. Por tanto, gráficamente podemos determinar que nuestra distribución se corresponde con una distribución Gaussiana.

Tabla de Valores de la PDF Aproximada

x

pdf

-4,6092

2,09e-05

-4,4321

4,18e-05

-4,2550

8,37e-05

-4,07796

6,27e-05

-3,9008

0,00012549

-3,72380

0,00035556

-3,546

0,0006902

-3,36964

0,00127583

-3,19256

0,00223793

-3,0154

0,00445495

-2,8383

0,00700661

-2,66131

0,01100142

-2,48423

0,01827993

-2,30715

0,02668787

-2,13007

0,04063834

-1,95299

0,05887644

-1,77590

0,08098387

-1,59882

0,10947044

-1,42174

0,14565384

-1,24466

0,18411699

-1,06758

0,22912662

-0,89050

0,27367611

-0,71342

0,30824903

-0,53633

0,34727689

-0,35925

0,37557523

-0,18217

0,38774791

-0,00509

0,39971144

0,171986

0,3899231

0,34906

0,37377652

0,52614

0,35022594

0,70323

0,31084252

0,88031

0,26807082

1,05739

0,22969133

1,234475

0,18758892

1,41155

0,14839373

1,5886

0,11390448

1,76571

0,08336821

1,942

0,06029868

2,11988

0,04149587

2,2969

0,02840292

2,47404

0,01861458

2,6511

0,01160797

2,82820

0,00723668

3,00528

0,0043922

3,18237

0,00299088

3,35945

0,00144315

3,53653

0,00062746

3,71361

0,00046014

3,8906

0,00023007

4,0677

0,00010458

3. Test Formal de Hipótesis (Chi-Cuadrado)

La aproximación gráfica inicial nos sirve para acotar el número de PDFs sobre las que realizar el test de hipótesis formal. En nuestro caso, y aunque de la aproximación gráfica ya se pueda inferir cuál de las 2 hipótesis tiene más posibilidades de verificarse, aun así se va a realizar el test chi-cuadrado (χ²) descrito en clase para las 2 hipótesis y así confirmar formalmente las conclusiones derivadas de la aproximación gráfica. Utilice las tablas `tablaxi2a` y `tablaxi2b`, donde `k` son los grados de libertad de la variable chi-cuadrado (v en la notación de las tablas indicadas). La relación entre `k` y el número de intervalos disjuntos `k0` en que hemos de particionar el espacio de muestreo Sx = (−inf,+inf) viene dada por k = k’− 1 − r, donde `r` es el número de parámetros que han sido determinados a partir de datos experimentales en la PDF que queremos verificar.

3.1. Código MATLAB para el Test Chi-Cuadrado

% Test formal

% Vamos a establecer 30 intervalos equiprobables.

% Para ello, ordenamos el vector de muestras de menor a mayor

% con la función sort

vord=sort(s);

% Creamos una matriz de límites

lim=[];

% Al extremo superior del último intervalo le vamos a asignar

% el valor de infinito, y al extremo inferior del primer intervalo

% le asignamos -inf, para trabajar sobre toda la recta real.

lim(1)=-inf;

lim(31)=inf;

% Buscamos el punto medio de todos los intervalos

% y lo almacenamos en la lista de límites

for i=1:29

lim(i+1)=(vord(i*9000)+vord(i*9001))/2;

end

% Distribución Laplaciana

% Número de intervalos

n=30;

% Definimos x como una variable simbólica

syms x;

% Definimos la función de una distribución Laplaciana

laplaciana=(alfa/2)*exp(-alfa*abs(x));

% Inicializamos variable donde almacenamos distorsión Laplaciana

disl=0;

% Bucle que crea un vector con las probabilidades de los 30 intervalos

% para la distribución Gaussiana

for k=1:n

% Vector de probabilidades para la distribución Gaussiana

probl(k)=double(int(laplaciana,lim(k),lim(k+1)));

% Calculamos la distorsión para el caso de la Gaussiana

disl=disl+((9000-(270000*probl(k)))^2)/(270000*probl(k));

end

% Distribución Gaussiana

% Definimos x como una variable simbólica

syms x;

% Definimos la función de una distribución Laplaciana

gausiana=exp(-((x-media)^2)/(2*var(s)))/(sqrt(2*pi*var(s)));

% Inicializamos la variable donde almacenamos la distorsión Laplaciana

disg=0;

% Vector de probabilidades para la distribución Laplaciana

for k=1:n

probg(k)=double(int(gausiana,lim(k),lim(k+1)));

% Calculamos d^2 para el caso de la Laplaciana

disg=disg+((9000-(270000*probg(k)))^2)/(270000*probg(k));

end

% Devolvemos vector de probabilidades Laplaciana y Gaussiana

probl;

probg;

% Devolvemos distorsión Gaussiana y Laplaciana

disl;

disg;

3.2. Tabla de Intervalos

k

Intervalos

1

-inf

-1.8222

2

-1.8222

-1.4896

3

-1.4896

-1.2731

4

-1.2731

-1.1044

5

-1.1044

-0.9644

6

-0.9644

-0.8417

7

-0.8417

-0.7286

8

-0.7286

-0.6235

9

-0.6235

-0.5257

10

-0.5257

-0.4319

11

-0.4319

-0.3428

12

-0.3428

-0.2558

13

-0.2558

-0.1697

14

-0.1697

-0.0843

15

-0.0843

-0.0000

16

-0.0000

0.0826

17

0.0826

0.1673

18

0.1673

0.2540

19

0.2540

0.3405

20

0.3405

0.4313

21

0.4313

0.5240

22

0.5240

0.6229

23

0.6229

0.7273

24

0.7273

0.8415

25

0.8415

0.9688

26

0.9688

1.1094

27

1.1094

1.2807

28

1.2807

1.4985

29

1.4985

1.8298

30

1.8298

inf

3.3. Tabla de Probabilidades (Distribución Gaussiana)

Intervalo

Probabilidad

1

0,0337518325584329

2

0,0337426811562730

3

0,0332046819905547

4

0,0331640576790732

5

0,0326784640901912

6

0,0325644685476501

7

0,0331515943521773

8

0,0333901059853964

9

0,0331451432698851

10

0,0334240204848963

11

0,0330413231360093

12

0,0332397110833122

13

0,0336625984599466

14

0,0339011034647270

15

0,0336630630121833

16

0,0330399274379861

17

0,0336040781241257

18

0,0339356669801157

19

0,0330907023855498

20

0,0337095670486594

21

0,0330635588723258

22

0,0335454701022795

23

0,0332258881331427

24

0,0335369250782934

25

0,0337503631224946

26

0,0327100184780547

27

0,0334672351469967

28

0,0330807587434817

29

0,0332303835684471

30

0,0332846075073385

3.4. Tabla de Probabilidades (Distribución Laplaciana)

Intervalo

Probabilidad

1

0,0377100300973726

2

0,0227326702454530

3

0,0217259131123053

4

0,0222229878233864

5

0,0229270362270100

6

0,0242119812847763

7

0,0263549556558574

8

0,0285941028675144

9

0,0307462461052962

10

0,0337570484227637

11

0,0365037188820241

12

0,0403571313435910

13

0,0451862117224353

14

0,0506429186939219

15

0,0563058130229352

16

0,0553228822058929

17

0,0503211419188233

18

0,0456557637705647

19

0,0402505731341540

20

0,0372780002640454

21

0,0334057034895904

22

0,0311246764952672

23

0,0284478980100655

24

0,0266467112012476

25

0,0250394112701557

26

0,0228774569660483

27

0,0223608375284000

28

0,0216005210438973

29

0,0223819703834947

30

0,0373076868117103

3.5. Resultados del Test Chi-Cuadrado

Calculamos los grados de libertad con la siguiente fórmula: k=k’−1−r

Hipótesis Laplaciana:

Para este caso tenemos que k = 30−1−1 = 28.

El parámetro `r` vale 1, ya que para este caso solo hemos determinado 1 parámetro a partir de los datos experimentales: la varianza. `k’` es el número de intervalos, es decir, 30.

Nos vamos a la tabla proporcionada, a la fila 28. La columna depende del grado de exigencia que tomemos; nosotros vamos a tomar un grado de exigencia α=0.02. El valor de la tabla es 45.419.

Nuestra distribución Laplaciana calculada en la práctica era:

2.5722×104

Por tanto, podemos decir que la distribución de nuestras muestras no se ajusta a una distribución Laplaciana.

Hipótesis Gaussiana:

Para este caso tenemos que k = 30−2−1 = 27.

El parámetro `r` vale 2, ya que para este caso hemos determinado 2 parámetros a partir de los datos experimentales: la varianza y la media.

Por tanto, debemos mirar en la fila 27 de la tabla proporcionada. El grado de exigencia es el mismo que el anterior tomado α=0.02. El valor de la tabla es 44.140.

Nuestra distribución Gaussiana calculada en la práctica era:

29.8276

Con lo cual la hipótesis basada en la variable Gaussiana no es muy buena, aunque mejor que la Laplaciana.

3.6. Conclusión del Test

Podemos concluir que la hipótesis que más se aproxima, tanto gráfica como analíticamente, es la Gaussiana.


Práctica 3: Caracterización de Procesos Aleatorios

Primera Parte: Caracterización de Variables Conjuntamente Gaussianas

  • a) En el fichero gaussdim8 tiene mil realizaciones de una variable vectorial Gaussiana de dimensión 8.
  • b) Determine el vector de medias `m` y la matriz de covarianza `K` de dicha variable vectorial Gaussiana a partir de las mil realizaciones.

Matriz de Covarianza

Vector de Medias

  • c) ¿Son independientes entre sí las 8 variables?

No son independientes, pues la matriz de covarianzas tendría que ser diagonal.

  • d) Si no son independientes entre sí, encuentre una transformación lineal `A` de la variable vectorial `x` que dé lugar a otra variable aleatoria vectorial Gaussiana y cuyas variables sean independientes entre sí. Para ello, utilice la función eig de MATLAB. Dicha función, al aplicarla sobre una matriz simétrica `K`, nos devuelve una matriz `B` que contiene los autovectores de `K` y una matriz diagonal `D` que contiene los autovalores de `K`, `[B,D] = eig(K)`, verificándose que BTKB = D. Determine las medias y las varianzas de las 8 nuevas variables Gaussianas independientes.

Diagonalizamos y obtenemos los siguientes resultados para el vector de medias y matriz de covarianza.

Matriz de Covarianza Final

Vector de Media Final

Código Fuente en MATLAB:

% Primera Parte: Caracterización de variables conjuntamente Gaussianas.

% Cargamos y leemos los archivos

f1=fopen('gaussdim8','r');

s=fread(f1,'single');

% Matriz de datos (columnas = variables, filas = realizaciones de cada

% variable)

% Inicializamos matriz a cero

realizaciones=zeros(mil,8);

% Bucle que almacena por filas las realizaciones de cada variable

for i=1:mil

for j=1:8

realizaciones(i,j)=s((i-1)*8+j);

end

end

% Medias de cada variable

% Inicializamos vector de medias

media=zeros(1,8);

% Bucle que almacena en un vector (media) las medias de cada variable

for j=1:8

for i=1:mil

media(j)=media(j)+realizaciones(i,j)/mil;

end

end

% Normalizamos el vector media

media=media/mil;

% Matriz de covarianzas

% Inicializamos dicha matriz

cov=zeros(8,8);

% Bucle que calcula la covarianza y la va almacenando en cada posición de la

% matriz

for j=1:8

for i=1:8

for l=1:mil

cov(i,j)=cov(i,j)+((realizaciones(l,j)-media(j))*(realizaciones(l,i)-media(i)));

end

end

end

% Normalizamos la matriz de covarianzas

cov=cov/mil;

% Diagonalizamos la matriz de covarianza para convertir las 8 variables

% Gaussianas en independientes

diag=eig(cov);

covfinal=b'*cov*b;

mediafinal=b'*media';

Segunda Parte: Procesos Aleatorios

  • a) En el fichero signal1 se encuentran 2000 realizaciones de un muestreo en 128 instantes de tiempo de un proceso aleatorio Gaussiano x(n) discreto en el tiempo.
  • b) Determine la media mx(n) y la función de autocorrelación rx(n1, n2) de dicho proceso aleatorio a partir de las 2000 realizaciones que tiene del proceso aleatorio.

Código Fuente en MATLAB:

% Segunda Parte: Procesos aleatorios.

% Eliminamos todas las variables anteriormente creadas

clear all

% Leemos y cargamos el fichero signal1

f1=fopen('signal1','r');

s1=fread(f1,'single');

% Construimos la matriz de datos

matriz=zeros(2000,128);

for i=1:2000

for j=1:128

matriz(i,j)=s1((i-1)*128+j);

end

end

% Calculamos la media de las 2000 realizaciones de cada instante

mx=zeros(1,128);

for j=1:128

for i=1:2000

mx(j)=mx(j)+matriz(i,j);

end

end

mx=mx/2000;

% Construimos los vectores de autocorrelación para diferencia de tiempo = 0, 1, 2

for v=1:1:128

rx0(v)=(1/2000)*sum(matriz(:,v).*matriz(:,v));

if v<128

rx1(v)=(1/2000)*sum(matriz(:,v).*matriz(:,v+1));

if v<127

rx2(v)=(1/2000)*sum(matriz(:,v).*matriz(:,v+2));

end

end

end

% Representamos la función de autocorrelación para los distintos tiempos

figure;

plot(rx0)

figure;

plot(rx1)

figure;

plot(rx2);

Media mx(n)

0.0012 0.0231 0.0114 0.0071 0.0010 0.0342 0.0376 0.0435 0.0149 0.0211 0.0363

0.0139 0.0296 0.0071 0.0147 0.0454 0.0259 0.0485 0.0799 0.1255 0.1286 0.1490

0.1585 0.1296 0.1067 0.0757 0.0749 0.1019 0.1098 0.1338 0.0892 0.1108 0.0718 0.0805

0.0109 -0.0114 -0.0364 -0.0175 -0.0313 0.0062 -0.0256 -0.0348 -0.0299 -0.0177 -0.0168

-0.0231 -0.0414 -0.0314 -0.0360 -0.0203 -0.0142 -0.0300 0.0062 0.0377 0.0178 0.0122

0.0111 0.0268 0.0400 0.0535 0.0421 0.0425 0.0565 0.0663 0.0223 0.0156 0.0016

0.0286 0.0156 -0.0033 0.0085 0.0286 0.0587 0.0586 0.0878 0.0728 0.0720 0.0822

0.0452 0.0585 0.0466 0.0621 0.0847 0.0796 0.0740 0.0549 0.0537 0.0610 0.0857

0.0828 0.0788 0.0625 0.0793 0.0682 0.0664 0.0622 0.0601 0.0373 -0.0364 -0.0454

-0.0396 -0.0196 -0.0206 -0.0368 -0.0137 -0.0341 -0.0402 -0.0306 -0.0132 0.0051 0.0070

0.0167 0.0065 -0.0026 -0.0127 -0.0234 0.0004 -0.0236 -0.0209 -0.0042 -0.0449 -0.0500

-0.0677 -0.0126 -0.0456 -0.0431 -0.0593 -0.0840

¿Es razonable afirmar que es un proceso estacionario en sentido amplio?

Las medias son aproximadamente iguales y próximas a cero.

Y observando las gráficas, apreciamos que la función de autocorrelación se mantiene constante mientras la diferencia de tiempo sea igual.

Por lo tanto, podemos afirmar que es un proceso estacionario en sentido amplio.

  • c) En el fichero signal1erg se encuentra una única realización del mismo proceso aleatorio, pero del que hemos tomado ahora un muestreo en 128000 instantes de tiempo. Determine la media temporal mt y la función de autocorrelación temporal rt(k) de dicha realización. ¿Es razonable afirmar que el proceso aleatorio es ergódico en la media y en la autocorrelación?

Código en MATLAB

% Eliminamos de nuevo todas las variables para este apartado

clear all

% Leemos y cargamos el fichero signal1erg

f=fopen('signal1erg','r');

s=fread(f,'single');

mediat=0;

% Bucle que calcula la media temporal

for i=1:128000

mediat=mediat+s(i);

end

mediat=mediat/128000;

% Calculamos la autocorrelación para 256 valores

rtk=zeros(1,256);

for i=0:255

for j=1:128000-i

rtk(i+1)=rtk(i+1)+s(j)*s(j+i);

end

end

rtk=rtk/128000;

Calculamos la media temporal y obtenemos que es igual a 0.0429

Tabla de la Función de Autocorrelación

  • d) Si la pregunta anterior ha sido afirmativa, utilice la función rt(k) para determinar la densidad de potencia espectral Sx(f) del proceso aleatorio. Represente Sx(f) frente a la frecuencia en Hz, teniendo en cuenta que el proceso aleatorio corresponde a una señal muestreada a 8 kHz.

Código Fuente en MATLAB

% Transformada de Fourier de la función de densidad de potencia espectral

ft=fft(rtk,256);

% Intervalo de frecuencias

f=4000*((0:127)/128);

% Representamos la densidad de potencia espectral

plot(f,10*log10(abs(ft(1:128))));

Gráfica de Densidad de Potencia Espectral