Está en la página 1de 9

Sistemas de Comunicaciones Prctica 2. Parte B.

Seales Aleatorias

Curso 2011/2012 1. Objetivos

El objetivo de esta prctica es probar los conceptos adquiridos para el estudio estadstico de seales aleatorias. Se analizarn distintas seales aleatorias calculando estadsticos de primer y segundo orden y comprobando su estacionariedad y ergodicidad. Tambin se estudiar cmo se transforman los estadsticos de una seal al atravesar un sistema lineal, o cmo son los estadsticos de una seal suma de seales correladas.

2.
2.1.

Anlisis estadstico de una seal aleatoria


Preliminares

Las rutinas de MATLAB encargadas de generar seales aleatorias discretas en esta prctica almacenan en una matriz un conjunto de realizaciones de dicha seal de una duracin determinada. Por ejemplo, el siguiente comando
>> X= WGRandomSignal (10 ,8);

genera una matriz X que tiene 10 las, cada una de las cuales contiene una realizacin de la seal desde la muestra 1 a la muestra 8. Para acceder a la realizacin 3 de la seal almacenada en la matriz X hay que usar el siguiente comando
>> X (3 ,:)

que devuelve un vector con la la 3. Si se desea acceder a los valores que toma la seal almacenada en la matriz X en un instante 5 en sus distintas realizaciones, o lo que es lo mismo, a las distintas realizaciones de la variable aleatoria X[5], hay que usar el comando
>> X (: ,5)

que devuelve un vector con la columna 5.


2.2. Estima de estadsticos de una variable aleatoria

En este apartado se va a disear y probar una funcin que estima la media y el valor cuadrtico medio de cualquiera de las variables de una seal aleatoria. Completa la funcin UniVarStat que aparece en el listado 1 para que calcule la media y el valor cuadrtico medio de una la variable aleatoria X[n1]. Para lograrlo usa la funcin de MATLAB mean que permite calcular el promedio de cualquier vector la o columna.
Cuestin 2.1.

Listado 1: UniVarStat.m
% % UniVarStat . m % Funcin que calcula la media y el valor cuadrtico medio correspondiente a un instante de una % seal aleatoria . % % La cabecera de la funcin es : % [mX , X2 ]= UniVarStat (X , n1 ) % donde las entradas son : % X matriz NxL en la que cada fila es una realizacin de duracin L de la seal aleatoria % n1 instante en el que se quiere calcular la media y el valor cuadrtico medio (1 <= n1 <= L ) % y las salidas son : % mX media de la variable aleatoria X[ n1 ] % X2 valor cuadrtico medio de la variable aleatoria X[ n1 ] % function [mX , X2 ]= UniVarStat (X , n1 ) % Media de X[ n1 ] mX = AAAAAAA ; % Valor cuadrtico medio de X[ n1 ] X2 = AAAAAAA ;

Para probar el funcionamiento de UniVarStat usaremos la funcin TestUniVarStat, que aparece en el listado 2. Esta funcin genera N realizaciones de duracin L de una seal aleatoria gaussiana y blanca. Despus, usando la funcin UniVarStat, calcula la media y el valor cuadrtico medio de la variable X[n1], y mediante la funcin Histograma calcula el histograma de X[n1]. Por ltimo, representa la realizacin r de la seal mediante la funcin RealizaPlot, el histograma en un grco de barras mediante la funcin BarPlot y anota sobre la gura los valores de la media y el valor cuadrtico medio calculado mediante la funcin Annotate.
Cuestin 2.2.

Completa la funcin TestUniVarStat que aparece en el listado 2 para que calcule el histograma de la variable X[n1] y represente la realizacin xr[n].
Listado 2: TestUniVarStat.m

