Вы находитесь на странице: 1из 9

1

LABORATORIO 3
TRANSFORMADAS DISCRETAS
JhonatanValencia.
Universidad de las Fuerzas Armadas- ESPE
Quito-Ecuador

I.

INTRODUCCIN

En esta prctica, vamos a realizar algunos


experimentos numricos sobre transformadas
discretas usando Matlab. El objetivo fundamental
de esta prctica es conocer las diferentes
instrucciones que tiene Matlab para realizar las
diferentes ejercicios propuestos.
Al igual que ocurre en el caso continuo, el
concepto del dominio de la frecuencia es
fundamental para entender las seales discretas y el
comportamiento de los sistemas LIT. El espectro de
una seal nos ensea cmo es esa seal en el
dominio frecuencial; la respuesta en frecuencia de
un sistema nos aporta el conocimiento de cmo se
comporta ese sistema para diferentes entradas,
gracias a la perspectiva que aporta el dominio de la
frecuencia.
El software utilizado para la implementacin de
seales discretas, en esta prctica es MATLAB, que
es plataforma computacional de amplia cobertura,
incluye una interfaz grfica interactiva (SPTool) en
la que se puede analizar y manipular seales
digitales, filtros y espectros, sin necesidad de usar
programacin avanzada.

II.

DESARROLLO

TRANSFORMA DISCRETOS CON


MATLAB

Las funciones descritas a continuacin son parte del


procesamiento de seal de MATLAB.

fft: Calcula el DFT de un vector.


Parmetro de entrada: el vector de entrada x

Parmetro de salida: la DFT del entrada vector x.


Ejemplo:
t=0:0.001:0.25;
x=sin(2*pi*50*t)+sin(2*pi*120*t);
y=fft(x);
plot(abs(y));

Anlisis. Como resultado obtenemos la DFT de una


forma directa de una funcin cualquiera.

ifft: Calcula la inversa DFT de un vector.


Parmetro de entrada: el vector complejo
entrada y tener los coeficientes DFT.
Parmetro de salida: el inverso DFT de la
entrada del vector y.
Ejemplo:
w=[1:256];
y=zeros(size(w));
y(1:10)=1;
y(248:256)=1;
x=ifft(y);
plot(real(x));

Parmetro de salida: la matriz DFT n x n.


Ejemplo:
t=0:0.001:0.25;
x=sin(2*pi*50*t)+sin(2*pi*120*t);
F=dftmtx(251);
z=fftshift(y);
plot(abs(z));

Anlisis. Como resultado se obtuvo la IDFT para


cualquier seal de entrada.

fftshift: intercambia las mitades derecha e


izquierdas de un vector. Cuando se aplica a
un DFT, muestra de -(N=2) + 1 para N=2.

Parmetro de entrada: el DFT vector y.


Parmetro de salida: el DFT vector z intercambiado.
Ejemplo:
t=0:0.001:0.25;
x=sin(2*pi*50*t)+sin(2*pi*120*t);
y=fft(x);
z=fftshift(y);
plot(abs(z));

Anlisis: Se obtuvo como resultado los valores


absolutos de los valores de la matriz DFT.

fftfilt: Efecta un filtrado lineal usando el


mtodo de superposicin y aadir.
Parmetros de entrada:
-El vector h que contiene los coeficientes del
filtro. -El vector x contiene la seal de
entrada.
-La longitud n de los bloques no se
superponen en que se divide x.
Si n no se proporciona, la funcin utiliza su
propio n optimizado (recomendado).
Parmetro de salida: La seal del filtro y.
Example:

Anlisis. Se obtuvo como resultado un intercambio de


los valores de derecha a izquierda, de una funcin
discreta.

dftmtx: Genera una matriz DFT.


Parmetro de entrada: el tamao de la n
DFT.

h=[1 2 3 4 4 3 2 1];
t=0:0.05:1;
x=sin(2*pi*3*t);
y=fftfilt(h,x); plot(y);

Ejemplo.
y=1:32;
x=idct(y);
plot(x);

Anlisis. Se obtuvo el grafico del filtrado de una seal


de entrada por el mtodo de superposicin.

dct: Calcula la DCT de un vector.


