8 junio, 2024

IsProto

Soluciones para Redes e Internet

ECE 310 – Procesamiento de Señales Digitales: Ejemplos y Ejercicios

ECE 310

ECE 310, también conocido como “Procesamiento de Señales Digitales”, es un curso fundamental en los programas de Ingeniería Eléctrica y de Computación. Este curso introduce a los estudiantes a los conceptos y técnicas clave utilizados en el procesamiento de señales digitales, un área crucial para el desarrollo de tecnologías modernas como las telecomunicaciones, la ingeniería de audio, y el análisis de datos. En este artículo, exploraremos los objetivos del curso, su contenido, aplicaciones prácticas, y su importancia en el campo de la ingeniería.

Objetivos del Curso

El curso ECE 310 tiene varios objetivos clave:

  1. Comprender los Fundamentos del Procesamiento de Señales Digitales: Los estudiantes aprenderán los principios básicos de cómo se procesan las señales digitales, incluyendo la teoría de muestreo y la cuantificación de señales.
  2. Diseñar y Analizar Filtros Digitales: Los estudiantes adquirirán habilidades en el diseño y análisis de filtros digitales, esenciales para el procesamiento efectivo de señales.
  3. Implementación Práctica: El curso proporciona una base para la implementación práctica de algoritmos de procesamiento de señales en hardware y software.
  4. Aplicaciones Reales: Los estudiantes explorarán aplicaciones prácticas del procesamiento de señales digitales en diversas industrias.

Contenido del Curso

ECE 310 cubre una amplia gama de temas esenciales para el procesamiento de señales digitales:

Teoría de Muestreo y Reconstrucción:

  • Muestreo de señales analógicas.
  • Teorema de Nyquist-Shannon.
  • Reconstrucción de señales a partir de muestras.

Transformada de Fourier Discreta (DFT):

  • Definición y propiedades de la DFT.
  • Algoritmo de la Transformada Rápida de Fourier (FFT).
  • Aplicaciones de la DFT en el análisis de señales.

Filtros Digitales:

  • Filtros de respuesta finita al impulso (FIR).
  • Filtros de respuesta infinita al impulso (IIR).
  • Diseño y análisis de filtros digitales.

Z-Transformada:

  • Definición y propiedades de la Z-transformada.
  • Análisis de sistemas lineales e invariantes en el tiempo (LTI).
  • Aplicación de la Z-transformada en el diseño de filtros.

Procesamiento Multitasa:

  • Muestreo a diferentes tasas.
  • Conversión de tasas de muestreo.
  • Aplicaciones en compresión y transmisión de datos.

Aplicaciones Prácticas

El procesamiento de señales digitales tiene aplicaciones en una amplia variedad de campos:

Telecomunicaciones:

  • Modulación y demodulación de señales.
  • Compresión de datos.
  • Cancelación de eco y supresión de ruido.

Ingeniería de Audio:

  • Procesamiento de efectos de audio.
  • Reconocimiento y síntesis de voz.
  • Mejora de la calidad del sonido.

Imagen y Video:

  • Compresión de imágenes y videos.
  • Mejora y restauración de imágenes.
  • Reconocimiento de patrones y análisis de imágenes.

Biomedicina:

  • Análisis de señales biomédicas (ECG, EEG).
  • Imágenes médicas (MRI, CT).
  • Detección y diagnóstico asistidos por computadora.

Códigos de Ejemplo para ECE 310 – Procesamiento de Señales Digitales

A continuación se presentan varios códigos de ejemplo que ilustran conceptos clave del procesamiento de señales digitales. Estos ejemplos están escritos en MATLAB y Python, dos lenguajes de programación comunes en el ámbito académico y profesional para el procesamiento de señales.

Ejemplo 1: Filtro Digital de Audio

Descripción: Implementar un filtro de paso bajo para eliminar el ruido de una señal de audio.

MATLAB:

% Generar una señal de audio con ruido
fs = 44100; % Frecuencia de muestreo
t = 0:1/fs:5; % Vector de tiempo
audio = sin(2*pi*1000*t) + 0.5*randn(size(t)); % Señal de audio con ruido

% Diseño del filtro de paso bajo
fc = 1500; % Frecuencia de corte
[b, a] = butter(6, fc/(fs/2)); % Filtro Butterworth de orden 6

% Aplicación del filtro
filtered_audio = filter(b, a, audio);

% Gráficas
figure;
subplot(2,1,1);
plot(t, audio);
title('Audio con Ruido');
subplot(2,1,2);
plot(t, filtered_audio);
title('Audio Filtrado');

% Reproducir los audios
sound(audio, fs);
pause(6);
sound(filtered_audio, fs);

Python:

import numpy as np
import scipy.signal as signal
import matplotlib.pyplot as plt
from scipy.io import wavfile

# Generar una señal de audio con ruido
fs = 44100  # Frecuencia de muestreo
t = np.linspace(0, 5, fs * 5)  # Vector de tiempo
audio = np.sin(2 * np.pi * 1000 * t) + 0.5 * np.random.randn(len(t))  # Señal de audio con ruido