% % TestUniVarStat .m % Funcin para probar la rutina UniVarStat generarando una seal aleatoria blanca y gaussiana , y % representando la distribucin y los estadsticos de cualquiera de sus variables aleatorias . % % La cabecera es : % TestUniVarStat (N ,L ,n1 ,r , Delta ) % donde las entradas son : % N nmero de realizaciones a generar de la seal aleatoria correlada % L longitud de dichas realizaciones % n1 instante de tiempo de la variable a analizar % r ndice de la realizacin a representar % Delta tamao del intervalo del histograma % function TestUniVarStat (N ,L ,n1 ,r , Delta ) % Etiquetas de la variable y de la realizacin X1Label =[ 'X[ ', num2str ( n1 ), '] ']; xrLabel =[ 'x_ { ', num2str (r ), '}[ n] ']; % Posicin de los cuadros de texto TextBoxPos =[0.625 ,0.4 ,0.18 ,0.04;0.625 ,0.35 ,0.18 ,0.045]; % Inicio de figura IniFig2 (); % Generacin N realizaciones de longitud L de la seal blanca y gaussiana X[n] X= WGRandomSignal (N , L ); % Clculo de la media y el valor cuadrtico medio de la variable aleatoria X[ n1 ] [mX , X2 ]= UniVarStat (X , n1 ); % Clculo histograma de la variable aleatoria X[ n1 ] [fr , xk ]= Histograma ( AAAAAAA , Delta );

% Representacin de la realizacin r subplot (2 ,1 ,1); RealizaPlot ( AAAAAAA , xrLabel ); % Representacin en grfico de barras del histograma de la variable aleatoria X [ n1 ] subplot (2 ,1 ,2); BarPlot ( xk ,fr , Delta , X1Label ); % Anotacin la media y el valor cuadrtico medio de la variable aleatoria X[ n1 ] en sendos cuadros % de texto Annotate ( TextBoxPos (1 ,:) ,[ 'E[ ', X1Label , ']= ', num2str (mX , ' %2.2 f ' )]); Annotate ( TextBoxPos (2 ,:) ,[ 'E [( ', X1Label , ' )^2]= ', num2str (X2 , ' %2.2 f ' )]);

Ejecuta la funcin TestUniVarStat para un nmero elevado de realizaciones de una duracin relativamente corta (por ejemplo, N=100000 y L=50), un valor del intervalo del histograma Delta=0.25, un valor cualquiera de n1 entre 1 y L y un valor cualquiera de r entre 1 y N. Observa que la representacin del histograma de X[n1] coincide aproximadamente con la de una variable gaussiana. Prueba con varios valores de n1 y, a tenor de los resultados estimados, justica que la seal es estacionaria en cuanto a la media y al valor cuadrtico medio.
Cuestin 2.3.

2.3.

Estima de estadsticos de dos variables aleatorias

En este apartado se va a disear y probar una funcin que estima la correlacin entre cualquier par de variables de una seal aleatoria. Completa la funcin BidimVarStat que aparece en el listado 1 para que calcule la correlacin de seal X en los instantes n1 y n2. Para lograrlo usa la funcin de MATLAB mean que permite calcular el promedio de cualquier vector la o columna.
Cuestin 2.4.

Listado 3: BidimVarStat.m
% % BidimVarStat .m % Funcin que calcula la correlacin correspondiente a un par de instantes de una seal aleatoria . % % La cabecera de la funcin es : % rX12 = BidimVarStat (X ,n1 , n2 ) % donde las entradas son : % X matriz NxL en la que cada fila es una realizacin de duracin L de la seal aleatoria % n1 , n2 instantes en los que se quiere calcular la correlacin (1 <= n1 <= L ,1 <= n2 <= L) % y las salidas son : % rX12 correlacin de las variablea aleatorias X[ n1 ] y X [ n2 ] % function rX12 = BidimVarStat (X ,n1 , n2 ) rX12 = AAAAAAA ;