Parmetro de entrada: El vector de entrada
x.
Parmetro de salida: el DCT del vector de
entrada x.
Ejemplo:

t=0:0.05:1;
x=sin(2*pi*3*t);
y=dct(x); plot(y);

Anlisis. Se obtuvo un grfico de la transformada


inversa DCT de una seal especificada.

dctmtx: Genera una matriz DCT.


Parmetro de entrada: el tamao de n DCT.
Parmetro de salida: n x n matriz DCT.
Ejemplo (parcelas las funciones de base de
primer y sexto de una longitud-8 DCT):
C=dctmtx(8);
subplot(2,1,1),
stem(C(1,:));
subplot(2,1,2),
stem(C(6,:));

Anlisis. Se obtuvo el grafico de la DCT de una seal


especfica.

idct: Calcula la inversa DCT de un vector de


coeficientes.
Parmetro de entrada: el coeficiente vector
y.
Parmetro de salida: el inverso DCT del
vector y coeficientes.

Anlisis. Se obtiene un grfico de una matriz de


coeficientes de un DCT.

CONVOLUCIN LINEAL
Hemos visto que la seal de salida y [n] de un filtro
lineal, tiempo-invariante, causal puede ser
determinado por la convolucin lineal entre la
entrada de seal x [n] y el sistema impulso
respuesta h [n]. En este experimento, se investigan
varias maneras de realizar dicha operacin usando
Matlab. Aqu trabajamos con secuencias de corta
longitud x [n] y h [n], tales como:
x = ones(1,10);
h = [1 2 3 4 5 6 7 8 9 10];
Para que el lector puede obtener el resultado
deseado algebraicamente por adelantado. Ms tarde,
comparamos los resultados de cada mtodo visto
por debajo de las secuencias ms largas. Dado x [n]
y h [n], quizs la forma ms fcil, pero no
necesariamente
la
mayora
numricamente
eficientemente, es utilizar el comando conv:
y1 = conv(x,h);
Cuyos argumentos de entrada pueden ser
cambiadas, ya que la operacin de convolucin es
simtrica. Para un general filtro digital con funcin
de transferencia

Con a0 diferente de 0, uno puede determinar la


salida y [n] a la entrada x [n] usando el filtro de
comando. De este comando, los argumentos de
entrada son dos vectores, que contiene el numerador
y el denominador coeficientes de H(z) y la seal de
entrada. En este experimento, donde se da el
impulso respuesta h [n], podemos usar el comando
filtro suponiendo que A(z) = 1 y asociando h [n]
con el vector del numerador-coeficientes, tales
como:
y2 = filter(h,1,x);
Es interesante notar que el comando filtro las
fuerzas de la longitud del vector de salida para ser
igual a la de la entrada. Por lo tanto, si uno quiere
determinar todas las muestras de distinto de cero y
[n], nosotros debemos forzar x [n] para tener la
longitud deseada salida por la entrada original con
el adecuado nmero de ceros de relleno:

xaux = [x zeros(1,length(h)-1)];
y3 = filter(h,1,xaux);
Como se mencion en clase, uno puede
implementar la operacin de filtrado digital
mediante el dominio de frecuencia utilizando la
FFT. Para evitar la convolucin circular, uno debe
primero cojn x [n] y vectores h [n] con el adecuado
nmero de ceros. La manera ms fcil de
determinar estos nmero de ceros es recordar que la
longitud de la seal de salida deseada debe ser la
longitud de la convolucin lineal de x [n] y h [n]; es
decir: length(y) = length(x) + length(h) - 1. Por lo
tanto, debemos garantizar que las FFTs de x [n] y
[n] h se determinan con esta longitud, interpretado
por el siguiente script:
length_y = length(x) + length(h) - 1;
X = fft(x,length_y);
H = fft(h,length_y);
Y4 = X.*H;
y4 = ifft(Y4)

En las versiones antiguas de Matlab, errores


