Sei sulla pagina 1di 13

Deber Final Procesamiento Digital de Seales

Maestra en Telecomunicaciones 5ta. Promocin


Diciembre 2015
Nombre: Luis Fabricio Silva Cruz
Tema 1
Debido a una falla en la conexin, la seal de un electrocardigrafo
digital se ve contaminada con interferencia de 60Hz proveniente de
la alimentacin elctrica. (Esta seal est en el archivo
proporcionado). Esta seal fue muestreada a 500Hz. Dado que
60Hz
tambin
existen
componentes
de
frecuencia
del
electrocardiograma, se le pide que implemente un filtro que elimine
la interferencia alterando lo menos posible la seal. Presentar: la
seal original en tiempo y frecuencia, la respuesta en frecuencia del
filtro y aplicarlo a la seal y la seal filtrada graficada en tiempo y
frecuencia. (Recomendacin: utilice fdatool para disear el filtro
deseado).
a.) Seal original:
>> load('tema1.mat')
>> plot (ecg)

>> spectrogram(ecg,128,120,128,500)

b.) Filtro Generado: Filtro Notching


Aplicaremos un Filtro Corta Banda tipo Notching, el cual permite
cortar frecuencias especificas con la flexibilidad de un ancho de
banda en el cual se puede definir el ancho del corte realizado.
function Hd = Notch_60hz
%NOTCH_60HZ Returns a discrete-time filter object.
% MATLAB Code
% Generated by MATLAB(R) 8.5 and the DSP System Toolbox 9.0.
% Generated on: 09-Dec-2015 20:29:26
% IIR Notching filter designed using the IIRNOTCH function.
% All frequency values are in Hz.
Fs = 500; % Sampling Frequency
Fnotch = 60;
BW
= 10;
Apass = 1;

% Notch Frequency
% Bandwidth
% Bandwidth Attenuation

[b, a] = iirnotch(Fnotch/(Fs/2), BW/(Fs/2), Apass);


Hd
= dfilt.df2(b, a);
% [EOF]

c.) Respuesta en Frecuencia del Filtro generado:


Como vemos, nuestro filtro cumple la funcion de eliminar
frecuencias a 60 HZ, manteniendo unas cuantas componentes que
forman parte de la seal.

d.) Seal resultante con filtro aplicado:

>>X=Notch_60hz;
>>ecgF=filter(X,ecg);
>>plot(ecgF)

>>spectrogram(ecgF,128,120,128,500)

Vemos que las frecuencias a 60 Hz han sido descartadas casi en su


totalidad sin afectar mayormente la forma de la seal. Tomar en

cuenta que al existir Frecuencias validas en el ECG en 60hz no ha


sido posible por ese motivo descartar toda la banda de frecuencia.
Tema 2
Se quiere construir un sistema de comunicacin de voz que utilice
una seal digital que se muestree a 16KHz. En esta seal se
trasmitir la voz en la banda de 0 a 4000 Hz y la sealizacin se
trasmitir fuera de banda, entre las frecuencias de 6000 a 7000 Hz.
Se le pide que disee un conjunto de filtros que sean capaces de
tomar la seal combinada y separar las dos componentes (voz y
sealizacin). Primero deber revisar si la seal en efecto contiene
estas dos componentes de frecuencia y adjuntar el grfico que lo
pruebe. Luego deber disear los filtros necesarios para extraer
cada una de las seales. Luego deber presentar el grfico de
frecuencias de estas dos seales por separado.
a.) Comprobacion de presencia de componentes de frecuencia:
>> load('tema2.mat');
>> spectrogram(senal,700,120,128,20000)

Como podemos visualizar, hasta los 4 Khz existen las componentes


de frecuencia relacionadas a la voz, y a partir de los 6 Khz los picos
que representan las componentes de sealizacin de la seal
entregada.
b.) Filtro para extraer componentes de voz
Para esta parte de la seal, decidimos disear un filtro pasabajo
equrriple (con fdatool) el cual permita pasar frecuencias de hasta 4
Khz y corte a 4.1 Khz, lo cual nos permitir tomar todas las
componentes de frecuencias de voz presentes en nuestra seal. La
atenuacin del filtro se la definio a -140 dB en vista de la atenuacin
de las componentes de frecuencia de acuerdo al grfico anterior.
El filtro generado es el siguiente:
function Hd = passB_equi_4k
%PASSB_EQUI_4K Returns a discrete-time filter object.
% MATLAB Code
% Generated by MATLAB(R) 8.5 and the DSP System Toolbox 9.0.
% Generated on: 10-Dec-2015 00:44:36
% Equiripple Lowpass filter designed using the FIRPM function.

% All frequency values are in Hz.


Fs = 16000; % Sampling Frequency
Fpass
Fstop
Dpass
Dstop
dens