Para probar el funcionamiento de BidimVarStat usaremos la funcin TestBidimVarStat, que aparece en el listado 4. Esta funcin genera N realizaciones de duracin L de una seal aleatoria Y[n] de variables aleatorias gaussianas, estacionaria y cuya autocorrelacin, representada en la gura 1, es
1 RY [n] = [n] + ([n 1] + [n + 1]). 2 Despus, usando la funcin BidimVarStat, la funcin TestBidimVarStat estima la correlacin entre las variables Y[n1] y Y[n2]. Adems calcula el histograma bidimensional de Y[n1] y Y[n2]

RY [n]
1
...

0,5 4 3 2 1 0 1 2 3 4

...

Figura 1

: Autocorrelacin de la seal aleatoria Y[n]

mediante la funcin Histograma3D. Adems, representa la realizacin r mediante la funcin RealizaPlot, el histograma en un grco de barras 3D mediante la funcin Bar3DPlot y la nube de puntos de las variables Y[n1] y Y[n2] mediante la funcin ScatterPlot. Por ltimo, anota sobre la gura el valor estimado de la correlacin mediante la funcin Annotate. Completa la funcin TestBidimVarStat que aparece en el listado 4 para que calcule el histograma y represente la nube de puntos de las variables Y[n1] y Y[n2].
Cuestin 2.5.

Listado 4: TestBidimVarStat.m
% % TestBidimVarStat .m % Funcin para probar la rutina BidimVarStat generarando una seal aleatoria de variables % gaussianas correladas y representando la distribucin y los estadsticos de dos de sus % variables aleatorias . % % La cabecera es : % TestBidimVarStat (N ,L ,n1 ,n2 ,r , Delta ) % donde las entradas son : % N nmero de realizaciones a generar de la seal aleatoria correlada % L longitud de dichas realizaciones % n1 , n2 instantes de tiempo de las variables a analizar % r ndice de la realizacin a representar % Delta tamao del intervalo del histograma % function TestBidimVarStat (N ,L ,n1 ,n2 ,r , Delta ) % Etiquetas de las variables y de la realizacin Y1Label =[ 'Y[ ', num2str ( n1 ), '] ']; Y2Label =[ 'Y[ ', num2str ( n2 ), '] ']; yrLabel =[ 'y_ { ', num2str (r) , ' }[ n] ']; % Posicin del cuadro de texto y de las grficas TextBoxPos =[0.67 ,0.3 ,0.25 ,0.04]; PlotPos =[0.05 ,0.8 ,0.9 ,0.15;0.25 ,0.45 ,0.6 ,0.25;0.35 ,0.06 ,0.3 ,0.3]; % Inicio de figura IniFig2 (); % Generacin de la seal aleatoria Y Y= CorrRandomSignal (N ,L ); % Clculo de la correlacin de las variables aleatorias Y[ n1 ] y Y[ n2 ] rY12 = BidimVarStat (Y ,n1 , n2 ); % Clculo del histograma bidimensional de las variables aleatorias Y[ n1 ] y Y[ n2 ] [fr ,xk , yk ]= Histograma3D ( AAAAAAA , AAAAAAA , Delta ); % Representacin de la realizacin r subplot ( ' position ', PlotPos (1 ,:)); RealizaPlot ( AAAAAAA , yrLabel ); % Representacin en grfico de barras 3D del histograma de las variables aleatorias Y[ n1 ] y Y[ n2 ] subplot ( ' position ', PlotPos (2 ,:)); Bar3DPlot (xk ,yk ,fr , Delta , Y1Label , Y2Label ); % Diagrama de dispersin ( nube de puntos ) de las variables aleatorias Y[ n1 ] y Y[ n2 ] subplot ( ' position ', PlotPos (3 ,:)); ScatterPlot ( AAAAAAA , AAAAAAA , Y1Label , Y2Label ); % Anotacin la correlacin de las variables aleatorias Y[ n1 ] y Y [ n2 ] en un cuadro de texto Annotate ( TextBoxPos ,[ 'E[ ', Y1Label , Y2Label , ']= ', num2str ( rY12 , ' %2.2 f ' )]);

