Sunteți pe pagina 1din 18

Seales discretas

Muestreo
Consiste en tomar puntos de una seal, separados por un cierto periodo de muestreo. De este modo se puede obtener una seal discreta en vez de una continua.
Ts = 0.1 f s = 10 f (t ) : seal continua x(n) : seal discreta

x(n) = f (n Ts )

Muestreo ideal
La seal es multiplicada por un tren de impulsos.

f (t )

D(t )

f muestr (t )

Ts

Espectro de la seal muestreada


El espectro de la seal original es : F ( ) = ( f (t ) ) Fmuestr ( ) = ( f (t ) D(t ) )
Fmuestr ( ) = f (t ) (t nTs ) n = 1 jn0t 2 con 0 = Fmuestr ( ) = f (t ) e Ts n = Ts

1 f (t )e jn0t Fmuestr ( ) = Ts n = 1 Fmuestr ( ) = F ( n0 ) Ts n =

Teorema del Muestreo


1 Fmuestr ( ) = F ( n0 ) para Ts n = 1 Fmuestr ( f ) = F ( f nf s ) para f Ts n =

f (t )

f muestr (t )

fs

fs

fs

f muestr (t )
-fs/2 fs/2

Teorema del muestreo


f muestr (t )
-fs/2 fs/2

El espectro de la seal muestreada se obtiene sumando varios espectros de la seal original que estn desplazados Si la seal original contiene frecuencias mayores a fs/2, se va a producir un traslape (aliasing) al sumar los espectros. Esto va a impedir recuperar la seal original.

Teorema del Muestreo


Una seal se puede muestrear y luego reconstruir nicamente y sin sufrir alteraciones si su espectro est entre fs/2 y fs/2

fs fM < 2
Mayor frecuencia contenida en la seal Frecuencia o tasa de muestreo

Filtros discretos lineales


FIR: la salida es una combinacin lineal (una suma) de la entrada actual y las anteriores. Si el filtro es no causal, tambin pueden entrar a la suma entradas posteriores a la actual. Ejemplo:

y (n) = 3 x(n) + 3 x(n 1) + 2 x(n 2) + 2 x(n 3) + x(n 4)


n-4 n-3 n-2 n-1 n

4 *1

1 *2

-2 *2

2 *3

-3 *3 + -27

-5

-2

h(n) = {3,3,2,2,1,0,0,...} h( z ) = 3 + 3 z 1 + 2 z 2 + 2 z 3 + z 4
y

n-4

n-3

n-2

n-1

Filtros discretos lineales


IR: La salida es una combinacin lineal de la entrada actual, entradas anteriores (y futuras) y salidas anteriores. Requieren condiciones iniciales. Ejemplo:
y (n) 6 y (n 1) 5 y (n 2) = 3 x(n) + 3 x(n 1) + 2 x(n 2) + 2 x(n 3) + x(n 4)

y (n) = 6 y (n 1) + 5 y (n 2) + 3 x(n) + 3 x(n 1) + 2 x(n 2) + 2 x(n 3) + x(n 4)


n-4 n-3 n-2 n-1 n

4 *1

1 *2

-2 *2

2 *3

-3 *3

-5

-2

y ( z ) 3 + 3z 1 + 2 z 2 + 2 z 3 + z 4 = h( z ) = 1 6 z 1 5 z 2 x( z )
+ *5 2
n-4 n-3 n-2

*6 -2
n-1

-29
n

DFT, FFT
DFT: Transformada discreta de Fourier: Nace de hacer la integral numricamente. Tambin hay una DFT inversa.

F ( ) =

t =

f (t )e

j t

1 dt ; f (t ) = 2
N 1 k =0

F ( )e jt d
j 2 N

X (k ) = x(n)W kn ; x(n) = X (k )W kn con W = e


n =0

N 1

Para k=0..N-1

Para k=0..N-1

FFT: Algoritmo para calcular la DFT rpidamente (aprovecha mejor los valores ya calculados). Requiere que el nmero de puntos sea potencia de 2. Si no se cumple esto, se deben agregar ceros para que se cumpla.

DFT, FFT
Sea WN = e
j

2 N

=>

1 de un ngulo de - 360 (N = 4 90 ) N
kn

X(k) = x(n)WN
n =0

N -1

Separamos en n pares e impares : +

X(k) =

n pares

x(n)W

kn

n impares

x(n)W

kn

N pares = {0,2,..., N 2} n = 2r r 0,1,..., 1 2 N impares = {1,3,..., N 1} n = 2r + 1 r 0,1,..., 1 2 X(k) = x(2r)WN


r =0 N 1 2 r =0 N 1 2 2 rk