# Diseño del filtro de paso bajo
fc = 1500  # Frecuencia de corte
b, a = signal.butter(6, fc / (fs / 2), 'low')  # Filtro Butterworth de orden 6

# Aplicación del filtro
filtered_audio = signal.lfilter(b, a, audio)

# Gráficas
plt.figure()
plt.subplot(2, 1, 1)
plt.plot(t, audio)
plt.title('Audio con Ruido')
plt.subplot(2, 1, 2)
plt.plot(t, filtered_audio)
plt.title('Audio Filtrado')
plt.show()

Ejemplo 2: Transformada de Fourier Discreta (DFT)

Descripción: Calcular y graficar la DFT de una señal de audio.

MATLAB:

% Generar una señal de audio
fs = 1000; % Frecuencia de muestreo
t = 0:1/fs:1-1/fs; % Vector de tiempo
audio = sin(2*pi*50*t) + sin(2*pi*120*t); % Señal de audio

% Calcular la DFT
n = length(audio);
f = (0:n-1)*(fs/n); % Vector de frecuencia
audio_dft = fft(audio);

% Gráfica
figure;
plot(f, abs(audio_dft));
title('Magnitud de la DFT');
xlabel('Frecuencia (Hz)');
ylabel('Magnitud');

Python:

import numpy as np
import matplotlib.pyplot as plt

# Generar una señal de audio
fs = 1000  # Frecuencia de muestreo
t  = np.linspace(0, 1, fs, endpoint=False)  # Vector de tiempo
audio = np.sin(2 * np.pi * 50 * t) + np.sin(2 * np.pi * 120 * t)  # Señal de audio

# Calcular la DFT
audio_dft = np.fft.fft(audio)
f = np.fft.fftfreq(len(audio), 1/fs)  # Vector de frecuencia

# Gráfica
plt.figure()
plt.plot(f, np.abs(audio_dft))
plt.title('Magnitud de la DFT')
plt.xlabel('Frecuencia (Hz)')
plt.ylabel('Magnitud')
plt.show() 

Ejemplo 3: Detección de Picos en Señales ECG

Descripción: Detectar picos en una señal ECG para calcular la frecuencia cardiaca.

MATLAB:

% Cargar señal ECG de ejemplo
load('ECGData.mat'); % Supone que tienes un archivo con datos ECG

% Detección de picos
[pks, locs] = findpeaks(ecg, 'MinPeakHeight', 0.5, 'MinPeakDistance', 200);

% Calcular frecuencia cardiaca
RR_intervals = diff(locs) / fs;
heart_rate = 60 ./ RR_intervals;

% Gráfica
figure;
plot(ecg);
hold on;
plot(locs, pks, 'ro');
title('Señal ECG con Picos Detectados');
xlabel('Muestras');
ylabel('Amplitud');

Python:

import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import find_peaks

# Supone que tienes una señal ECG cargada en la variable `ecg`
# Aquí usamos una señal de ejemplo
fs = 1000  # Frecuencia de muestreo
t = np.linspace(0, 10, fs * 10)
ecg = np.sin(1.7 * np.pi * t) + np.random.normal(0, 0.1, len(t))

# Detección de picos
peaks, _ = find_peaks(ecg, height=0.5, distance=200)

# Calcular frecuencia cardiaca
RR_intervals = np.diff(peaks) / fs
heart_rate = 60 / RR_intervals

# Gráfica
plt.figure()
plt.plot(ecg)
plt.plot(peaks, ecg[peaks], 'ro')
plt.title('Señal ECG con Picos Detectados')
plt.xlabel('Muestras')
plt.ylabel('Amplitud')
plt.show()

Ejercicios del curso ECE 310 – Procesamiento de Señales Digitales

Ejercicio 1: Filtro Digital de Audio

Descripción del Proyecto:
Desarrollar un filtro digital para mejorar la calidad del audio en una grabación.

Pasos del Desarrollo:

  1. Grabación de Audio: Obtener una muestra de audio con ruido de fondo.
  2. Análisis de Señales: Utilizar la Transformada de Fourier para analizar las frecuencias presentes en la señal de audio.
  3. Diseño del Filtro: Diseñar un filtro FIR o IIR que atenúe las frecuencias de ruido.
  4. Implementación: Implementar el filtro utilizando MATLAB o Python.
  5. Aplicación del Filtro: Aplicar el filtro a la señal de audio y evaluar la mejora en la calidad.

Herramientas Utilizadas:

  • MATLAB o Python (con bibliotecas NumPy y SciPy).
  • Audacity para grabación y evaluación de audio.

Resultados Esperados:
Mejora significativa en la claridad de la grabación de audio, con el ruido de fondo reducido o eliminado.

Ejercicio 2: Sistema de Reconocimiento de Voz

Descripción del Proyecto:
Desarrollar un sistema básico de reconocimiento de voz que pueda identificar palabras específicas.

