René Nyffenegger's collection of things on the web | |
René Nyffenegger on Oracle - Most wanted - Feedback
- Follow @renenyffenegger
|
FM (frequency modulated) synthesis with CSound | ||
In frequency modulated synthesis, the 'instrument' doesn't play on a fixed frequency, rather, the frequency is changed (=modulated)
over time. The frequency that is modulated is called the carrier frequency. The carrier frequency is modulated by the modulating frequency.
Two types of FM exist: sub-audio rate and audio rate. With sub-audio rate fm, the modulating frequency is below 16 Hz (+-), and the result is a hearable
variation in the carrier frequency; this is commonly referred to as vibrato.
With audio rate fm, the modulating frequency cannot be heared anymore, but so called sidebands (additional tones) are created.
Three parameters are important for FM synthesis:
It looks like this:
basic.orc
One signal (asig_l) is produced with the foscili opcode while the other signal (asig_r)
is conventionally produced, that is, with two oscilators. It also demonstrates how the parameters for foscili are used to calculate the modulator frequency, the
carrier frequency and the modulator amplitude.
fm_basic.orc
sr = 44100 kr = 44100 nchnls = 2 instr 1; ilen = p3 iamp = p4 icps = p5 icar = p6 imod = p7 indx = p8 kenv linseg 0, 0.02, 1,ilen-0.02, 0 asig_l foscili iamp, icps, icar, imod, indx, 1 ;----- FM without foscili ---------------- icar_frq = icps * icar imod_frq = icps * imod imod_amp = imod_frq * indx koscil oscili imod_amp, imod_frq, 1 asig_r oscili iamp , icar_frq + koscil, 1 ;--------------------------------- outs asig_l * kenv, asig_r* kenv endin fm_basic.sco
f1 0 2048 10 1 ; Sine Wave ; amp cps mod mod indx ;---------------------------------------------------- i1 0 1 10000 100 1 2.8 6.0; Bell? i1 + 1 10000 100 1 2.8 < i1 + 1 10000 100 1 2.8 < i1 + 1 10000 100 1 2.8 3.0 i1 + 1 10000 250 1 0.7 1.5; Bass Clarinet i1 + 1 10000 250 1 0.7 < i1 + 1 10000 250 1 0.7 < i1 + 1 10000 250 1 0.7 0.1 i1 + 1 10000 700 1 1.0 5.0; Trumpet i1 + 1 10000 700 1 1.0 < i1 + 1 10000 700 1 1.0 < i1 + 1 10000 700 1 1.0 0.1 i1 + 1 10000 500 1 1.0 10.0; FM Sound i1 + 1 10000 500 1 < < i1 + 1 10000 500 1 < < i1 + 1 10000 500 1 10.0 10.0 ;i1 + 1 10000 130 1 182 20.0 ;i1 + 1 10000 130 1 182 < ;i1 + 1 10000 130 1 182 < ;i1 + 1 10000 130 1 182 20.0
Because FM is very important, CSound has two opcodes that make it easier have FM: foscil and
foscili. (The foscili shows how to generate the very same sound).
Ratio between carrier and modulating frequency
FM sounds produce sidebands, that is additional frequencies below and above the carrier frequency. The distance between the frequencies of the sidebands
are equal and are the same as the modulating frequency. For example, the carrier frequency could be 440Hz and the sidebands could have ..360hz, 400hz, 480hz, 520hz..
This would indicate that the modulating frequency is 40hz.
The ratio between the carrier (c) and the modulating frequency (m) plays an important role as this ratio determines the frequencies of these sidebands.
If the ratio of c:m is 1:n and n is an integer, we have harmonic sidebands. If the ratio of c:m is not 1:n, we get inharmonic sidebands.
A rule is: if m >= 2*c or m=c, then c is the fundamental frequency.
See also Frequency Modulation Tutorial
FM Instruments |