Ejecuta la funcin TestBidimVarStat para un nmero elevado de realizaciones de una duracin relativamente corta (por ejemplo, N=100000 y L=50), un valor del intervalo del histograma Delta=0.25, un valor cualquiera de r entre 1 y N y los valores de n1 y n2 que aparecen en la tabla 1. Explica las diferencias y semejanzas que encuentras en los distintos casos, tanto en el histograma o grco de dispersin como en la correlacin y justifcalas basndote en la funcin de autocorrelacin RY [n] que tiene la seal.
Cuestin 2.6.

Prueba
n1 n2

1 2 3 4 25 25 26 25 25 26 27 27

Tabla 1

: Tabla de instantes n1 y n2 de cada prueba

2.4.

Estima de la autocorrelacin y la densidad espectral de potencia

En este apartado se va a disear y probar una funcin que estima la autocorrelacin de una seal aleatoria. Completa la funcin RandomAutocor que aparece en el listado 5 para que calcule la autocorrelacin de seal X en los instantes n1 y n1+n. Para lograrlo usa la funcin de MATLAB mean que permite calcular el promedio de cualquier vector la o columna.
Cuestin 2.7.

Listado 5: RandomAutocor.m
% % RandomAutocor .m % Funcin que calcula la autocorrelacin de una seal aleatoria . % % La cabecera es : % [Rx ,n ]= RandomAutocor (X ,n1 , dmax ) % donde las entradas son : % X matriz de realizaciones de la seal aleatoria (N x L) % n1 ndice temporal de referencia para el clculo de la autocorrrelacin Rx [n1 , n1 +n] % dmax valor absoluto mximo del retardo n para el clculo de la autocorrelacin % y la salida es : % n vector de retardos entre - dmax y dmax % Rx vector de valores de la autocorrelacin Rx [ n1 , n1 +n], con n entre - dmax y dmax . % function [Rx ,n ]= RandomAutocor (X ,n1 , dmax ) % Comprobacin de si hay muestras suficientes [N , L ]= size (X ); if (( n1 - dmax ) <1)||(( n1 + dmax ) >L) disp ([ ' Error en RandomAutocor . Elige otros valores de n1 y dmax ' ,... ' porque no hay muestras suficientes en la seal de entrada ' ]); end ; % Clculo de la autocorrelacin n =( - dmax : dmax ); Rx = zeros (1 , length ( n )); for k =1: length (n ) Rx (k )= AAAAAAAAAAAAAA ; end ;

Para probar el funcionamiento de RandomAutocor usaremos la funcin TestRandomAutocor, que aparece en el listado 6. Esta funcin genera N realizaciones de duracin L de la misma seal 5

aleatoria Y[n] del subapartado anterior. Despus, usando la funcin RandomAutocor, estima la autocorrelacin en los instantes n1 y n1+n. Tambin calcula la densidad espectral de potencia aplicando la transformada de Fourier a la autocorrelacin mediante la funcin SpectralDensity. Por ltimo, representa la autocorrelacin y la densidad espectral de potencia mediante las funciones AutocorPlot y SpectralDensityPlot.
Cuestin 2.8.

Ejecuta la funcin TestRandomAutocor para un nmero elevado de realizaciones de una duracin relativamente corta (N=100000 y L=50), un desplazamiento mximo dmax=15 y para varios valores de n1. Comprueba que la autocorrelacin de la seal obtenida coincide con la de la gura 1 y justica que la seal es estacionaria en cuanto a la autocorrelacin.
Listado 6: TestRandomAutocor.m

