FLOSS Manuals

 English |  Español |  Français |  Italiano |  Português |  Русский |  Shqip

CSOUND Español

FRECUENCIA MODULADA

Desde el Vibrato a la Aparición de Bandas Laterales

El vibrato es un cambio periódico de tono, normalmente en un rango menor a un tono medio y con una velocidad de cambio lenta (alrededor de 5 Hz). La modulación de frecuencia se implementa usualmente utilizando osciladores de onda senoidal.

EXAMPLE 04D01_Vibrato.csd 

<CsoundSynthesizer>
<CsOptions>
-o dac
</CsOptions>
<CsInstruments>
sr = 48000
ksmps = 32
nchnls = 2
0dbfs = 1

instr 1
aMod poscil 10, 5 , 1  ; 5 Hz vibrato con un ancho de modulación de 10 Hz.
aCar poscil 0.3, 440+aMod, 1  ; -> vibrato entre 430-450 Hz
outs aCar, aCar
endin

</CsInstruments>
<CsScore>
f 1 0 1024 10 1 		;Onda senoidal en la tabla 1
i 1 0 2
</CsScore>
</CsoundSynthesizer>
; escrito por Alex Hofmann (Mar. 2011)

A medida que aumenta la profundidad de la modulación, se hace más difícil percibir la frecuencia de base, pero aún así sigue tratándose de un vibrato.


EXAMPLE 04D02_Vibrato_deep.csd

<CsoundSynthesizer>
<CsOptions>
-o dac
</CsOptions>
<CsInstruments>
sr = 48000
ksmps = 32
nchnls = 2
0dbfs = 1

instr 1
aMod poscil 90, 5 , 1 ; modular 90Hz -> vibrato desde 350 a 530 hz
aCar poscil 0.3, 440+aMod, 1
outs aCar, aCar
endin

</CsInstruments>
<CsScore>
f 1 0 1024 10 1 		;Onda senoidal en la tabla 1
i 1 0 2
</CsScore>
</CsoundSynthesizer>
; escrito por Alex Hofmann (Mar. 2011)

El Sencillo Acomplamiento Moduladora->Portadora

Al aumentar la tasa de modulación se llega a un efecto diferente. La modulación de frecuencia de más de 20Hz el resultado ya no se reconoce como un vibrato. La frecuencia del oscilador principal se sitúa en el centro del sonido y las bandas laterales aparecen arriba y abajo. El número de bandas laterales está relacionado con la amplitud de modulación, que controlaremos posteriormente según el denominado índice de modulación.

EXAMPLE 04D03_FM_index.csd

<CsoundSynthesizer>
<CsOptions>
-o dac
</CsOptions>
<CsInstruments>
sr = 48000
ksmps = 32
nchnls = 2
0dbfs = 1

instr 1
aRaise linseg 2, 10, 100    ;incrementar la modulación desde los 2Hz y hasta los 100Hz
aMod poscil 10, aRaise , 1
aCar poscil 0.3, 440+aMod, 1
outs aCar, aCar
endin

</CsInstruments>
<CsScore>
f 1 0 1024 10 1 		;Onda senoidal en la tabla 1
i 1 0 12
</CsScore>
</CsoundSynthesizer>
; escrito por Alex Hofmann (Mar. 2011)

De este modo, el oscilador principal genera la denominada frecuencia portadora, mientras que el otro oscilador controla la frecuencia moduladora. El índice de modulación se puede expresar como:

I = mod-amp/mod-freq.

Al cambiar el índice de modulación se modifica la cantidad de armónicos, pero no el volumen general. Eso da la posibilidad de producir drásticos cambios en el timbre sin el riesgo de generar una distorsión en el resultado.

Cuando las frecuencias portadora y moduladora generan relaciones de enteros, tales como 1:1, 2:1, 3:2, 5:4, etc., las bandas laterales construyen una serie armónica, que produce un sonido con una fundamental claramente percibible.

 EXAMPLE 04D04_Harmonic_FM.csd

<CsoundSynthesizer>
<CsOptions>
-o dac
</CsOptions>
<CsInstruments>
sr = 48000
ksmps = 32
nchnls = 2
0dbfs = 1

instr 1
kCarFreq = 660     ; 660:440 = 3:2 -> espectro armónico
kModFreq = 440
kIndex = 15        ; Índice alto.. intente otros más bajos como 1, 2, 3..
kIndexM = 0
kMaxDev = kIndex*kModFreq
kMinDev = kIndexM*kModFreq
kVarDev = kMaxDev-kMinDev
kModAmp = kMinDev+kVarDev
aModulator poscil kModAmp, kModFreq, 1
aCarrier poscil 0.3, kCarFreq+aModulator, 1
outs aCarrier, aCarrier
endin

