Onda senoidal en MATLAB: código para graficarla paso a paso
Graficar una onda senoidal es el "hola mundo" del procesamiento de señales en MATLAB. Con unas pocas líneas puedes ver cómo cambian la amplitud, la frecuencia y la fase, y entender conceptos que luego usarás en filtros, audio y comunicaciones. En este post te explico el código original que publiqué para mis estudiantes, corrijo un par de detalles y te muestro una versión más clara y fácil de modificar.
La ecuación de la onda senoidal
y(t) = A · sin(2π · f · t + φ)
- A (amplitud): el valor máximo de la onda.
- f (frecuencia): cuántos ciclos completos hay en un segundo, en hertz. El período es T = 1/f.
- φ (fase): desplazamiento horizontal de la onda, en radianes.
- t: el tiempo en segundos.
Ejemplo: con f = 50 Hz, el período es T = 1/50 = 0,02 s = 20 ms. En 40 ms se ven dos ciclos completos.
El código original
Este es el programa tal como lo compartí, con la corrección del mensaje que pide la fase (antes decía "amplitud" por error):
% Onda senoidal - Luis Carlos
clc
clear all
close all
a = input('Ingrese el valor de amplitud de la función A = '); % amplitud
f = input('Ingrese el valor de frecuencia de la función en Hz F = '); % frecuencia
p = input('Ingrese el valor de la fase en radianes P = '); % fase
w = 0:2*pi/100:2*pi; % vector de ángulo de 0 a 2*pi con 101 puntos
t = w/(pi*f); % ajuste del eje x para ver dos períodos
Y = a*sin(2*w + p);
plot(t,Y)
Y este es el resultado para un ejemplo de valores:
¿Por qué funciona ese "truco" con w y t?
El código no usa directamente la ecuación con 2πft, pero llega al mismo resultado. Como t = w/(π·f), despejando queda w = π·f·t. Al reemplazar en sin(2w + p) obtenemos sin(2π·f·t + p), que es exactamente la onda de frecuencia f. Y como w va de 0 a 2π, t va de 0 a 2/f: dos períodos completos, sea cual sea la frecuencia.
Versión mejorada y más clara
Para aprender, es mejor que el código se parezca a la ecuación. Esta versión define el tiempo directamente, usa una frecuencia de muestreo y rotula la gráfica:
clc; clear; close all;
A = 2; % amplitud (V)
f = 50; % frecuencia (Hz)
phi = pi/4; % fase (rad)
ciclos = 2; % número de períodos a mostrar
fs = 100*f; % 100 muestras por período
t = 0 : 1/fs : ciclos/f; % vector de tiempo
y = A*sin(2*pi*f*t + phi);
plot(t*1000, y, 'LineWidth', 1.5); grid on;
xlabel('Tiempo (ms)'); ylabel('Amplitud (V)');
title(sprintf('y(t) = %.1f sin(2\\pi %g t + %.2f)', A, f, phi));
Si prefieres seguir pidiendo los datos por teclado, cambia las tres primeras asignaciones por input, como en el código original.
Explicación línea por línea
- fs = 100*f: tomamos 100 puntos por cada ciclo para que la curva se vea suave.
- t = 0:1/fs:ciclos/f: crea el vector de tiempo desde 0 hasta el final del segundo período.
- y = A*sin(2*pi*f*t + phi): la ecuación de la onda aplicada a todos los puntos a la vez (operación vectorial).
- plot(t*1000, y): grafica en milisegundos, que es más cómodo para frecuencias de audio y de la red eléctrica.
Experimentos para entender cada parámetro
- Cambia A de 2 a 5: la onda crece verticalmente, pero cruza el cero en los mismos instantes.
- Cambia f de 50 a 100: en el mismo tiempo ves el doble de ciclos.
- Cambia φ a π/2: la onda empieza en su valor máximo; acabas de convertir el seno en un coseno.
- Suma dos ondas:
y = sin(2*pi*50*t) + 0.5*sin(2*pi*150*t);y observa cómo aparece una forma de onda distorsionada. Así se entienden los armónicos.
Comparar dos señales desfasadas
f = 60; fs = 100*f; t = 0:1/fs:2/f;
v = 170*sin(2*pi*f*t); % tensión
ic = 10*sin(2*pi*f*t - pi/6); % corriente atrasada 30°
plot(t*1000, v, t*1000, 10*ic); grid on;
legend('v(t)', '10 \times i(t)'); xlabel('Tiempo (ms)');
Este ejemplo representa una carga inductiva en una red de 60 Hz como la de Colombia: la corriente se atrasa respecto a la tensión. Multiplicamos la corriente por 10 solo para que se vea en la misma escala.
Errores comunes
- La onda se ve como triángulos: hay muy pocos puntos. Aumenta fs (más muestras por período).
- Aparece una sola línea o una gráfica rara: escribiste
*donde iba.*al multiplicar dos vectores. Con escalares*está bien; entre vectores usa.*. - La fase no hace lo esperado: MATLAB trabaja en radianes. Para usar grados, convierte con
deg2rad(30)o usasind. - Ves menos ciclos de los esperados: revisa que el tiempo final sea ciclos/f.
Preguntas frecuentes
¿Cuál es la diferencia entre seno y coseno?
Solo la fase: cos(x) = sin(x + π/2). Son la misma forma de onda desplazada un cuarto de período.
¿Cómo escucho la onda?
Genera t con una frecuencia de muestreo de audio, por ejemplo fs = 8000 Hz y 1 s de duración, y usa sound(0.5*sin(2*pi*440*t), 8000). Escucharás la nota La de 440 Hz.
¿Qué es la frecuencia angular ω?
Es ω = 2πf, en radianes por segundo. Para 60 Hz, ω ≈ 377 rad/s.
El siguiente paso natural es filtrar señales: mira la señal senoidal con filtro pasa banda en MATLAB. Y para analizar sus frecuencias, la FFT en MATLAB.
Conclusión
Una onda senoidal en MATLAB se genera con A*sin(2*pi*f*t + phi) sobre un vector de tiempo bien muestreado. El código original llega al mismo resultado con un cambio de variable ingenioso, pero escribir la ecuación tal cual hace el programa más fácil de entender y de modificar.

Comentarios