Guía de tecnologías

Operaciones básicas con señales de audio en Octave

5 min read Procesamiento de audio Actualizado 17 Oct 2025
Operaciones básicas con señales de audio en Octave
Operaciones básicas con señales de audio en Octave

Introducción

En el tutorial anterior vimos cómo leer, escribir y reproducir archivos de audio. También sintetizamos una señal periódica (coseno). Aquí veremos tres operaciones fundamentales sobre señales: suma, producto (multiplicación punto a punto) y multiplicación por un escalar. Estas operaciones son la base para análisis espectral, modulaciones y mezclas.

Definiciones breves:

  • Señal: función que representa una magnitud (por ejemplo, presión sonora) a lo largo del tiempo.
  • Frecuencia de muestreo: número de muestras por segundo (por ejemplo, 44100 Hz).
  • Modulación: proceso de variar una propiedad de una portadora (ej. amplitud) con otra señal.

Contenido y variantes de intención

Intención principal: mostrar cómo combinar y transformar señales en Octave. Variantes relacionadas: mezcla de pistas, ejemplo de modulación AM, tratamiento de amplitud, demostración gráfica, consejos de depuración.

Nota importante: Los fragmentos de código se pueden ejecutar directamente en Octave. Asegúrate de tener permisos de escritura en el directorio de trabajo.


1. Suma de señales

La suma de dos señales S1(t) y S2(t) produce R(t) = S1(t) + S2(t). El valor de R en cada instante es la suma de los valores de las señales en ese instante.

Generar dos señales de diferente frecuencia

>> sig1='cos440.ogg';                       %creating the audio file @440 Hz  
>> sig2='cos880.ogg';                       %creating the audio file @880 Hz  
>> fs=44100;                                %generating the parameters values (Period, sampling frequency and angular frequency)  
>> t=0:1/fs:0.02;  
>> w1=2*pi*440*t;  
>> w2=2*pi*880*t;  
>> audiowrite(sig1,cos(w1),fs);            %writing the function cos(w) on the files created  
>> audiowrite(sig2,cos(w2),fs);

Aquí se crean dos archivos de audio con frecuencias fundamentales de 440 Hz y 880 Hz y una frecuencia de muestreo de 44100 Hz.

Visualizar cada señal

>> [y1, fs] = audioread(sig1);  
>> plot(y1)

Gráfico de la señal de 440 Hz

>> [y2, fs] = audioread(sig2);  
>> plot(y2)

Gráfico de la señal de 880 Hz

Sumar las dos señales

>> sumres=y1+y2;  
>> plot(sumres)

Gráfico de la suma de señales

Efecto auditivo: la suma produce la superposición de ambas frecuencias. Si reproduces el archivo, escucharás ambas componentes simultáneamente.

Ejemplo real: mezcla de dos pistas vocales

Lectura y visualización de dos pistas de canto gregoriano.

>> [y1,fs]=audioread('avemaria_.ogg');  
>> plot(y1)

Pista Avemaría

>> [y2,fs]=audioread('hymnus.ogg');  
>> plot(y2)

Pista Hymnus

Crear la mezcla y guardarla:

>> y='avehymnus.ogg';  
>> audiowrite(y, y1+y2, fs);  
>> [y, fs]=audioread('avehymnus.ogg');  
>> plot(y)

Mezcla Avemaría + Hymnus

Resultado: las dos pistas suenan mezcladas. Observa picos de amplitud sumados que pueden causar saturación si exceden el rango máximo.

Important: antes de exportar mezcla final, normaliza o limita la señal para evitar clipping.


2. Producto de dos señales (modulación básica)

Multiplicar dos señales se hace de forma punto a punto: R(t) = S1(t) . S2(t). En Octave se usa el operador ‘.‘ para el producto elemento a elemento.

>> sig1='cos440.ogg';                       %creating the audio file @440 Hz  
>> sig2='cos880.ogg';                       %creating the audio file @880 Hz  
>> product='prod.ogg';                      %creating the audio file for product  
>> fs=44100;                                %generating the parameters values (Period, sampling frequency and angular frequency)  
>> t=0:1/fs:0.02;  
>> w1=2*pi*440*t;  
>> w2=2*pi*880*t;  
>> audiowrite(sig1, cos(w1), fs);          %writing the function cos(w) on the files created  
>> audiowrite(sig2, cos(w2), fs);  
>> [y1,fs]=audioread(sig1);  
>> [y2,fs]=audioread(sig2);  
>> audiowrite(product, y1.*y2, fs);        %performing the product  
>> [yprod,fs]=audioread(product);  
>> plot(yprod);                            %plotting the product

Nota: use ‘.*’ para que la operación sea muestra a muestra.

Gráfico del producto

Modulación con gran diferencia de frecuencias

Principio: multiplicar una portadora de baja frecuencia por una moduladora de alta frecuencia genera componentes nuevas (bandas) en el espectro.

Paso 1: portadora 220 Hz

>> fs=44100;  
>> t=0:1/fs:0.03;  
>> w=2*pi*220*t;  
>> y1=cos(w);  
>> plot(y1);