numricos que se acumulan durante el proceso de
filtrado, gen-salud cuidado complejo salida
secuencia, incluso cuando x h [n] [n] y era seales
reales. En estos casos, uno fue obligado a usar el
comando real para guardar slo la parte real del
resultado. Las versiones actuales de Matlab
deshacerse de la parte imaginaria espuria de y4
automticamente.
Como
se
mencion
anteriormente, este experimento se bas en corto x
[n] y h [n] seales para permitir al lector a seguir de
cerca todos los cmputos realizan en Matlab. En la
prctica, si las longitudes de estas seales son
su_ciently corto (ambos de ellos alrededor de 100
coeficientes), es la manera ms simple y rpida para
llevar a cabo la fltro digital con el comando conv.
Si, sin embargo, ambas seales de ser demasiado
largos, entonces el dominio de la frecuencia se
vuelve muy ventajoso en trminos de Cmputos
numricos. En el caso donde slo una de las seales
tiene una larga duracin, puede aplicarse el mtodo
de superposicin y aadir descrito en clase como.
y5 = fftfilt(h,xaux);
Donde el tamao FFT y la segmentacin de x [n]
son elegidos automticamente para garantizar la
ejecucin de eficiente.

Asignacin.
Asignacin.
El estudiante se anima a experimentar con todas las
formas arriba para realizar el filtrado digital con
distintas seales de entrada y las respuestas de
impulsos. En particular, se puede aumentar la
longitud de estas seales, a la orden de miles de
muestras, para verificar cmo el dominio de la
frecuencia se convierte en una herramienta
importante en varias situaciones prcticas.
DOMINIO DE TIEMPO Y
FRECUENCIA
Permtanos ahora emplean el dominio de la
frecuencia para analizar el contenido de una
determinada seal x [n] compuesta de 10Hz
sinusoidal corrompida por el ruido, con Fs = 200
muestras/s para un intervalo de 1 s, como
determinado por
fs = 200; f = 10;
time = 0:1/fs:(1-1/fs);
k = 0;
x = sin(2*pi*f.*time) + k*randn(1,fs);
figure(1);
plot(time,x);

Ejemplos de la trama de x [n] daado con diferentes


niveles de ruido. Utilizar k = 0, k = 0:5, k = 1:5 y k
= 3. Adems, se muestra el valor absoluto de la FFT
correspondiente para los valores anteriores de k.
utilizando los grficos anteriores, indicar para qu
valores de k el componente sinusoidal se observa
claramente en el dominio del tiempo. Ahora,
realizar el mismo anlisis en el dominio de la
frecuencia. Una forma de lidiar con casos de ruido
grande es estimar el espectro para varios segmentos
de tiempo diferente de x [n] y promedie los
resultados. De esta manera, los picos sinusoidal de
10 Hz estn presentes en todos FFTs, mientras que
los picos de ruido al azar se encuentran en la
diferente FFTs. Por lo tanto, la operacin promedio
tiende a preservar los picos FFT correspondientes a
los 10 Hz sinusoidal mientras atenuando los picos
debido al componente de ruido. Por lo tanto, repita
este experimento una gran cantidad k _ 3 del
componente de ruido. Promedio del valor absoluto
de la FFT resultados para M repeticiones del
experimento e identificar el componente sinusoidal
en el espectro resultante. Determinar un buen valor
de M para diferente los valores de k.
fs = 200; f = 10;
time = 0:1/fs:(1-1/fs);
k = 0;
x = sin(2*pi*f.*time) + k*randn(1,fs);
figure(1);
plot(time,x);
K=0

Analisis. Se obtuvo un grfico con un n nmero de


muestras de una seal sinusoidal que presenta un ruido.

Donde el parmetro k controla la cantidad de ruido


presente en x [n].

4.1

K= 0.5

EJERCICIOS ADICIONALES
1. Convolucion lineal usando matlab.
Utilice el comando fft para determinar la
convolucin lineal entre dos seales dadas x
[n] y h [n].
K= 1.5

Las seales que vamos a usar son


x = ones(1,5);
h = [1 2 3 4 5];
Usamos el comando length para hallar la
longitud de las dos seales, hallamos sus
correspondientes FFT las multiplicamos y
procedemos a graficar la IFFT del producto de
ellas, teniendo:

K=3

Para K mayores de 3 : K=10

Comparar la funcin que haya creado en el


punto anterior con los comandos conv y
filtro con respecto a la seal de salida y el
nmero total de operaciones necesarias
para convolucin las dos seales de orden N
y K, respectivamente.