</CsInstruments>
<CsScore>
f 1 0 1024 10 1 		;Onda senoidal en la tabla 1
i 1 0 15
</CsScore>
</CsoundSynthesizer>
; escrito por Alex Hofmann (Mar. 2011)

De lo contrario el espectro del sonido es inarmónico, lo que lo hace metálico o ruidoso. Al aumentar el índice de modulación cambia la energía en las bandas laterales. La distancia entre las bandas laterales se puede conocer según la fórmula:

Distancia en Hz = (FrecuenciaPortadora)-(k*FrecuenciaModuladora) | k = {1, 2, 3, 4 ..}

Este cálculo puede resultar en frecuencias negativas, que aparecerán como componentes frecuenciales con signo positivo, pero cuya fase resultará invertida (esto es, desfasadas en 180°)! Por lo tanto, las frecuencias negativas pueden terminar anulando a las positivas. Las frecuencias por sobre la frecuencia de Nyquist (la mitad de la tasa de muestreo) "dan la vuelta" (aliasing).

El Modelo FM de una Trompeta de John Chowning

El compositor e investigador Jown Chowning trabajó en la primera implementación digital de la síntesis FM en los años setenta.

El uso de envolventes para controlar el índice de modulación y la amplitud general ofrecen la posibilidad de crear sonidos que evolucionan con enormes variaciones espectrales. Chowning mostró estas posibilidades en sus piezas, donde dejó que los sonidos se transformaran. En la pieza Sabelithe un sonido de batería se transforma transcurrido el tiempo en un tono de trompeta.

EXAMPLE 04D05_Trumpet_FM.csd 

<CsoundSynthesizer>
<CsOptions>
-o dac
</CsOptions>
<CsInstruments>
sr = 48000
ksmps = 32
nchnls = 2
0dbfs = 1

instr 1  ; sencilla forma de generar un sonido que se asemeja a una trompeta
kCarFreq = 440
kModFreq = 440
kIndex = 5
kIndexM = 0
kMaxDev = kIndex*kModFreq
kMinDev = kIndexM * kModFreq
kVarDev = kMaxDev-kMinDev
aEnv expseg .001, 0.2, 1, p3-0.3, 1, 0.2, 0.001
aModAmp = kMinDev+kVarDev*aEnv
aModulator poscil aModAmp, kModFreq, 1
aCarrier poscil 0.3*aEnv, kCarFreq+aModulator, 1
outs aCarrier, aCarrier
endin

</CsInstruments>
<CsScore>
f 1 0 1024 10 1 		;Onda senoidal en la tabla 1
i 1 0 2
</CsScore>
</CsoundSynthesizer>
; escrito por Alex Hofmann (Mar. 2011)

 

El siguiente ejemplo utiliza el mismo instrumento, pero con diferentes configuraciones para generar un sonido parecido a una campana:

EXAMPLE 04D06_Bell_FM.csd

<CsoundSynthesizer>
<CsOptions>
-o dac
</CsOptions>
<CsInstruments>
sr = 48000
ksmps = 32
nchnls = 2
0dbfs = 1

instr 1  ; bell-like sound
kCarFreq = 200  ; 200/280 = 5:7 -> espectro inarmónico
kModFreq = 280
kIndex = 12
kIndexM = 0
kMaxDev = kIndex*kModFreq
kMinDev = kIndexM * kModFreq
kVarDev = kMaxDev-kMinDev
aEnv expseg .001, 0.001, 1, 0.3, 0.5, 8.5, .001
aModAmp = kMinDev+kVarDev*aEnv
aModulator poscil aModAmp, kModFreq, 1
aCarrier poscil 0.3*aEnv, kCarFreq+aModulator, 1
outs aCarrier, aCarrier
endin

</CsInstruments>
<CsScore>
f 1 0 1024 10 1 		;Onda senoidal en la tabla 1
i 1 0 9
</CsScore>
</CsoundSynthesizer>
; escrito por Alex Hofmann (Mar. 2011)

Algoritmos de FM más complejos

La combinación de más de dos osciladores (operadores) se denomina síntesis de FM compleja. Los operadores pueden conectarse en diferentes combinaciones; a menudo se usan entre 4 y 6 operadores. El oscilador de la frecuencia portadora es siempre el último operador en la serie. Al cambiar su tono se desplaza el sonido entero. Por lo tanto, todos los demás operadores son moduladores y al cambiar su tono lo que se altera es el espectro del sonido.

Dos en Uno: M1+M2 -> C

El principio aquí es que (M1:C) y (M2:C) se tratarán como modulaciones diferente y sólo más tarde se combinarán.

EXAMPLE 04D07_Added_FM.csd 

<CsoundSynthesizer>
<CsOptions>
-o dac
</CsOptions>
<CsInstruments>
sr = 48000
ksmps = 32
nchnls = 2
0dbfs = 1

instr 1
aMod1 poscil 200, 700, 1
aMod2 poscil 1800, 290, 1
aSig poscil 0.3, 440+aMod1+aMod2, 1
outs aSig, aSig
endin


