Descargar

Prácticas de DSP. Procesadores digitales de señales

Enviado por davidsavall


    Procesadores digitales de señales

    1. Práctica 1. Sistemas LTI y análisis de Fourier.
    2. Práctica 2. Muestreo.
    3. Práctica 3 La Transformada Z.
    4. Práctica 4. La DFT y la FFT. y Práctca 5.Diseño de filtros digitales.

    Nota: Para la realización de esta memoria se ha utilizado el procesador de textos "Microsoft Word 2002 XP"

    PRACTICA 1. Sistemas LTI y análisis de Fourier.

    >> help conv

    La función conv(x,y) sirve para calcular la convolucion de x e y. El vector que resulta es de longitud Length(a)+length(b)-1. Si A y B son vectores de coeficientes polinómicos, la convolución es equivalente a multiplicar los dos polinómios.

    CONV Convolution and polynomial multiplication.

    C = CONV(A, B) convolves vectors A and B. The resulting

    vector is length LENGTH(A)+LENGTH(B)-1.

    If A and B are vectors of polynomial coefficients, convolving

    them is equivalent to multiplying the two polynomials.

    See also DECONV, CONV2, CONVN, FILTER and, in the Signal

    Processing Toolbox, XCORR, CONVMTX.

    >> help filter

    La función filter() permite calcular la salida de un sistema LTI causal cuando éste es definido mediante una ecuación en diferencias de coeficientes constantes.

    Si x es un vector con la secuencia de entrada y a y b son vectores con los coeficientes de la ecuación , la expression y=filter(b,a,x) devuelve un vector y con la respuesta del sistema LTI causal.

    FILTER One-dimensional digital filter.

    Y = FILTER(B,A,X) filters the data in vector X with the

    filter described by vectors A and B to create the filtered

    data Y. The filter is a "Direct Form II Transposed"

    implementation of the standard difference equation:

    a(1)*y(n) = b(1)*x(n) + b(2)*x(n-1) + … + b(nb+1)*x(n-nb)

    – a(2)*y(n-1) – … – a(na+1)*y(n-na)

    If a(1) is not equal to 1, FILTER normalizes the filter

    coefficients by a(1).

    FILTER always operates along the first non-singleton dimension,

    namely dimension 1 for column vectors and non-trivial matrices,

    and dimension 2 for row vectors.

    [Y,Zf] = FILTER(B,A,X,Zi) gives access to initial and final

    conditions, Zi and Zf, of the delays. Zi is a vector of length

    MAX(LENGTH(A),LENGTH(B))-1 or an array of such vectors, one for

    each column of X.

    FILTER(B,A,X,[],DIM) or FILTER(B,A,X,Zi,DIM) operates along the

    dimension DIM.

    See also FILTER2 and, in the Signal Processing Toolbox, FILTFILT.

    Ejercicio 1.2 La función "conv"

    c=1; % Control

    if c==1

    x=ones(1,6); % Secuencia

    y=conv(x,x); % Convolución x*x

    Nx=0; % Indices

    Mx=5;

    Ny=Nx+Nx;

    My=Mx+Mx;

    ny=Ny:My;

    figure % Nueva figura

    stem(ny,y); % Resultados

    title('Figura 1.1')

    end

    Ejercicio 1.2.1 Promediador Móvil

    c=1; % Control

    if c==1

    n=-30:30; % Tiempo discreto

    h=1/7*ones(1,7); % Respuesta impulsional

    x=sin(2*pi*n/13); % Secuencia

    y=conv(h,x); % Convolución

    V=zeros(1,81); % Vector de ceros

    Nh=-3; % Indices h[n]

    Mh=3;

    Nx=-33; % Indices x[n]

    Mx=33;

    Ny=Nx+Nx; % Indices y[n]

    My=Mx+Mx;

    ny=Ny:My;

    V(8:8+66)=y; % Salida ajustada

    nV=-40:40; % Tiempo discreto

    figure % Nueva figura

    stem(nV,V); % Resultados

    title('Figura 1.2')

    end

    Ejercicio 1.3 La Función Filter

    c=1; % Control

    if c==1

    a=[1 2]; % Coeficientes y[n]

    b=[1 -3]; % Coeficientes x[n]

    n=0:5; % Tiempo discreto

    x=n; % Secuencia x[n]

    y=filter(b,a,x); % Filtrado de x[n]

    figure % Nueva figura

    stem(x,y); % Resultados

    title('Figura 1.3')

    end

    Para ver el gráfico seleccione la opción "Descargar" del menú superior

    Ejercicio 1.3.1

    c=1; % Control

    if c==1

    %— Punto 1

    % Coeficientes y[n]

    a=[1 (-1.8*cos(pi/16)) 0.81];

    b=[1 1/2]; % Coeficientes x[n]

    n=0:50; % Tiempo discreto

    x=zeros(1,51); % Vector de ceros

    x(1)=1;

    y=filter(b,a,x); % Filtrado de x[n]

    figure % Nueva figura

    stem(n,y); % Resultados

    title('Figura 1.4')

    Para ver el gráfico seleccione la opción "Descargar" del menú superior

    %—

    n=-10:50; % Tiempo discreto

    x=zeros(1,61); % Vector de ceros

    x(11)=1;

    y=filter(b,a,x); % Filtrado de x[n]

    figure % Nueva figura

    stem(n,y); % Resultados

    title('Figura 1.4 Modificada la x[n]')

    Para ver el gráfico seleccione la opción "Descargar" del menú superior

    %— Punto 2

    n=-10:50; % Tiempo discreto

    x=zeros(1,61); % Vector de ceros

    x(11:61)=1;

    y=filter(b,a,x); % Filtrado de x[n]

    figure % Nueva figura

    stem(n,y); % Resultados

    title('Figura 1.5')

    Para ver el gráfico seleccione la opción "Descargar" del menú superior

    %—

    n=-10:50; % Tiempo discreto

    x=zeros(1,61); % Vector de ceros

    x(11:61)=1;

    y=filter(b,a,x); % Filtrado de x[n]

    yc=cumsum(y,1); % "Filtrado" de y[n]

    figure % Nueva figura

    stem(n,yc); % Resultados

    title('Figura 1.5 con Cumsum')

    Para ver el gráfico seleccione la opción "Descargar" del menú superior

    %—

    n=-10:50; % Tiempo discreto

    x=zeros(1,61); % Vector de ceros

    x(11:61)=1;

    y=filter(b,a,x); % Filtrado de x[n]

    y1=diff(y); % Recuperación

    n1=-9:50; % Nuevo intervalo

    figure % Nueva figura

    stem(n1,y1); % Resultados

    title('Respuesta al impulso con diff')

    Para ver el gráfico seleccione la opción "Descargar" del menú superior

    %— Punto 3

    a=[1]; % Coeficientes y[n]

    b=1/7*ones(1,7); % Coeficientes x[n]

    n=-30:30; % Tiempo discreto

    x=sin(2*pi*n/13); % Secuencia

    y=filter(b,a,x); % Filtrado de x[n]

    figure % Nueva figura

    stem(n,y); % Resultados

    title('Figura 1.2 con función filter')

    Para ver el gráfico seleccione la opción "Descargar" del menú superior

    end

    Ejercicio 1.4 Cancelación de ecos

    c=1; % Control

    if c==1

    % Lectura WAV

    [voz,fs]=wavread('ho1.wav');

    sound(voz,fs) % Reproducción

    % [voz fs]=loadw16('ho1.wav');

    pause % Control de reproducción

    %– Reproducción con ecos 1.4.1

    N=1000; % Retardo

    alfa=0.5; % Factor de atenuación

    % Sistema

    b=[1 zeros(1,999) alfa];

    % Filtrado

    ve=filter(b,1,voz);

    sound(ve,fs) % Reproducción con eco

    %—

    figure % Nueva figura

    stem(b); % Resultados

    title('Figura 1.6')

    pause % Control de reproducción

    %– Sistema inverso 1.4.2

    % Coeficientes y[n]

    a=[1 zeros(1,999) alfa];

    b=[1]; % Coeficientes x[n]

    y=filter(b,a,ve); % Señal sin ecos

    sound(y,fs) % Reproducción sin eco

    %— Cálculo del sistema inverso

    n=0:4000; % Intervalo discreto

    a=[1 zeros(1,999) alfa]; % Coeficientes de y[n]

    b=1; % Coeficientes de x[n]

    x=zeros(1,4000); % Secuencia impulso

    x(1)=1;

    hi=filter(b,a,x); % Filtrado

    figure % Nueva figura

    subplot(211)

    plot(n,hi) % Respuesta al impulso

    title('Respuesta al impulso nuevo sistema')

    b=[1 zeros(1,999) alfa]; % Sistema con eco

    he=filter(b,1,x); % Filtrado

    ht=conv(hi,he); % Convolución

    subplot(212)

    plot(n,ht) % Respuesta al impulso

    title('Convolución sistema inverso y con eco')

    end

    Ejercicio 1.5.1 Señales de duración finita

    c=1; % Control

    if c==1

    p=ones(1,15); % Pulso de duración 15

    ep=fft(p,256); % Espectro del pulso

    figure % Nueva figura

    subplot(221)

    plot(abs(ep)) % Módulo del espectro

    title('Espectro del pulso ( 0 y 1 )')

    ep=fftshift(ep); % Espectro del pulso

    % Frecuencia

    f=linspace(-0.5,0.5-(1/256),256);

    subplot(222)

    plot(f,abs(ep)) % Módulo del espectro

    title('Espectro del pulso ( -0.5 y 0.5 )')

    subplot(223)

    plot(f,ep) % Módulo y fase del espectro

    title('Módulo y Fase del espectro')

    subplot(224)

    plot(f,imag(ep)) % Módulo y fase del espectro

    title('Fase del espectro')

    Para ver el gráfico seleccione la opción "Descargar" del menú superior

    ep=ep.*exp(j*2*pi*f*7);

    figure % Nueva figura

    subplot(211)

    plot(f,real(ep)) % Módulo del espectro

    title('Módulo del espectro')

    subplot(212)

    plot(f,imag(ep)) % Módulo del espectro

    title('Fase del espectro')

    Para ver el gráfico seleccione la opción "Descargar" del menú superior

    Ejercicio 1.5.2 Ecuaciones en diferencia

    c=1; % Control

    if c==1

    % Espectro señal exponencial

    [H,W]=freqz(1,[1 -0.9],256);

    figure % Nueva figura

    subplot(221)

    plot(W/(2*pi),abs(H)) % Módulo del espectro

    title('Módulo del espectro ( 0 y pi )')

    % Espectro señal exponencial

    [H,W]=freqz(1,[1 -0.9],256,'whole');

    subplot(222)

    plot(W/(2*pi),abs(H)) % Módulo del espectro

    title('Módulo del espectro ( 0 y 2*pi )')

    W=W-pi; % Espectro entre -0.5 y 0.5

    H=fftshift(H);

    subplot(223)

    plot(W/(2*pi),abs(H)) % Módulo del espectro

    title('Módulo del espectro ( -0.5 y 0.5 )')

    subplot(224)

    plot(W/(2*pi),angle(H)) % Fase del espectro

    title('Fase del espectro ( -0.5 y 0.5 )')

    Para ver el gráfico seleccione la opción "Descargar" del menú superior

    end

    PRACTICA 2. Muestreo.

    >> help fftshift

    FFTSHIFT es útil para visualizar la Transformada de Fourier con la componente de la frecuencia cero en el centro del espectro. Por vectores, FFTSHIFT(X) intercambia las mitades izquierdas y derechas de X. Por matrices, FFTSHIFT(X) intercambia los primeros y terceros cuadrantes y los segundos y cuartos cuadrantes.

    FFTSHIFT Shift zero-frequency component to center of spectrum.

    For vectors, FFTSHIFT(X) swaps the left and right halves of

    X. For matrices, FFTSHIFT(X) swaps the first and third

    quadrants and the second and fourth quadrants. For N-D

    arrays, FFTSHIFT(X) swaps "half-spaces" of X along each

    dimension.

    FFTSHIFT(X,DIM) applies the FFTSHIFT operation along the

    dimension DIM.

    FFTSHIFT is useful for visualizing the Fourier transform with

    the zero-frequency component in the middle of the spectrum.

    See also IFFTSHIFT, FFT, FFT2, FFTN.

    Ejercicio 2.2 SEÑALES SINUSOIDALES

    c=1; % Control

    if c==1

    fs=8000; % Frecuencia de muestreo

    T=1/fs; % Período de muestreo

    f0=1000; % Frecuencia señal sinusoidal

    n=0:7999; % Tiempo discreto

    x=sin(2*pi*f0*n*T); % Secuencia x[n]

    sound(x,fs) % Reproducción de x[n]

    figure % Nueva figura

    t=n*T; % Intervalo temporal

    % Visualiza resultados

    subplot(211), stem(n(1:20),x(1:20))

    title('Señal sinusoidal x[n]'), grid

    xlabel('n'), ylabel('Unidades Lineales')

    subplot(212), plot(t(1:20),x(1:20))

    title('Señal sinusoidal x(t)'), grid

    xlabel('Tiempo (seg)'), ylabel('Unidades Lineales')

     figure % Nueva figura

    N=length(x); % Longitud de x[n]

    % Espectro de x[n]

    X=fftshift(fft(x,N))/N;

    % Frecuencia discreta

    f=linspace(-0.5,0.5-(1/N),N);

    % Visualiza resultados

    subplot(211), plot(f,abs(X))

    title('Espectro discreto de x[n]'), grid

    xlabel('fd=f/fs'), ylabel('Unidades Lineales')

    subplot(212), plot(f*fs,abs(X))

    title('Espectro continuo de x[n]'), grid

    xlabel('Frecuencia (Hz)'), ylabel('Unidades Lineales')

    Para ver el gráfico seleccione la opción "Descargar" del menú superior

    end

    Ejercicio 2.3 SEÑAL CHIRP

    c=1; % Control

    if c==1

    fs=8000; % Frecuencia de muestreo

    T=1/fs; % Período de muestreo

    f0=3000; % Frecuencia señal sinusoidal

    beta=2000; % Beta

    n=0:1*(7999); % Tiempo discreto

    % Secuencia x[n]

    x=sin(2*pi*f0*n*T+0.5*beta*(n*T).^2);

    sound(x,fs) % Reproducción de x[n]

    figure % Nueva figura

    t=n*T; % Intervalo temporal

    % Visualiza resultados

    subplot(211), stem(n(1:100),x(1:100))

    title('Señal chirp x[n]'), grid

    xlabel('n'), ylabel('Unidades Lineales')

    subplot(212), plot(t(1:100),x(1:100))

    title('Señal chirp x(t)'), grid

    xlabel('Tiempo (seg)'), ylabel('Unidades Lineales')

    Para ver el gráfico seleccione la opción "Descargar" del menú superior

    figure % Nueva figura

    N=length(x); % Longitud de x[n]

    % Espectro de x[n]

    X=fftshift(fft(x,N))/N;

    % Frecuencia discreta

    f=linspace(-0.5,0.5-(1/N),N);

    % Visualiza resultados

    subplot(211), plot(f,abs(X))

    title('Espectro discreto de x[n]'), grid

    xlabel('fd=f/fs'), ylabel('Unidades Lineales')

    subplot(212), plot(f*fs,abs(X))

    title('Espectro continuo de x[n]'), grid

    xlabel('Frecuencia (Hz)'), ylabel('Unidades Lineales')

    Para ver el gráfico seleccione la opción "Descargar" del menú superior

    end

    Ejercicio 2.4 CAMBIO DE LA FRECUENCIA DE MUESTREO

    Ejercicio 2.4.1 Diezmado

    c=1; % Control

    if c==1

    n=0:124; % Tiempo discreto

    x1=0.4*(n-62); % Secuencia x1[n]

    x1=(sinc(x1)).^2;

    x2=0.2*(n-62); % Secuencia x2[n]

    x2=(sinc(x2)).^2;

    figure % Nueva figura

    % Visualiza resultados

    subplot(211), plot(n,x1)

    title('Secuencia x1[n]'), grid

    xlabel('n'), ylabel('Unidades Lineales')

    subplot(212), plot(n,x2)

    title('Secuencia x2[n]'), grid

    xlabel('n'), ylabel('Unidades Lineales')

    figure % Nueva figura

    % Espectro de x1[n]

    X1=fftshift(fft(x1,2048));

    % Espectro de x2[n]

    X2=fftshift(fft(x2,2048));

    % Frecuencia discreta

    f=linspace(-0.5,0.5-(1/2048),2048);

    % Visualiza resultados

    subplot(211), plot(f,abs(X1))

    title('Espectro discreto de x1[n]'), grid

    xlabel('fd=f/fs'), ylabel('Unidades Lineales')

    subplot(212), plot(f,abs(X2))

    title('Espectro discreto de x2[n]'), grid

    xlabel('fd=f/fs'), ylabel('Unidades Lineales')

    %— Diezmado por un factor M

    % Secuencia diezmada xd1[n]

    xd1=x1(1:2:length(x1));

    % Secuencia diezmada xd2[n]

    xd2=x2(1:2:length(x2));

    figure % Nueva figura

    % Visualiza resultados

    subplot(211), plot(xd1)

    title('Secuencia diezmada xd1[n]'), grid

    xlabel('n'), ylabel('Unidades Lineales')

    subplot(212), plot(xd2)

    title('Secuencia diezmada xd2[n]'), grid

    xlabel('n'), ylabel('Unidades Lineales')

    figure % Nueva figura

    % Espectro de x1[n]

    Xd1=fftshift(fft(xd1,2048));

    % Espectro de x2[n]

    Xd2=fftshift(fft(xd2,2048));

    % Frecuencia discreta

    f=linspace(-0.5,0.5-(1/2048),2048);

    % Visualiza resultados

    subplot(211), plot(f,abs(Xd1))

    title('Espectro discreto de xd1[n]'), grid

    xlabel('fd=f/fs'), ylabel('Unidades Lineales')

    subplot(212), plot(f,abs(Xd2))

    title('Espectro discreto de xd2[n]'), grid

    xlabel('fd=f/fs'), ylabel('Unidades Lineales')

    %— Filtro antialiasing

    fc=0.25; % Frecuencia de corte 0.5/M

    % Respuesta al impulso del filtro

    h=2*fc*sinc(2*fc*(-32:32)).*(hamming(65)');

    figure % Nueva figura

    freqz(h,1) % Visualiza resultados

    %— Filtrando x1[n]

    xf1=conv(h,x1); % Secuencia filtrada xf2[n]

    % Secuencia filtrada diezmada xfd2[n]

    xfd1=xf1(1:2:length(xf1));

    figure % Nueva figura

    % Espectro de xfd2[n]

    Xfd1=fftshift(fft(xfd1,2048));

    % Frecuencia discreta

    f=linspace(-0.5,0.5-(1/2048),2048);

    % Visualiza resultados

    plot(f,abs(Xfd1))

    title('Espectro discreto de xfd1[n]'), grid

    xlabel('fd=f/fs'), ylabel('Unidades Lineales')

    end

    Ejercicio 2.4.2 Interpolación

    c=1; % Control

    if c==1

    n=0:124; % Tiempo discreto

    x1=0.4*(n-62); % Secuencia x1[n]

    x1=(sinc(x1)).^2;

    x2=0.2*(n-62); % Secuencia x2[n]

    x2=(sinc(x2)).^2;

    %— Interpolando por un factor L

    figure % Nueva figura

    % Visualiza resultados

    stem(x1(52:72))

    title('Secuencia x1[n]'), grid

    xlabel('n'), ylabel('Unidades Lineales')

    figure % Nueva figura

    stem(x2(52:72))

    title('Secuencia x2[n]'), grid

    xlabel('n'), ylabel('Unidades Lineales')

    % Secuencia interpolada xe1[n]

    xe1=zeros(1,3*length(x1));

    xe1(1:3:length(xe1))=x1;

    % Secuencia interpolada xe2[n]

    xe2=zeros(1,3*length(x2));

    xe2(1:3:length(xe2))=x2;

    figure % Nueva figura

    % Visualiza resultados

    stem(xe1(177:197))

    title('Secuencia interpolada xe1[n]'), grid

    xlabel('n'), ylabel('Unidades Lineales')

    figure % Nueva figura

    stem(xe2(177:197))

    title('Secuencia interpolada xe2[n]'), grid

    xlabel('n'), ylabel('Unidades Lineales')

    figure % Nueva figura

    % Espectro de xe1[n]

    Xe1=fftshift(fft(xe1,2048));

    % Espectro de xe2[n]

    Xe2=fftshift(fft(xe2,2048));

    % Frecuencia discreta

    f=linspace(-0.5,0.5-(1/2048),2048);

    % Visualiza resultados

    subplot(211), plot(f,abs(Xe1))

    title('Espectro discreto de xe1[n]'), grid

    xlabel('fd=f/fs'), ylabel('Unidades Lineales')

    subplot(212), plot(f,abs(Xe2))

    title('Espectro discreto de xe2[n]'), grid

    xlabel('fd=f/fs'), ylabel('Unidades Lineales')

    %— Filtro interpolador

    fc=0.16; % Frecuencia de corte 0.5/L

    % Respuesta al impulso del filtro

    h=(2*fc*sinc(2*fc*(-32:32)).*(hamming(65)'))*3;

    figure % Nueva figura

    freqz(h,1) % Visualiza resultados

    %— Filtrando xe1[n] y xe2[n]

    % Xfe1=conv(h,xe1); % Secuencia filtrada xfe1[n]

    % xfe2=conv(h,xe2); % Secuencia filtrada xfe2[n]

    xfe1=filter(h,1,xe1); % Secuencia filtrada xfe1[n]

    xfe2=filter(h,1,xe2); % Secuencia filtrada xfe2[n]

    figure % Nueva figura

    % Visualiza resultados

    stem(xfe1(209:229))

    title('Secuencia interpolada filtrada xfe1[n]'), grid

    xlabel('n'), ylabel('Unidades Lineales')

    figure % Nueva figura

    stem(xfe2(209:229))

    title('Secuencia interpolada filtrada xfe2[n]'), grid

    xlabel('n'), ylabel('Unidades Lineales')

    figure % Nueva figura

    % Espectro de xfe1[n]

    Xfe1=fftshift(fft(xfe1,2048));

    % Espectro de xfe2[n]

    Xfe2=fftshift(fft(xfe2,2048));

    % Frecuencia discreta

    f=linspace(-0.5,0.5-(1/2048),2048);

    % Visualiza resultados

    subplot(211), plot(f,abs(Xfe1))

    title('Espectro discreto de xfe1[n]'), grid

    xlabel('fd=f/fs'), ylabel('Unidades Lineales')

    subplot(212), plot(f,abs(Xfe2))

    title('Espectro discreto de xfe2[n]'), grid

    xlabel('fd=f/fs'), ylabel('Unidades Lineales')

    end

    Ejercicio 2.4.3 Cambio fs por un factor racional

    c=1; % Control

    if c==0

    % Carga archivo de voz

    [voz,fs]=wavread('ho1.wav');

    % Versiones anteriores a MATLAB 5.3

    % [voz fs]=loadw16('ho1.wav');

    clc

    disp('Pausa de voz… cualquier tecla para continuar')

    sound(voz,fs) % Reproducción archivo de voz

    pause

    %— Diezmado por un factor M

    % Voz diezmada

    vozd=voz(1:3:length(voz));

    disp('Pausa de voz diezmada… cualquier tecla para continuar')

    sound(vozd,fs/3) % Reproducción voz diezmada

    pause

    %— Filtro antialiasing

    fc=0.16; % Frecuencia de corte 0.5/M

    % Respuesta al impulso del filtro

    h=2*fc*sinc(2*fc*(-32:32)).*(hamming(65)');

    %— Filtrando voz

    % Voz filtrada

    vozf=filter(h,1,voz);

    % Voz diezmada

    vozfd=vozf(1:3:length(vozf));

    disp('Pausa de voz filtrada diezmada… cualquier tecla para continuar')

    sound(vozfd,fs/3) % Reproducción voz filtrada diezmada

    pause

    %— Interpolando por un factor L

    clc

    disp('Pausa de voz… cualquier tecla para continuar')

    sound(voz,fs) % Reproducción archivo de voz

    pause

    % Voz interpolada

    voze=zeros(1,3*length(voz));

    voze(1:3:length(voze))=voz;

    disp('Pausa de voz interpolada… cualquier tecla para continuar')

    sound(voze,3*fs) % Reproducción voz interpolada

    pause

    %— Filtro interpolador

    fc=0.16; % Frecuencia de corte 0.5/L

    % Respuesta al impulso del filtro

    h=(2*fc*sinc(2*fc*(-32:32)).*(hamming(65)'))*3;

    %— Filtrando voz

    % Voz filtrada

    vozfe=filter(h,1,voze);

    disp('Pausa de voz filtrada expandida… cualquier tecla para continuar')

    sound(vozfe,3*fs) % Reproducción voz filtrada expandida

    pause

    %— Cambio de la frecuencia de muestreo fs'=fs*(L/M)

    %— Solución 1: L=10, M=8

    %— Solución 2: L=5, M=4

    clc % Borra la pantalla

    % Control del cambio de fs

    L=5; % Factor de interpolación

    M=4; % Factor de diezmado

    %— Interpolando por un factor L

    disp('Pausa de voz… cualquier tecla para continuar')

    sound(voz,fs) % Reproducción archivo de voz

    pause

    % Voz interpolada

    voze=zeros(1,L*length(voz));

    voze(1:L:length(voze))=voz;

    %— Filtro interpolador

    fc=0.5/L; % Frecuencia de corte 0.5/L

    % Respuesta al impulso del filtro

    h=(2*fc*sinc(2*fc*(-32:32)).*(hamming(65)'))*L;

    %— Filtrando voz

    % Voz filtrada

    vozfe=filter(h,1,voze);

    %— Diezmado por un factor M

    % Voz diezmada

    vozfed=vozfe(1:M:length(vozfe));

    % Reproducción voz filtrada, expandida y diezmada

    disp('Pausa de voz filtrada, expandida y diezmada… cualquier tecla para continuar')

    sound(vozfed,fs*(L/M))

    pause

    end

    PRACTICA 3 La Transformada Z.

    >> help polar

    La función polar() permite hacer diagramas en forma polar, es decir, dado un numero complejo, polar() representa su módulo y fase.

    POLAR(THETA, RHO) hace un diagrama usando los coordenadas polares del angulo de la THETA , en radianes, frente el radio RHO.

    POLAR Polar coordinate plot.

    POLAR(THETA, RHO) makes a plot using polar coordinates of

    the angle THETA, in radians, versus the radius RHO.

    POLAR(THETA,RHO,S) uses the linestyle specified in string S.

    See PLOT for a description of legal linestyles.

    See also PLOT, LOGLOG, SEMILOGX, SEMILOGY.

    >> help roots

    La función roots(C) encuentra las raíces polinómicas del vector C, donde los ceros y los polos son las raíces de los polinomios del numerador y del denominador de la función de transferencia, respectivemente.

    ROOTS Find polynomial roots.

    ROOTS(C) computes the roots of the polynomial whose coefficients

    are the elements of the vector C. If C has N+1 components,

    the polynomial is C(1)*X^N + … + C(N)*X + C(N+1).

    See also POLY, RESIDUE, FZERO.

    >> help poly

    La función poly() construye un polinomio a partir de sus raíces.

    POLY Convert roots to polynomial.

    POLY(A), when A is an N by N matrix, is a row vector with

    N+1 elements which are the coefficients of the

    characteristic polynomial, DET(lambda*EYE(SIZE(A)) – A) .

    POLY(V), when V is a vector, is a vector whose elements are

    the coefficients of the polynomial whose roots are the

    elements of V . For vectors, ROOTS and POLY are inverse

    functions of each other, up to ordering, scaling, and

    roundoff error.

    ROOTS(POLY(1:20)) generates Wilkinson's famous example.

    See also ROOTS, CONV, RESIDUE, POLYVAL.

    Ejercicio 3.2 MANEJO DE FUNCIONES DE TRANSFERENCIA

    Ejercicio 3.2.1 REPRESENTACION GRAFICA DE POLOS Y CEROS

    c=1; % Control

    if c==1

    %— Punto 1

    z=0.7*exp(j*pi/3); % Variable compleja z

    figure % Nueva figura

    % Visualiza resultados

    polar(angle(z),abs(z),'o')

    title('Variable compleja en forma polar'), grid

    z=0.5+j*0.5; % Variable compleja z

    Para ver el gráfico seleccione la opción "Descargar" del menú superior

    figure % Nueva figura

    % Visualiza resultados

    polar(angle(z),abs(z),'o')

    title('Variable compleja en forma cartesiana'), grid

     Para ver el gráfico seleccione la opción "Descargar" del menú superior

    figure % Nueva figura

    % Variables complejas

    z=[0.5+j*0.5 0.7*exp(j*pi/3)];

    % Visualiza resultados

    polar(angle(z),abs(z),'x')

    title('Variables complejas'), grid

    Para ver el gráfico seleccione la opción "Descargar" del menú superior

    %— Punto 2

    clc % Borra la pantalla

    disp('Raices del polinomio z^2-z-2')

    A=[1 -1 -2]; % Polinomio z^2-z-2

    r=roots(A) % Raices del polinomio z^2-z-2

    %— Punto 3

    disp('Polinomio asociado con las raices…')

    A=poly([-1 2]) % Polinomio asociado con las raices…

    %— Punto 4

    A=[1 -1 -2]; % Polinomio z^2-z-2

    figure % Nueva figura

    subplot(211)

    zplane(A); % Diagrama de ceros y polos

    title('Diagrama de ceros y polos para A,[]'), grid

    subplot(212)

    zplane(A'); % Diagrama de ceros y polos

    title('Diagrama de ceros y polos para A`,[]'), grid

    figure % Nueva figura

    zplane(A); % Diagrama de ceros y polos

    title('Diagrama de ceros y polos para A,[0]'), grid

    %—

    % Sistema con H1(z)

    bH1=roots([1]); % Ceros de H1(z)

    % Polos de H1(z)

    aH1=roots([1 -0.85*sqrt(2) 0.7225]);

    % Sistema con H2(z)

    % Ceros de H2(z)

    bH2=roots([1 -0.85*sqrt(2) 0.7225]);

    aH2=roots([1]); % Polos de H2(z)

    % Sistema con H3(z)

    bH3=roots([1]) % Ceros de H3(z)

    % Polos de H3(z)

    aH3=roots([1 -0.95*sqrt(2) 0.9025])

    % Sistema con H4(z)

    % Ceros de H4(z)

    bH4=roots([1 -0.95*sqrt(2) 0.9025]);

    aH4=roots([1]) % Polos de H4(z)

    figure % Nueva figura

    subplot(223)

    zplane(bH1,aH1); % Diagrama de ceros y polos

    title('Sistema con H1(z)'), grid

    subplot(221)

    zplane(bH2,aH2); % Diagrama de ceros y polos

    title('Sistema con H2(z)'), grid

    subplot(224)

    zplane(bH3,aH3); % Diagrama de ceros y polos

    title('Sistema con H3(z)'), grid

    subplot(222)

    zplane(bH4,aH4); % Diagrama de ceros y polos

    title('Sistema con H4(z)'), grid

    end

    Ejercicio 3.2.2 RESPUESTA EN FRECUENCIA A PARTIR DE LA TZ

    c=1; % Control

    if c==1

    %— Punto 1

    clc % Borra la pantalla

    disp('Evaluación del polinomio z^2-z-2 en z=-1')

    A=[1 -1 -2]; % Polinomio z^2-z-2

    z=-1; % Evaluación en z=-1

    polyval(A,z) % Evaluación delpolinomio z^2-z-2 en z=-1

    %—

    disp('Evaluación [H(0), H(0.5)]…')

    % Sistema con H1(z)

    cH1=[1]; % Ceros de H1(z)

    % Polos de H1(z)

    pH1=[1 -0.85*sqrt(2) 0.7225];

    z=1; % H(0)

    H1=(polyval(cH1,z))/(polyval(pH1,z));

    z=-1; % H(0.5)

    H1=[H1 (polyval(cH1,z))/(polyval(pH1,z))];

    % Sistema con H2(z)

    % Ceros de H2(z)

    cH2=[1 -0.85*sqrt(2) 0.7225];

    pH2=[1]; % Polos de H2(z)

    z=1; % H(0)

    H2=(polyval(cH2,z))/(polyval(pH2,z));

    z=-1; % H(0.5)

    H2=[H2 (polyval(cH2,z))/(polyval(pH2,z))];

    % Sistema con H3(z)

    cH3=[1]; % Ceros de H3(z)

    % Polos de H3(z)

    pH3=[1 -0.95*sqrt(2) 0.9025];

    z=1; % H(0)

    H3=(polyval(cH3,z))/(polyval(pH3,z));

    z=-1; % H(0.5)

    H3=[H3 (polyval(cH3,z))/(polyval(pH3,z))];

    % Sistema con H4(z)

    % Ceros de H4(z)

    cH4=[1 -0.95*sqrt(2) 0.9025];

    pH4=[1]; % Polos de H4(z)

    z=1; % H(0)

    H4=(polyval(cH4,z))/(polyval(pH4,z));

    z=-1; % H(0.5)

    H4=[H4 (polyval(cH4,z))/(polyval(pH4,z))];

    H1, H2, H3, H4 % Evaluación de H1, H2, H3 y H4

    %— Punto 2

    % Respuesta en frecuencia

    [H,W]=freqz([1 -1 -2],1,512,'whole');

    figure % Nueva figura

    subplot(211)

    % Módulo respuesta en frecuencia

    plot(W/(2*pi),abs(H))

    title('Módulo de la respuesta en frecuencia'), grid

    ylabel('Unidades Lineales')

    subplot(212)

    % Fase respuesta en frecuencia

    plot(W/(2*pi),angle(H))

    title('Fase de la respuesta en frecuencia'), grid

    ylabel('Unidades Lineales')

    %—

    % Sistema con H1(z)

    bH1=[1]; % Coeficientes b

    % Coeficientes a

    aH1=[1 -0.85*sqrt(2) 0.7225];

    % Respuesta en frecuencia

    [H1,W1]=freqz(bH1,aH1,512,'whole');

    % Sistema con H2(z)

    % Coeficientes b

    bH2=[1 -0.85*sqrt(2) 0.7225];

    aH2=[1]; % Coeficientes a

    % Respuesta en frecuencia

    [H2,W2]=freqz(bH2,aH2,512,'whole');

    % Sistema con H3(z)

    bH3=[1]; % Coeficientes b

    % Coeficientes a

    aH3=[1 -0.95*sqrt(2) 0.9025];

    % Respuesta en frecuencia

    [H3,W3]=freqz(bH3,aH3,512,'whole');

    % Sistema con H4(z)

    % Coeficientes b

    bH4=[1 -0.95*sqrt(2) 0.9025];

    aH4=[1]; % Coeficientes a

    % Respuesta en frecuencia

    [H4,W4]=freqz(bH4,aH4,512,'whole');

    figure % Nueva figura

    subplot(221)

    % Módulo respuesta en frecuencia

    plot(W1/(2*pi),abs(H1))

    title('Módulo de H1'), grid

    ylabel('Unidades Lineales')

    subplot(223)

    % Fase respuesta en frecuencia

    plot(W1/(2*pi),angle(H1))

    title('Fase de H1'), grid

    ylabel('Unidades Lineales')

    subplot(222)

    % Módulo respuesta en frecuencia

    plot(W2/(2*pi),abs(H2))

    title('Módulo de H2'), grid

    ylabel('Unidades Lineales')

    subplot(224)

    % Fase respuesta en frecuencia

    plot(W2/(2*pi),angle(H2))

    title('Fase de H2'), grid

    ylabel('Unidades Lineales')

    figure % Nueva figura

    subplot(221)

    % Módulo respuesta en frecuencia

    plot(W3/(2*pi),abs(H3))

    title('Módulo de H3'), grid

    ylabel('Unidades Lineales')

    subplot(223)

    % Fase respuesta en frecuencia

    plot(W3/(2*pi),angle(H3))

    title('Fase de H3'), grid

    ylabel('Unidades Lineales')

    subplot(222)

    % Módulo respuesta en frecuencia

    plot(W4/(2*pi),abs(H4))

    title('Módulo de H4'), grid

    ylabel('Unidades Lineales')

    subplot(224)

    % Fase respuesta en frecuencia

    plot(W4/(2*pi),angle(H4))

    title('Fase de H4'), grid

    ylabel('Unidades Lineales')

    end

    Ejercicio 3.2.3 RESPUESTA AL IMPULSO

    Para ver el ejercicio y el gráfico seleccione la opción "Descargar" del menú superior

    Ejercicio 3.2.4 DESCOMPOSICION EN FRACCIONES SIMPLES

    c=1; % Control

    if c==1

    %— Punto 1

    a=[6 -5 1]; % Coeficientes a de y[n]

    b=[1 -1]; % Coeficientes b de x[n]

    [h,t]=impz(b,a,11); % h[n]

    figure % Nueva figura

    stem(t,h) % Respuesta al impulso del sistema

    title('Respuesta al impulso del sistema'), grid

    ylabel('Unidades Lineales')

    %— Punto 2

    clc % Borra la pantalla

    disp('Expansión en fracciones simples…')

    % Expansión en fracciones simples

    [r,p,k]=residue(b,a)

    %— Punto 3

    n=0:10; % Tiempo discreto

    % h[n]

    h=-0.5*(0.5).^n+0.6667*(0.3333).^n;

    figure % Nueva figura

    stem(n,h) % Respuesta al impulso del sistema

    title('Respuesta al impulso del sistema por fracciones simples'), grid

    ylabel('Unidades Lineales')

    end

    Ejercicio 3.3 PROPIEDADES EN EL DOMINIO TRANSFORMADO

    Ejercicio 3.3.1 FASE LINEAL

    Para ver el ejercicio y el gráfico seleccione la opción "Descargar" del menú superior

    PRACTICA 4. La DFT y la FFT. y PRACTCA 5.Diseño de filtros digitales.

    >> help fft

    FFT(X) calcula la Transformada de Fourier discreta (DFT) del vector X.

    FFT Discrete Fourier transform.

    FFT(X) is the discrete Fourier transform (DFT) of vector X. For

    matrices, the FFT operation is applied to each column. For N-D

    arrays, the FFT operation operates on the first non-singleton

    dimension.

    FFT(X,N) is the N-point FFT, padded with zeros if X has less

    than N points and truncated if it has more.

    FFT(X,[],DIM) or FFT(X,N,DIM) applies the FFT operation across the

    dimension DIM.

    For length N input vector x, the DFT is a length N vector X,

    with elements

    N

    X(k) = sum x(n)*exp(-j*2*pi*(k-1)*(n-1)/N), 1 <= k <= N.

    n=1

    The inverse DFT (computed by IFFT) is given by

    N

    x(n) = (1/N) sum X(k)*exp( j*2*pi*(k-1)*(n-1)/N), 1 <= n <= N.

    k=1

    The relationship between the DFT and the Fourier coefficients a and b in

    N/2

    x(n) = a0 + sum a(k)*cos(2*pi*k*t(n)/(N*dt))+b(k)*sin(2*pi*k*t(n)/(N*dt))

    k=1

    is

    a0 = X(1)/N, a(k) = 2*real(X(k+1))/N, b(k) = -2*imag(X(k+1))/N,

    where x is a length N discrete signal sampled at times t with spacing dt.

    See also IFFT, FFT2, IFFT2, FFTSHIFT.

    >> help fftshift

    Calcula la componente de la frecuencia cero en el centro del espectro.

    FFTSHIFT Shift zero-frequency component to center of spectrum.

    For vectors, FFTSHIFT(X) swaps the left and right halves of

    X. For matrices, FFTSHIFT(X) swaps the first and third

    quadrants and the second and fourth quadrants. For N-D

    arrays, FFTSHIFT(X) swaps "half-spaces" of X along each

    dimension.

    FFTSHIFT(X,DIM) applies the FFTSHIFT operation along the

    dimension DIM.

    FFTSHIFT is useful for visualizing the Fourier transform with

    the zero-frequency component in the middle of the spectrum.

    See also IFFTSHIFT, FFT, FFT2, FFTN.

    >> help angle

    La función angle calcula la fase , en radianes, de una matriz compleja.

    ANGLE Phase angle.

    ANGLE(H) returns the phase angles, in radians, of a matrix with

    complex elements.

    See also ABS, UNWRAP.

    >> help freqz

    FREQZ Z calcula la transformada de la respuesta en frecuencia digital del filtro.

    FREQZ Z-transform digital filter frequency response. When N is an

    integer, [H,W] = FREQZ(B,A,N) returns the N-point frequency

    vector W and the N-point complex frequency response vector G

    of the filter B/A:

    -1 -nb

    jw B(z) b(1) + b(2)z + …. + b(nb+1)z

    H(e) = —- = —————————-

    -1 -na

    A(z) 1 + a(2)z + …. + a(na+1)z

    given numerator and denominator coefficients in vectors B and

    A. The frequency response is evaluated at N points equally

    spaced around the upper half of the unit circle. To plot

    magnitude and phase of a filter:

    [h,w] = freqz(b,a,n);

    mag = abs(h); phase = angle(h);

    semilogy(w,mag), plot(w,phase)

    FREQZ(B,A,N,'whole') uses N points around the whole unit circle.

    FREQZ(B,A,W) returns the frequency response at frequencies

    designated in vector W, normally between 0 and pi. (See

    LOGSPACE to generate W). See also YULEWALK, FILTER, FFT,

    INVFREQZ, and FREQS.

    >> help fir1

    B = FIR1(N, Wn) diseña un filtro digital de los "paso-bajo" de orden N y devuelve los coeficientes del filtro en el vector B de longitud N+1. La frecuencia de atajo Wn debe estar entre 0 < Wn < 1,0, donde 1,0 corresponde a la mitad del rango de la muestra. El filtro B es real y tiene fase lineal. El aumento normalizado del filtro en Wn es de -6 dB.

    FIR1 FIR filter design using the window method.

    B = FIR1(N,Wn) designs an N'th order lowpass FIR digital filter

    and returns the filter coefficients in length N+1 vector B.

    The cut-off frequency Wn must be between 0 < Wn < 1.0, with 1.0

    corresponding to half the sample rate. The filter B is real and

    has linear phase. The normalized gain of the filter at Wn is

    -6 dB.

    >> help Kaiser

    La función Kaiser() devuelve el número de elementos de la ventana Kaiser.

    KAISER KAISER(N,beta) returns the BETA-valued N-point Kaiser window.

    Ejercicio 3.3 PROPIEDADES EN EL DOMINIO TRANSFORMADO

    Ejercicio 3.3.2 ESTABILDAD

    Para ver el ejercicio y el gráfico seleccione la opción "Descargar" del menú superior

    Ejercicio 3.3.3 SISTEMA PASO TODO

    Para ver el ejercicio y el gráfico seleccione la opción "Descargar" del menú superior

    Ejercicio 3.4.2 RESPUESTA EN FRECUENCIA DE POLOS

    Para ver el ejercicio y el gráfico seleccione la opción "Descargar" del menú superior

    Ejercicio 3.4.3 APLICACION: DISEÑO DE FILTROS EN HENDIDURA

    Para ver el ejercicio y el gráfico seleccione la opción "Descargar" del menú superior

    David Savall Climent

    20 de mayo de 2003