+ x(2r + 1)WN
r =0 k N 1 2 r =0

N 1 2

( 2 r +1) k

X(k) = x(2r)(WN ) rk + WN
2

x(2r + 1)(W
rk N

2 rk

X(k) = x(2r)WN + WN
rk r =0

N 1 2

x(2r + 1)W
r =0

N 1 2

X(k) = G (k ) + WN H (k )
k

DFT,FFT

sea X(k) = FFTk {x0, x1, x 2, x3, x 4, x5, x6, x7} FFTk {x0, x1, x 2, x3, x 4, x5, x6, x7} = = FFTk {x0, x 2, x 4, x6} + W8 FFTk {x1, x3, x5, x7}
k

= FFTk {x0, x 4} + W4 FFTk {x 2, x6} + W8 FFTk {x1, x5} + W8 W4 FFTk {x3, x7}
k k k k

= FFTk {x0} + W2 FFT {x 4} + W4 FFT {x 2} + W4 W2 FFT {x6} + ...


k k k k

= x0 + W2 x 4 + W4 x 2 + W4 W2 x6 + ...
k k k k

x0

x4

x2

x6
*W2
k

x1

x5
*W2
k

x3

x7

*W2

*W2

+
*W4
k

+
*W4
k

+
*W8
k

Xk

Ingreso de sonido a MATLAB


[x,fs,nb]=wavread(nombre.wav); wavwrite(x,fs,nb,nombre.wav);
x: vector con las muestras fs: frecuencia de muestreo nb: n de bits con que se almacena la amplitud nombre.wav: el nombre del archivo

sound(x,fs); permite or el sonido Otros comandos tiles: cd, dir, help, type, edit, fdatool

FFT con matlab


yw=fft(y); calcula la fft de y, dejndola en yw y=ifft(yw); calcula la fft inversa de yw plot(abs(yw)); dibuja el espectro sin simetra plot(fftshift(abs(yw)); dibuja el espectro (sin unidades en el eje de frecuencia)
N=length(yw); plot(((1:N)-floor(N/2))*fs/N, fftshift(abs(yw))); dibuja el espectro correctamente (coloca Hz en el eje x) figure; crea una nueva ventana de dibujo Plot(x,y1,x,y2);legend(y1(t),y2(y)); coloca nombres a las curvas Para mas usos de plot (colores, tipos de lnea), ver help plot

Filtros con MATLAB


FIR1
B=fir1(N,Wc,tipo); genera un filtro FIR pasaaltos o pasabajos usando ventana de Hamming. N: n de coeficientes Wc = fcorte / (fs/2) Tipo: low para pasabajos, high para pasaaltos B=fir1(N,[W1 W2],stop); genera un rechazabandas, con DC-0 genera un pasabandas N: n de coeficientes W1 = fcorte1 / (fs/2) ; W2 = fcorte2 / (fs/2)

El filtro se puede aplicar sobre una seal x escribiendo:


y=filter(B,[1],x);

Filtros con MATLAB


BUTTER, BUTTORD
[B,A]=butter(N,Wn,tipo); genera un filtro digital que aproxima a uno analgico de orden N (A y B tienen N+1 coeficientes). Wn y tipo ya se describieron para FIR1(Wn debe ser [w1 w2] para pasabandas) [N,Wn]=buttord(Wp,Ws,Rp,Rs): Devuelve el orden N del filtro butter ms pequeo que atena menos de Rp dB en la banda de paso y ms de Rs dB en la de rechazo. Wp y Ws pueden ser vectores con varias frecuencias que definan bandas. El filtro se aplica con: y=filter(B,A,x);

Banda de paso

Wp

Ws

Banda de rechazo

Filtros con MATLAB


KAISERORD (ventanas Kaiser)
[N,Wn,BETA,TYPE]=kaiserord(F,A,DEV,fs); devuelve los parmetros para generar el siguiente filtro:

B = FIR1(N, Wn, TYPE, kaiser( N+1,BETA ), 'noscale' )


El vector F indica frecuencias de corte en Hz.

F=[f1 f2] => bandas (0,f1), (f2,fs/2) F=[f1 f2 f3 f4] => bandas (0,f1), (f2,f3), (f4,fs/2)
El vector A indica la amplitud deseada en cada banda El vector DEV indica la mxima amplitud del ripple en cada banda fs es la frecuencia de muestreo

Filtros con MATLAB


Visualizar la respuesta en frecuencia:
freqz(B,A,n,fs); muestra la respuesta en frecuencia de un filtro. B: vector con coeficientes del numerador A: vector con coeficientes del denominador n: n de puntos que tiene la seal a filtrar fs: frecuencia de muestreo

S-ar putea să vă placă și