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)
>> [y2, fs] = audioread(sig2);
>> plot(y2)
Sumar las dos señales
>> sumres=y1+y2;
>> plot(sumres)
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)
>> [y2,fs]=audioread('hymnus.ogg');
>> plot(y2)
Crear la mezcla y guardarla:
>> y='avehymnus.ogg';
>> audiowrite(y, y1+y2, fs);
>> [y, fs]=audioread('avehymnus.ogg');
>> plot(y)
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 productNota: use ‘.*’ para que la operación sea muestra a muestra.

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);
Paso 2: moduladora alta (22 kHz aproximado)
>> y2=cos(100*w);
>> plot(y2);
Paso 3: multiplicar y visualizar
>> plot(y1.*y2);
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:

Señal reducida a 0.5:

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

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:
- Carga las señales: [y1,fs]=audioread(…).
- Asegura mismas dimensiones y fs; si no, re-muestrea o recorta.
- Realiza operación (suma, producto, K*y).
- Normaliza/limitador si necesario.
- 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.
Materiales similares
Podman en Debian 11: instalación y uso
Apt-pinning en Debian: guía práctica
OptiScaler: inyectar FSR 4 en casi cualquier juego
Dansguardian + Squid NTLM en Debian Etch
Arreglar error de instalación Android en SD