Pasos del Desarrollo:

  1. Recolectar Datos de Voz: Grabar múltiples ejemplos de palabras específicas (por ejemplo, “sí”, “no”).
  2. Preprocesamiento de Señales: Utilizar técnicas de procesamiento de señales para normalizar y filtrar las grabaciones.
  3. Extracción de Características: Extraer características relevantes de las señales de voz utilizando la Transformada de Fourier o la Transformada de Mel-Frecuencia (MFCC).
  4. Entrenamiento del Modelo: Entrenar un modelo de clasificación, como una Red Neuronal Artificial (ANN) o un modelo de Support Vector Machine (SVM), con las características extraídas.
  5. Evaluación del Sistema: Probar el sistema con nuevas grabaciones para evaluar su precisión y capacidad de reconocimiento.

Herramientas Utilizadas:

  • Python (con bibliotecas como NumPy, SciPy, librosa y scikit-learn).
  • MATLAB para análisis inicial y prototipado rápido.

Resultados Esperados:
Un sistema capaz de reconocer palabras específicas con una alta tasa de precisión.

Ejercicio 3: Compresión de Imágenes usando DCT

Descripción del Proyecto:
Implementar un sistema de compresión de imágenes utilizando la Transformada Discreta del Coseno (DCT).

Pasos del Desarrollo:

  1. Obtener una Imagen: Usar una imagen en formato estándar (por ejemplo, JPEG).
  2. Aplicar la DCT: Aplicar la DCT a bloques de 8×8 píxeles de la imagen para transformarla al dominio de la frecuencia.
  3. Cuantización: Cuantizar los coeficientes DCT para reducir la cantidad de datos.
  4. Codificación: Codificar los coeficientes cuantizados utilizando un esquema de compresión como Huffman o RLE.
  5. Descompresión: Invertir el proceso para reconstruir la imagen comprimida y compararla con la original.

Herramientas Utilizadas:

  • MATLAB o Python (con bibliotecas como NumPy, OpenCV).
  • Herramientas de visualización para comparar la calidad de imagen antes y después de la compresión.

Resultados Esperados:
Reducción significativa del tamaño de la imagen con mínima pérdida de calidad visual.

Ejercicio 4: Detección de Frecuencia Cardiaca con Señales ECG

Descripción del Proyecto:
Desarrollar un sistema para detectar la frecuencia cardiaca a partir de señales electrocardiográficas (ECG).

Pasos del Desarrollo:

  1. Recolectar Señales ECG: Obtener datos de señales ECG (puede ser de bases de datos públicas).
  2. Filtrado de Señales: Filtrar la señal para eliminar ruido e interferencias.
  3. Detección de Picos R: Utilizar técnicas de detección de picos para identificar las ondas R en la señal ECG.
  4. Cálculo de Frecuencia Cardiaca: Calcular el intervalo R-R y determinar la frecuencia cardiaca en latidos por minuto (BPM).
  5. Visualización: Graficar la señal ECG y la detección de picos para validar el sistema.

Herramientas Utilizadas:

  • MATLAB o Python (con bibliotecas como NumPy, SciPy y matplotlib).
  • Bases de datos públicas de señales ECG, como PhysioNet.

Resultados Esperados:
Un sistema capaz de detectar la frecuencia cardiaca con alta precisión a partir de datos de señales ECG.

Importancia del Curso

ECE 310 es un curso fundamental que prepara a los estudiantes para enfrentar desafíos en una amplia gama de industrias tecnológicas. El conocimiento y las habilidades adquiridas en este curso son esenciales para el desarrollo de soluciones innovadoras en telecomunicaciones, multimedia, biomedicina y otras áreas. Además, el curso proporciona una base sólida para estudios avanzados y especialización en procesamiento de señales digitales y campos relacionados.

Conclusión

El curso ECE 310 – Procesamiento de Señales Digitales, es una piedra angular en la formación de ingenieros eléctricos y de computación. Proporciona a los estudiantes las herramientas teóricas y prácticas necesarias para entender y aplicar técnicas de procesamiento de señales en diversas aplicaciones tecnológicas. Con una sólida comprensión de los principios y técnicas aprendidas en este curso, los estudiantes están bien equipados para contribuir al avance de la tecnología en múltiples campos.

Recursos Adicionales

  • Libros Recomendados:
  • “Digital Signal Processing: Principles, Algorithms, and Applications” de John G. Proakis y Dimitris G. Manolakis.
  • “Discrete-Time Signal Processing” de Alan V. Oppenheim y Ronald W. Schafer.
  • Herramientas de Software:
  • MATLAB
  • Python (bibliotecas como NumPy, SciPy, y libros como “Think DSP” de Allen B. Downey)
  • Cursos en Línea:
  • Coursera y edX ofrecen cursos sobre procesamiento de señales digitales de universidades reconocidas.

Con estos recursos y una comprensión profunda de los contenidos del curso, los estudiantes pueden seguir explorando y aplicando el procesamiento de señales digitales en sus futuras carreras profesionales.