Síntesis del sonido

Formas de onda

Formas de onda

Por razones físicas, es importante que la superficie comprendida por la parte positiva de la onda sea igual a la parte negativa. Esto es, que IF=0.

Veamos unas formas de onda frecuentes en la síntesis común:

Ondas senoidales

Las ondas senoidales son producidas por los osciladores analógicos convencionales. Su espectro está concentrado en la frecuencia fundamental de oscilación.

Gráfica:

Función forma:

forma sin

Algoritmo:

float fseno(float fase)
{ float DosPi = 2.0 * 3.1415926535897932384626;
return sin(DosPi * fase);
}

Ondas triangulares

En las ondas triangulares la amplitud varía de un pico a otro de forma rectilínea. Se puede parametrizar esta forma mediate un valor K (0≤K≤1) que indica la separación entre los picos de la onda. A lo largo del periodo, la onda decrece durante un intervalo K y crece durante el resto de tiempo 1–K.

Gráfica:

Función forma:

La expresión analítica de la función forma depende de K, naturalmente.

forma triangle

Algoritmo:

float ftriangulo(float fase, float K)
{
if (fase < (1-K)/2)
return 2*fase/(1-K);
else if (((1-K)/2 <= fase) and (fase < (1+K)/2))
return (1 - 2*fase)/K;
else //if ((1+K)/2 <= fase)
return 2*(fase-1)/(1-K);
}

Con el valor K = 0.5, tenemos la onda triangular clásica, que sólo contiene frecuencias que son múltiplo impar de la fundamental. 

La onda triangular con K = 1 es conocida como sawtooth (diente de sierra) y su espectro contiene todas las frecuencias que son múltiplo de la fundamental.

Gráfica

Función forma:

forma sierra

Algoritmo:

float fsierra(float fase)
{
return 1 - 2*fase;
}

Ondas rectangulares

Las ondas rectangulares sólo dan dos niveles de señal: uno positivo y otro negativo.

La onda rectangular se obtiene electrónicamente mediante un circuito astable. En un circuito de este tipo, se pueden ajustar las constantes de tiempo de forma asimétrica, de manera que el ciclo de oscilación se distribuye en dos semiciclos de duración distinta.

Gráfica:

Función forma:

Consideremos que 0<Z<0.5

forma rectangle

Algoritmo:

float frectangulo(float fase, float Z)
{
if (fase < Z) return 1.0;
else return Z/(Z-1);
}

La onda cuadrada es un caso particular de onda rectangular en la que Z=0.5. El espectro de una onda cuadrada contiene potencia en los múltiplos impares de la frecuencia fundamental.

Gráfica:

Función forma:

forma quadrada

Algoritmo:

float fcuadrada(float fase)
{
if (fase < 0.5) return 1.0;
else return -1.0;
}

Ondas romboidales

Gráfica:

Función forma:

forma romboidal

Algoritmo:

float fromboide(float fase, float K)
{ float Z = 0.5;
if (fase < (Z*K))
return fase /(Z*K);
else if ((Z*K <= fase) and (fase < Z*(1-K)))
return 1.0;
else if ((Z*(1-K) <= fase) and (fase < Z*(1+K)))
return (Z*(1+K)-fase)/(Z*K) - 1;
else if ((Z*(1+K) <= fase) and (fase < (1-K*Z)))
return -1.0;
else //if ((1-Z*K) <= fase)
return (fase-1)/(Z*K);
}