Con el comando conv al igual que se dijo en el


experimento 1 obtendremos la misma seal.

Anlisis. Se obtiene como resultados, que a una seal tan


sencilla como la senoidal y para los valores ms altos de k, so
observa que se presenta una seal con mas ruido.

Con el comando filter tendremos la


convolucin de las cinco primeras muestras ya
que este proceso requiere un paso adicional
para cumplir con N+M-1
En este caso estamos perdiendo cuatro muestras
x = ones(1,5);
h = [1 2 3 4 5];
y4 = filter(h,1,x);
stem(y4);

Verificar los resultados experimentalmente


(usando el comando de los fracasos) para
valores generales de N y K.
x = ones(1,5);
h = [1 2 3 4 5];
y4 = filter([h zeros(1,4)],1,[x zeros(1,4)]);
stem(y4);

Repetir tem anterior teniendo en cuenta


nicamente los valores de N y K tal que (N
+ K - 1) es una potencia de dos.
x = ones(1,5);
h = [1 2 3 4];
y4 = filter([h zeros(1,4)],1,[x zeros(1,3)]);
stem(y4);

Anlisis. Como podemos ver N tiene un valor de


5 y K un valor de 4, dando como resultado una
convolucin igual a 8. De forma podemos
comprobar mediante la herramienta de Matlab
una convolucin de seales.

2. Dada la seal

Entonces:
Para l = 100, calcular la DFT de x [n] con 64
muestras. Se puede observar la presencia
de ambas sinusoides?
Como podemos observar si se logran
distinguir seales sinusoidales. Al aumentar el
muestreo podremos ver con un poco ms de
claridad pero teniendo en cuenta que la seal
no va a variar en la forma que se presenta con
64 muestras.

Aumentar la longitud de la DFT a 128


muestras de relleno 64 ceros a las muestras
originales de x [n]. Comentar los resultados.
Se puede observar que presenta una forma
similar a la grfica Fig. Pero en esta
aumentamos el muestreo a 128 e igual el
aumento de 0 nos presenta como una sobre
posicin de muestras.

Calcular la DFT de x [n] usando 128


muestras. Usted ahora puede observar la
presencia de ambas sinusoides.
Ya se mencion en el literal 1 que al
aumentar el muestro observaremos la misma
seal pero con intervalos ms pequeos
debido al nmero de veces que se muestrea.

Aumentar la longitud de la DFT de x [n] por


128 muestras de relleno 128 ceros a las
muestras de x [n]. Repita para un acolchado
de 384 ceros. Comentar los resultados.
Se puede observar que presenta una forma
similar a la grfica Fig., pero en esta
aumentamos el muestreo a 128 e igual el
aumento de 0 nos presenta como una sobre
posicin de muestras.

Anlisis. Al calcular la DFT de una forma


ms prctica y mediante un programa de

computadora en este caso la herramienta de


Matlab nos podemos dar cuenta de que
resulta en cierta forma ms fcil desarrollar
este trabajo con muestras mucho ms grandes

CONCLUSIONES
o Se puedo observar que la manera ms fcil de
calcular la convolucin es con el comando conv
ya que este no requiere pasos previos sino solo la
ejecutacin del comando.

o Se pudo observar que con el comando length se


puede hallar las longitudes de cada una de las
diferentes secuencias para el clculo de la
convolucin con FFT.
o Mientras mayor tenemos en la seal se puede
observar que esta tiene mayor distorsin y no
asemejarse a una sinusoidal como se observa en
este artculo.
o Se determin que si el nmero de ceros es mayor
que los polos, la magnitud de la funcin de
transferencia tiene a ser mayor.
o Con el comando filter se puede calcular la
convolucin de dos secuencias pero se tiene que
tener en cuentra que este comando requiere un paso
previo para cumplir con N+M-1.
I. BIBLIOGRAFA
Diniz P. ( 2012).Digital signal processing.
Segunda Edicin. 12-10-2012.
http://www.gts.tsc.uvigo.es/ssd/practicas/pract
ica4.pdf
http://personal.us.es/contreras/practica4.pdf
http://www.sc.ehu.es/sbweb/energiasrenovables/MATLAB/datos/fourier/fourier_1.
html

Вам также может понравиться