% % TestRandomAutocor .m % Funcin para probar la rutina RandomAutocor generando una seal aleatoria con variables gaussia % nas correladas , calculando su autocorrelacin y su densidad espectral y representndola . % % La cabecera es : % TestRandomAutocor (N ,L , n1 , dmax ) % donde las entradas son : % N nmero de realizaciones a generar de la seal aleatoria correlada % L longitud de dichas realizaciones % n1 instante de tiempo de referencia para el clculo de la autocorrelacin % dmax retardo mximo del clculo de la autocorrelacin % function TestRandomAutocor (N ,L , n1 , dmax ) % Posicin del cuadro de texto TextBoxPos =[0.625 ,0.35 ,0.25 ,0.04]; % Inicio de la figura IniFig2 (); % Generacin de la seal aleatoria Y[n] Y= CorrRandomSignal (N ,L ); % Clculo de la autocorrelacin Ry [n1 , n1 +n ] [Ry ,n ]= RandomAutocor (Y ,n1 , dmax ); % Representacin de la autocorrelacin subplot (2 ,1 ,1); AutocorPlot (n ,Ry , 'Y '); % Clculo de la densidad espectral [Sy ,f ]= SpectralDensity (Ry ,n ,1024); % Representacin de la densidad espectral subplot (2 ,1 ,2); SpectralDensityPlot (f ,Sy , 'Y ');

3.

Seales aleatorias y sistemas lineales

En este apartado se va a analizar los estadsticos de una seal aleatoria que procede de otra seal aleatoria que atraviesa un sistema lineal e invariante con el tiempo (LTI), como se muestra en la gura 2. En primer lugar se va a estudiar el paso de una seal aleatoria X[n] blanca y de variables con distribucin uniforme por un sistema cuya respuesta al impulso es
h[n] =
1 ([n] 2

+ [n 1])

(1)

X[n] Sistema LTI Y [n] h[n]


Figura 2

: Seal aleatoria que atraviesa un sistema LTI

como se muestra en la gura 3. Por tanto la seal de salida se puede expresar mediante la ecuacin en diferencias 1 Y [n] = 2 (X[n] + X[n 1]). (2) El anlisis estadstico de la seal de entrada y salida se realizar mediante el script LTI1, cuyo cdigo se presenta en el listado 7. Este programa genera una seal X blanca y de variables aleatorias uniformes mediante la funcin WURandomSignal y calcula la correspondiente seal de salida Y mediante la funcin FiltRandomSignal, que acta como un sistema LTI. La respuesta impulsiva del sistema LTI viene dada por el vector h, que contiene las primeras muestras de la respuesta impulsiva, desde el instante 0 hasta que se extingue.
h[n]
1/ 2
... ...

2
Figura 3

: Respuesta al impulso h[n] del sistema LTI


Listado 7: LTI1.m

% LTI1 . m % Script que genera una seal aleatoria blanca y de variables con distribucin uniforme , la filtra % y calcula diversos estadsticos de ambas . % % Inicio clear all ; % % Parmetros % % Nmero de realizaciones y longitud , Instantes n1 y n2 y realizacin r N =100000; L =50; n1 =25; n2 =26; r =10; % Intervalo del histograma , retardo mximo de la autocorrelacin Delta =0.25; dmax =15; % Respuesta al impulso h= ones (1 ,2)/ sqrt (2); % % Seal de entrada % % Generacin de N realizaciones de longitud L X= WURandomSignal (N , L ); % Anlisis RandomSignalAnalysis (X ,r , n1 ,n2 , Delta , dmax , 'X '); % % Seal de salida % Y= FiltRandomSignal (h ,X ); % Anlisis RandomSignalAnalysis (Y ,r , n1 ,n2 , Delta , dmax , 'Y ');

Tanto la seal de entrada X[n] como la de salida Y[n] se analizarn mediante la funcin RandomSignalAnalysis, que representa una de sus realizaciones, calcula y representa estadsticos y distribuciones de una y dos variables aleatorias (X[n1] y X[n2]) y calcula y representa su autocorrelacin y densidad espectral de potencia usando las funciones desarrolladas en el apartado 2. Sabiendo que la autocorrelacin de la seal de entrada X[n] es RX [n] = [n] 1 y la respuesta al impulso del sistema LTI es h[n] = 2 ([n] + [n 1]), calcula tericamente la autocorrelacin RY [n] y la densidad espectral de potencia SY (f ) de la seal de salida.
Cuestin 2.9.