=
=
=
=
=

4000;
4100;
0.00057564620966;
3.1622776602e-08;
20;

%
%
%
%
%

Passband Frequency
Stopband Frequency
Passband Ripple
Stopband Attenuation
Density Factor

% Calculate the order from the parameters using FIRPMORD.


[N, Fo, Ao, W] = firpmord([Fpass, Fstop]/(Fs/2), [1 0], [Dpass,
Dstop]);
% Calculate the coefficients using the FIRPM function.
b = firpm(N, Fo, Ao, W, {dens});
Hd = dfilt.dffir(b);
% [EOF]

El mismo que tiene el siguiente comportamiento de frecuencia:

Aplicamos el filtro para obtener las frecuencias de voz:


>> Y=passB_equi_4k;
>> voz=filter(Y.numerator,1,senal);

c.) Filtro para extraer componentes de sealizacin


Para este propsito seleccionamos un filtro pasa Banda equirriple
(generado con fdatool) el cual tiene una buena respuesta en
frecuencia y produce un rizado y velocidad de cada optimos para
nuestro propsito, asi tambin como la atenuacin luego del corte.
El filtro generado es el siguiente:
function Hd = passBand_equi_6_7k
%PASSBAND_EQUI_6_7K Returns a discrete-time filter object.
% MATLAB Code
% Generated by MATLAB(R) 8.5 and the DSP System Toolbox 9.0.
% Generated on: 10-Dec-2015 01:04:03

% Equiripple Bandpass filter designed using the FIRPM function.


% All frequency values are in Hz.
Fs = 16000; % Sampling Frequency
Fstop1
Fpass1
Fpass2
Fstop2
Dstop1
Dpass
Dstop2
dens

=
=
=
=
=
=
=
=

5900;
6000;
7000;
7100;
3.1622776602e-08;
0.0057563991496;
3.1622776602e-08;
20;

%
%
%
%
%
%
%
%

First Stopband Frequency


First Passband Frequency
Second Passband Frequency
Second Stopband Frequency
First Stopband Attenuation
Passband Ripple
Second Stopband Attenuation
Density Factor

% Calculate the order from the parameters using FIRPMORD.


[N, Fo, Ao, W] = firpmord([Fstop1 Fpass1 Fpass2 Fstop2]/(Fs/2), [0 1
...
0], [Dstop1 Dpass Dstop2]);
% Calculate the coefficients using the FIRPM function.
b = firpm(N, Fo, Ao, W, {dens});
Hd = dfilt.dffir(b);
% [EOF]

El mismo que tiene un comportamiento en frecuencia del siguiente


modo de acuerdo a los parmetros definidos:

Con el filtro generado, lo aplicamos a la senal proporcionada para


extraer los componentes de frecuencia entre 6000 y 7000 hz:
>> Z=passBand_equi_6_7k;
>> sign=filter(Z.numerator,1,senal);

d.) Grficos de frecuencias de seales voz y sign extradas de


seal inicial:

>>spectrogram(voz,2048,0,2048,16000,'yaxis')

>> spectrogram(sign,2048,0,2048,16000,'yaxis')

Tema 3

Se desea compensar el dao ocasionado por un canal de


transmisin. Para esto trasmitimos una seal aleatoria (Fs=8000Hz)
conocida a travs del canal (original) y luego capturamos la seal
luego de ser transmitida (modificada). Disee un filtro adaptivo que
pueda aprender a deshacer el dao ocasionado por el canal.
Presentar:
Coeficientes del filtro aprendido, la respuesta en
frecuencia del filtro y error de la ecualizacin. El filtro debe tener la
cantidad necesaria de puntos para que el error converja hacia 0. (La
seal original ya se encuentra desplazada la cantidad de tiempo que
toma a la seal atravesar el canal de comunicacin).
Recomendacin: utilizar el algoritmo LMS para el filtro adaptivo con
una salto de 0.005.
Creamos un filtro adaptativo, de acuerdo con las indicaciones,
tomamos la sugerencia de utilizar saltos de 0.05 (mu) en el
algoritmo LMS:
>> load ('tema3.mat')
>> mu=0.005;
>> ha=adaptfilt.lms(13,mu);
>> [y,e]=filter(ha,modificada,original);

A partir de esto, obtenemos:


a.) Los coeficientes del filtro aprendido:
>> h=ha.Coefficients;
>> stem(h)

b.) La respuesta en frecuencia del filtro es la siguiente:


>> fvtool(ha)

c.) El error de ecualizacion:


>> plot(e)

Como vemos, gracias a los puntos seleccionados en el algoritmo


LMU (13) hemos conseguido que el error converja hacia cero
manteniendo una respuesta suave en el comportamiento en
frecuencia del filtro.

Potrebbero piacerti anche