</CsInstruments>
<CsScore>
f 1 0 1024 10 1 		;Onda senoidal en la tabla 1
i 1 0 3
</CsScore>
</CsoundSynthesizer>
; escrito por Alex Hofmann (Mar. 2011)

En serie: M1->M2->C

Esto es mucho más complicado de calcular y el timbre resultante se vuelve más difícil de predecir, esto es porque M1:M2 produce un espectro complejo (W), que a su vez modula al oscilador de la portadora (W:C).

EXAMPLE 04D08_Serial_FM.csd 

<CsoundSynthesizer>
<CsOptions>
-o dac
</CsOptions>
<CsInstruments>
sr = 48000
ksmps = 32
nchnls = 2
0dbfs = 1

instr 1
aMod1 poscil 200, 700, 1
aMod2 poscil 1800, 290+aMod1, 1
aSig poscil 0.3, 440+aMod2, 1
outs aSig, aSig
endin

</CsInstruments>
<CsScore>
f 1 0 1024 10 1 		;Onda senoidal en la tabla 1
i 1 0 3
</CsScore>
</CsoundSynthesizer>
; escrito por Alex Hofmann (Mar. 2011)

 

Modulación de Fase - el Yamaha DX7 y la FM con Retroalimentación

Existe una relación importante entre la modulación de frecuencia y la modulación de fase, ya que ambas técnicas influyen en el espectro del oscilador, y las modificaciones al timbre resultante son las mismas.

Si quisiera construir un sistema FM de retroalimentación, sucederá que la auto-modulación llegará a un punto cero, que finalmente detendrá al oscilador. Para evitar esto, es más práctico modular la fase de la búsqueda de las tablas de la portadora, en lugar de su tono.

Incluso el más famoso sintetizador de FM, el Yamaha DX7, se basa en la técnica de modulación de fase (en inglés, Phase Modulation), que posibilita la retroalimentación. El DX7 proporciona 7 operadores, y ofrece 32 combinaciones de enrutamiento entre estos. (http://yala.freeservers.com/t2synths.htm#DX7)

Para construir un sintetizador de Modulacion de Fase en Csound, el opcode tablei se utiliza como oscilador. Para avanzar a través de la tabla-f, el opcode phasor proverá de los índices necesarios.

 EXAMPLE 04D09_PhaseMod.csd 

<CsoundSynthesizer>
<CsOptions>
-o dac
</CsOptions>
<CsInstruments>
sr = 48000
ksmps = 32
nchnls = 2
0dbfs = 1

instr 1  ; sencillo Sintetizador de Modulación de Fase
kCarFreq = 200
kModFreq = 280
kModFactor = kCarFreq/kModFreq
kIndex = 12/6.28   ;  12/2pi para pasar de radianes a índices de table normales
aEnv expseg .001, 0.001, 1, 0.3, 0.5, 8.5, .001
aModulator poscil kIndex*aEnv, kModFreq, 1
aPhase phasor kCarFreq
aCarrier tablei aPhase+aModulator, 1, 1, 0, 1
outs (aCarrier*aEnv), (aCarrier*aEnv)
endin

</CsInstruments>
<CsScore>
f 1 0 1024 10 1 		;Onda senoidal en la tabla 1
i 1 0 9
</CsScore>
</CsoundSynthesizer>
; escrito por Alex Hofmann (Mar. 2011)

Utilicemos las posibilidades de auto-modulación (retroalimentación) que nos brinda el oscilador. En el ejemplo siguiente, el oscilador es tanto la moduladora como la portadora. Luego, para controlar la cantidad de modulación, una envolvente escala la retroalimentación.

EXAMPLE 04D10_Feedback_modulation.csd

<CsoundSynthesizer>
<CsOptions>
-o dac
</CsOptions>
<CsInstruments>
sr = 48000
ksmps = 32
nchnls = 2
0dbfs = 1

instr 1  ; feedback PM
kCarFreq = 200
kFeedbackAmountEnv linseg 0, 2, 0.2, 0.1, 0.3, 0.8, 0.2, 1.5, 0
aAmpEnv expseg .001, 0.001, 1, 0.3, 0.5, 8.5, .001
aPhase phasor kCarFreq
aCarrier init 0 ; init for feedback
aCarrier tablei aPhase+(aCarrier*kFeedbackAmountEnv), 1, 1, 0, 1
outs aCarrier*aAmpEnv, aCarrier*aAmpEnv
endin

</CsInstruments>
<CsScore>
f 1 0 1024 10 1 		;Onda senoidal en la tabla 1
i 1 0 9
</CsScore>
</CsoundSynthesizer>
; escrito por Alex Hofmann (Mar. 2011)
 

There has been error in communication with Booktype server. Not sure right now where is the problem.

You should refresh this page.