Ejecuta el script LTI1 y comprueba que los resultados obtenidos en respuesta a la cuestin anterior son correctos. Adems, explica por qu la distribucin de la variable Y[n1] es triangular.
Cuestin 2.10.

Crea un nuevo script LTI1b que sea una versin ligeramente modicada de LTI1b de modo que la respuesta al impulso del sistema LTI sea tenga una duracin M y amplitud 1 , como se muestra en la gura 4, y ejectalo para M = 10. Calcula la nueva M versin de la ecuacin en diferencias (2) para esta respuesta al impulso. Explica cmo afecta este cambio a la realizacin de la seal de salida, y relacinalo con los cambios que sufre la autocorrelacin Ry[n] y la densidad espectral de potencia Sy(f'). Explica tambin por qu la distribucin de la variable Y[n1] se aproxima mucho a la de una variable gaussiana.
Cuestin 2.11.

h[n]
1/ M
...

...
0 1 2 3

...

M-2 M-1

M M+1 n

Figura 4

: Respuesta al impulso h[n] del sistema LTI

4.

Ergodicidad

En este apartado se va a comprobar que las seales usadas en el apartado anterior son seales ergdicas. El anlisis temporal de las seales se va a realizar mediante el script LTIErg, similar a LTI1.m, pero con dos cambios signicativos. Por un lado, genera seales aleatorias con pocas realizaciones (N=50) pero de gran longitud (L=100000), para poder obtener promedios temporales ms precisos. Por otro lado se ha sustituido la funcin RandomSignalAnalysis por la funcin RealizaAnalysis, que calcula la autocorrelacin determinista (usando promedios temporales) y la correspondiente densidad espectral de potencia de una seal determinista (o realizacin de una seal aleatoria) y las representa grcamente.
Listado 8: LTIErg.m
% % % % % % LTIErg .m Script que genera unas realizaciones de gran longitud de una seal aleatoria blanca y de variables con distribucin uniforme , la filtra y calcula la autocorrelacin determinista y la densidad espectral de potencia de cualquiera de sus realizaciones comprobar que la seal es ergdica .

% Inicio clear all ; % % Parmetros % % Nmero de realizaciones , longitud y realizacin a analizar (1 <=r <= N) N =50; L =200000; r =10; % Etiquetas de las realizaciones xrLabel =[ ' x_ { ', num2str (r ), '} ']; yrLabel =[ 'y_ { ', num2str (r ), '} ']; % Retardo mximo de la autocorrelacin dmax =15; % Respuesta al impulso h= ones (1 ,2)/ sqrt (2); % % Seal de entrada % X= WURandomSignal (N , L ); % Anlisis temporal de la realizacin r RealizaAnalysis ( AAAAAAA ,dmax , xrLabel ); % % Seal de salida % Y= FiltRandomSignal (h ,X ); % Anlisis temporal de la realizacin r RealizaAnalysis ( AAAAAAA ,dmax , yrLabel );

Completa la funcin LTIErg para que la funcin RealizaAnalysis analice la realizacin r de las seales aleatorias X[n] e Y[n]. Una vez completada, ejectala para varios valores de r y justica porque ambas seales son ergdicas.
Cuestin 2.12.

5.

Suma de seales aleatorias (opcional)

En este apartado se analizar la suma de dos seales correladas. Para lograrlo crea una nueva versin del script LTI1 que se llame LTI2, y que adems de generar las seales aleatorias X[n] e Y[n], genere la seal Z[n] suma de las dos anteriores y sea analizada mediante la funcin RandomSignalAnalysis. Calcula tericamente la autocorrelacin de la seal Z[n] a partir de las autocorrelaciones de X[n] y Y[n]. Ten en cuenta que las ambas seales estn correladas y que para calcular la correlacin cruzada debes hacer uso de la ecuacin (2). Despus ejecuta LTI2 y comprueba que la autocorrelacin obtenida coincide con la calculada tericamente.
Cuestin 2.13.