Departamento de Eléctrica y Electrónica
Sistemas de Comunicación
Laboratorio 1: Amplitud Modulada
Autor: Andrés Galarza
2025
Sangolquí - Pichincha
Tema: Amplitud Modulas en Matlab
Objetivos:
Objetivo general:
• Implementar y analizar una simulación digital de la modulación en
amplitud (AM), utilizando MATLAB y una interfaz gráfica (GUI).
Objetivos específicos:
• Diseñar una interfaz gráfica intuitiva que permita ingresar parámetros de
modulación y seleccionar la señal de entrada.
• Simular el proceso de modulación AM con señales senoidales y con audio real.
• Visualizar en tiempo real la señal moduladora, la portadora y la señal modulada.
• Evaluar el índice de modulación y clasificar el tipo de modulación según su
porcentaje.
• Facilitar la comprensión del comportamiento temporal de las señales
involucradas en el proceso de modulación.
Marco teórico:
La Modulación en Amplitud (AM) es una técnica fundamental en comunicaciones
analógicas, en la que la amplitud de una señal portadora se modifica
proporcionalmente con una señal moduladora que contiene la información.
Señal de Portadora:
Es una señal de alta frecuencia que actúa como portadora de la información. Se
expresa matemáticamente como:
𝑐(𝑡) = 𝐴𝑐 ∗ 𝑐𝑜𝑠(2𝜋 ∗ 𝑓𝑐 ∗ 𝑡)
Donde:
• 𝐴𝑐 : amplitud de la portadora.
• 𝑓𝑐 : frecuencia de la portadora.
Señal Moduladora:
Es la señal que contiene la información que se desea transmitir. En este proyecto
puede ser:
• Una señal senoidal:𝑚(𝑡) = 𝐴𝑚 ∗ 𝑐𝑜𝑠(2𝜋 ∗ 𝑓𝑚 ∗ 𝑡)
• Una señal de audio real (grabada o cargada).
Señal Modulada AM
La señal resultante de la modulación AM es:
𝑠(𝑡) = [𝐴𝑐 + 𝑚(𝑡)] ∗ 𝑐𝑜𝑠(2𝜋 ∗ 𝑓𝑐 ∗ 𝑡)
Esta expresión representa una señal portadora cuya amplitud varía con el valor
instantáneo de la señal moduladora.
Índice de Modulación
El índice de modulación 𝜇 se define como:
𝐴𝑚
𝜇=
𝐴𝑐
Este valor determina la profundidad de la modulación:
• Si 𝜇 < 1: modulación submodulada.
• Si 𝜇 = 1: modulación ideal (100%).
• Si 𝜇 > 1: sobremodulación (provoca distorsión).
Desarrollo:
Resultado 1:
Resultado 2:
Resultado 3:
Análisis de resultados:
Resultado 1:
Parámetros utilizados:
• fm = 800 Hz (frecuencia de la señal moduladora)
• fc = 8000 Hz (frecuencia de la portadora)
• Am = 1 V (amplitud de la señal moduladora)
• Ac = 5 V (amplitud de la portadora)
Observaciones:
• La señal moduladora (azul, parte superior) es una onda senoidal de 800 Hz.
• La señal portadora (rojo, parte media) es una señal de alta frecuencia (8000
Hz) y amplitud constante.
• La señal modulada (verde, parte inferior) muestra claramente la envolvente
de la señal senoidal.
Índice de modulación:
El programa calcula y muestra un porcentaje de modulación del 20%, lo cual
indica:
• Una modulación submodulada (μ < 1).
• La señal portadora no está completamente modulada, lo que evita
distorsiones, pero reduce la eficiencia en la transmisión de información.
Resultado 2:
Parámetros utilizados:
• fm = 800 Hz (irrelevante aquí porque se usa audio real)
• fc = 8000 Hz
• Am = 1 V
• Ac = 1 V
Observaciones:
• La señal moduladora (azul, parte superior) corresponde a un audio
cargado. Se aprecia una forma de onda compleja y asimétrica, característica
de señales de voz o música.
• La señal portadora (rojo) se mantiene como una onda cosenoidal de alta
frecuencia.
• La señal modulada (verde) refleja la envolvente impuesta por la señal de
audio, con variaciones notorias a lo largo del tiempo.
Índice de modulación:
• El porcentaje de modulación mostrado es 96.6%, muy cercano al 100%, lo
que representa una modulación casi ideal.
• Este valor es adecuado para una buena transferencia de la información sin
llegar a la sobremodulación, que puede causar distorsión.
Resultado 3:
Parámetros utilizados:
• fm = 800 Hz (irrelevante aquí porque se usa audio real)
• fc = 8000 Hz
• Am = 2 V
• Ac = 2 V
Observaciones:
• La señal moduladora (azul, parte superior) corresponde a un audio real,
con una forma de onda irregular y asimétrica, típica de voz o sonido
ambiental.
• La señal portadora (roja, parte media) se mantiene como una onda
cosenoidal de frecuencia fija (8000 Hz), constante en su amplitud.
• La señal modulada (verde, parte inferior) presenta una envolvente que
sigue con claridad la forma del audio, lo cual indica una modulación
efectiva.
Índice de modulación:
• El porcentaje de modulación mostrado es 100.0%, lo que representa una
modulación ideal.
• En esta condición, la envolvente de la señal modulada reproduce fielmente
el contenido del mensaje sin distorsión, logrando el equilibrio justo entre
eficiencia y fidelidad.
Conclusiones:
• Se logró diseñar una interfaz gráfica (GUI) intuitiva y funcional,
permitiendo al usuario ingresar parámetros como frecuencias, amplitudes y
seleccionar la señal de entrada, ya sea una senoidal o un audio real grabado
o cargado.
• La interfaz simula de forma efectiva la modulación en amplitud (AM),
mostrando resultados tanto para señales senoidales como para señales de
audio real, lo que permite estudiar distintos comportamientos del sistema de
modulación.
• Se implementó una visualización clara y en tiempo real de las tres señales
clave del proceso: la señal moduladora, la portadora y la señal modulada.
Esto facilita el análisis comparativo y la interpretación de la modulación
aplicada.
• Se incorporó un cálculo automático del índice de modulación (µ),
expresado como porcentaje, y su correspondiente clasificación (modulada,
ideal o sobremodulada), permitiendo evaluar la eficiencia de la modulación
aplicada en cada caso.
• La herramienta desarrollada cumple con el objetivo de facilitar la
comprensión del comportamiento temporal de las señales involucradas,
permitiendo ver cómo la envolvente de la señal modulada cambia en función
de la señal de entrada.
• En conjunto, la GUI representa una herramienta educativa útil y efectiva
para estudiantes o interesados en comunicaciones analógicas, al
proporcionar una experiencia interactiva y visualmente clara sobre el
fenómeno de modulación AM.
Recomendaciones:
• Incorporar funciones de demodulación:
Para cerrar el ciclo del proceso AM, se recomienda agregar la opción de
demodular la señal modulada y recuperar el mensaje original. Esto
permitiría comprobar la fidelidad de la transmisión y enriquecer el
aprendizaje del sistema AM completo.
• Permitir ajustes dinámicos durante la simulación:
Sería útil habilitar cambios en los parámetros (como Am, Ac, fc) sin
necesidad de reiniciar la simulación. Esto permitiría observar en tiempo real
cómo afecta cada parámetro a la forma de la señal modulada.
• Agregar visualización en el dominio de la frecuencia:
Incluir un análisis espectral (por ejemplo, usando FFT) permitiría a los
usuarios observar la distribución de frecuencias de las señales moduladora
y modulada, lo que aportaría una comprensión más completa del proceso de
modulación.
• Ampliar compatibilidad de audio y duración de grabación:
Se recomienda permitir cargar archivos de audio más largos y con diferentes
tasas de muestreo, así como extender la duración de grabación, para analizar
señales más complejas o situaciones más reales de modulación.
Referencias bibliográficas:
• Haykin, S. (2014). Communication Systems (5th ed.). Wiley.
• B. P. Lathi, Zhi Ding (2010). Modern Digital and Analog Communication
Systems (4th ed.). Oxford University Press.
• Carlos M. de Cusatis. (2007). Comunicaciones Analógicas y Digitales
(3ra Ed.). McGraw-Hill.
Anexos:
function AM_GUI
% Crear figura
f = figure('Name', 'Modulación AM con Audio', 'Position', [100,
100, 1000, 550]);
% Panel lateral para parámetros
panel = uipanel(f, 'Title', 'Parámetros', 'FontSize', 12,
'Position', [0.02 0.1 0.26 0.85]);
% Campos de entrada
uicontrol(panel, 'Style', 'text', 'Position', [10, 330, 100, 20],
'String', 'fm (Hz):', 'HorizontalAlignment', 'left');
fmBox = uicontrol(panel, 'Style', 'edit', 'Position', [110, 330,
80, 25], 'String', '800');
uicontrol(panel, 'Style', 'text', 'Position', [10, 290, 100, 20],
'String', 'fc (Hz):', 'HorizontalAlignment', 'left');
fcBox = uicontrol(panel, 'Style', 'edit', 'Position', [110, 290,
80, 25], 'String', '8000');
uicontrol(panel, 'Style', 'text', 'Position', [10, 250, 100, 20],
'String', 'Am (V):', 'HorizontalAlignment', 'left');
AmBox = uicontrol(panel, 'Style', 'edit', 'Position', [110, 250,
80, 25], 'String', '1');
uicontrol(panel, 'Style', 'text', 'Position', [10, 210, 100, 20],
'String', 'Ac (V):', 'HorizontalAlignment', 'left');
AcBox = uicontrol(panel, 'Style', 'edit', 'Position', [110, 210,
80, 25], 'String', '5');
30], 'Callback', @grabarAudioCallback);
uicontrol(panel, 'Style', 'pushbutton', 'String', 'Cargar Audio
(.wav)', 'Position', [40, 80, 120, 30], 'Callback',
@cargarAudioCallback);
uicontrol(panel, 'Style', 'pushbutton', 'String', 'Reproducir
% Botones
uicontrol(panel, 'Style', 'pushbutton', 'String', 'Graficar',
'Position', [50, 160, 100, 30], 'Callback', @graficarCallback);
uicontrol(panel, 'Style', 'pushbutton', 'String', 'Grabar Audio
(2s)', 'Position', [40, 120, 120, 30], 'Callback',
@grabarAudioCallback);
uicontrol(panel, 'Style', 'pushbutton', 'String', 'Cargar Audio
(.wav)', 'Position', [40, 80, 120, 30], 'Callback',
@cargarAudioCallback);
uicontrol(panel, 'Style', 'pushbutton', 'String', 'Reproducir
Audio', 'Position', [40, 40, 120, 30], 'Callback',
@reproducirAudioCallback);
% Etiqueta de resultado
resultadoLabel = uicontrol(panel, 'Style', 'text', 'Position', [10,
5, 180, 30], 'FontSize', 10, 'ForegroundColor', 'blue', 'String', '');
% Axes para graficar
ax1 = axes('Parent', f, 'Position', [0.35 0.70 0.6 0.25]);
ax2 = axes('Parent', f, 'Position', [0.35 0.40 0.6 0.25]);
ax3 = axes('Parent', f, 'Position', [0.35 0.10 0.6 0.25]);
% Variable persistente
audioGrabado = [];
%% --- Funciones internas ---
function grabarAudioCallback(~, ~)
Fs = 16000;
dur = 2;
recObj = audiorecorder(Fs, 16, 1);
msgbox('Grabando... Habla ahora.', 'Grabación');
recordblocking(recObj, dur);
msgbox('Grabación terminada.');
audioGrabado = getaudiodata(recObj)';
end
function cargarAudioCallback(~, ~)
[file, path] = uigetfile('*.wav', 'Selecciona un archivo de
audio');
if isequal(file, 0), return; end
[y, ~] = audioread(fullfile(path, file));
audioGrabado = y(:, 1)';
msgbox('Audio cargado correctamente.');
end
function reproducirAudioCallback(~, ~)
if isempty(audioGrabado)
warndlg('Primero graba o carga un audio.', 'Audio no
disponible');
return;
end
Fs = 16000;
sound(audioGrabado, Fs);
end
function graficarCallback(~, ~)
fm = str2double(fmBox.String);
fc = str2double(fcBox.String);
Am = str2double(AmBox.String);
Ac = str2double(AcBox.String);
if Ac == 0
errordlg('Ac no puede ser cero.');
return;
end
Fs = 16 * fc;
dur_mostrar = 0.01;
muestras_mostrar = round(dur_mostrar * Fs);
if isempty(audioGrabado)
t = 0:1/Fs:dur_mostrar;
m_t = Am * cos(2 * pi * fm * t);
else
% Normalizar y escalar respecto a Ac
audioReescalado = audioGrabado / max(abs(audioGrabado));
m_t = Am * audioReescalado * Ac; % CORRECCIÓN aplicada aquí
if length(m_t) < muestras_mostrar
m_t = [m_t, zeros(1, muestras_mostrar - length(m_t))];
else
m_t = m_t(1:muestras_mostrar);
end
t = (0:length(m_t)-1) / Fs;
end
% Portadora y modulación
c_t = Ac * cos(2 * pi * fc * t);
mu = max(abs(m_t)) / Ac;
s_t = (Ac + m_t) .* cos(2 * pi * fc * t);
% Mostrar % de modulación
porcentaje = mu * 100;
if mu < 1
estado = 'Modulada';
elseif mu == 1
estado = 'Ideal';
else
estado = 'Sobremodulada';
end
resultadoLabel.String = sprintf('%% Modulación: %.1f%% → %s',
porcentaje, estado);
% Graficar señales
plot(ax1, t, m_t, 'b');
title(ax1, 'Señal Moduladora'); ylabel(ax1, 'Amplitud');
xlabel(ax1, 'Tiempo [s]'); grid(ax1, 'on');
plot(ax2, t, c_t, 'r');
title(ax2, 'Señal Portadora'); ylabel(ax2, 'Amplitud');
xlabel(ax2, 'Tiempo [s]'); grid(ax2, 'on');
plot(ax3, t, s_t, 'g');
title(ax3, 'Señal AM Modulada'); ylabel(ax3, 'Amplitud');
xlabel(ax3, 'Tiempo [s]'); grid(ax3, 'on');
end
end