Portadora 220 Hz

Paso 2: moduladora alta (22 kHz aproximado)

>> y2=cos(100*w);  
>> plot(y2);

Señal moduladora de alta frecuencia

Paso 3: multiplicar y visualizar

>> plot(y1.*y2);

Señal modulada

Interpretación: el producto genera envolventes y nuevas componentes espectrales. Esto es la base de la modulación en amplitud (AM).


3. Multiplicar una señal por un escalar

Multiplicar por un número K cambia la amplitud (y si K es negativo, invierte la fase 180°): R(t) = K * F(t).

>> [y,fs]=audioread('cos440.ogg');         %creating the work files  
>> res1='coslow.ogg';                     
>> res2='coshigh.ogg';  
>> res3='cosinverted.ogg';  
>> K1=0.2;                                %values of the scalars  
>> K2=0.5;  
>> K3=-1;  
>> audiowrite(res1, K1*y, fs);            %product function-scalar  
>> audiowrite(res2, K2*y, fs);  
>> audiowrite(res3, K3*y, fs);

Visualizaciones:

Original:

Señal reducida a 0.2:

Coseno reducido a 0.2

Señal reducida a 0.5:

Coseno reducido a 0.5

Señal invertida (fase) K = -1:

Coseno invertido

Consejo práctico: usar escalado para ajustar niveles antes de mezclar. Para evitar clipping, normaliza posteriormente si K produce amplitudes fuera de [-1,1].


Buenas prácticas y verificación

Criterios de verificación rápida:

  • Reproducir el archivo resultante y comprobar ausencia de distorsión.
  • Inspeccionar el rango de amplitud con max(abs(y)) para detectar clipping.
  • Visualizar la señal y su espectro (fft) para confirmar componentes esperadas.

Mini-metodología para pruebas:

  1. Carga las señales: [y1,fs]=audioread(…).
  2. Asegura mismas dimensiones y fs; si no, re-muestrea o recorta.
  3. Realiza operación (suma, producto, K*y).
  4. Normaliza/limitador si necesario.
  5. Guarda y escucha.

Checklist rápida por rol:

  • Ingeniero de audio: comprobar espectro, SNR y ausencia de aliasing.
  • Músico/productor: comprobar mezcla y balance de niveles.
  • Estudiante: verificar que entiendes por qué usar ‘.*’ y normalización.

Modelos mentales y cuándo falla

Heurística: la suma mezcla componentes; el producto genera intermodulación y bandas laterales. Si quieres solo mezclar pistas independientes, usa suma y control de ganancia. Si buscas modular o generar armónicos, usa producto.

Counterexamples (cuando falla):

  • Sumar señales con fs distintos sin re-muestrear produce artefactos.
  • Multiplicar señales con longitudes distintas provoca error de dimensión.
  • Usar escalas que exceden el rango dinámico provoca clipping.

Alternativas y compatibilidad

  • MATLAB: código muy similar; funciones y comportamiento idéntico en la mayoría de operaciones básicas.
  • Python (numpy + scipy.io.wavfile o soundfile): ofrece más control sobre tipos de datos y procesamiento por bloques.
  • Herramientas DAW: para mezclas y efectos en tiempo real con interfaz gráfica.

Compatibilidad: conserva fs de 44100 Hz salvo que requieras otro estándar (48 kHz, etc.).


Caja de datos clave

  • Frecuencia de muestreo usada en ejemplos: 44100 Hz.
  • Duración de segmento en ejemplos: 0.02–0.03 s.
  • Frecuencias de ejemplo: 220 Hz, 440 Hz, 880 Hz, ~22 kHz para moduladora.

Glosario rápido

  • fs: frecuencia de muestreo (samples/seg).
  • Clipping: distorsión cuando la señal supera el rango permitido.
  • FFT: transformada rápida de Fourier, para ver espectro.

Resumen final

Las operaciones básicas —suma, producto y escalado— son herramientas esenciales para manipular audio en Octave. La suma mezcla señales; el producto introduce intermodulación y sirve para modulaciones; el escalado ajusta niveles y puede invertir fase. Antes de exportar, siempre verifica dimensiones, fs y niveles para evitar artefactos.

Siguiente paso recomendado: aplicar análisis espectral (FFT) a las señales resultantes para observar las componentes en frecuencia.

Autor
Edición

Materiales similares

Podman en Debian 11: instalación y uso
DevOps

Podman en Debian 11: instalación y uso

Apt-pinning en Debian: guía práctica
Sistemas

Apt-pinning en Debian: guía práctica

OptiScaler: inyectar FSR 4 en casi cualquier juego
Guía técnica

OptiScaler: inyectar FSR 4 en casi cualquier juego

Dansguardian + Squid NTLM en Debian Etch
Redes

Dansguardian + Squid NTLM en Debian Etch

Arreglar error de instalación Android en SD
Android

Arreglar error de instalación Android en SD

Conectar carpetas de red con KNetAttach
Redes

Conectar carpetas de red con KNetAttach