Conceptual overview of modulation and its applications.

Understanding Modulation

Modulation is a fundamental technique in signal processing where one signal (the modulator) is used to systematically vary properties of another signal (the carrier). This process allows us to create complex, dynamic waveforms from simple building blocks.

Basic Concepts

Carrier and Modulator

Types of Modulation

While this library focuses on additive modulation (where the modulator value is added to the carrier), modulation can take many forms:

Applications in Music and Audio

Synthesizer Modulation

In music synthesizers, modulation is used to create expressive, evolving sounds:

Vibrato

Vibrato is created by modulating the frequency of a musical note with a slow oscillator (typically 4-8 Hz):

// 440Hz A note (carrier)
var note = new SinOscillator(440, 1.0);

// 6Hz vibrato modulation
var vibrato = new SinOscillator(6, 5); // 5Hz frequency deviation

var vibratoNote = note.ApplyModulator(vibrato);

Tremolo

Tremolo modulates the amplitude of a signal, creating a "shaking" effect:

// Base signal
var carrier = new SinOscillator(440, 1.0);

// Tremolo modulation (amplitude varies)
var tremolo = new SinOscillator(8, 0.3); // 30% amplitude modulation at 8Hz

var tremoloSignal = carrier.ApplyModulator(tremolo);

Complex Soundscapes

Multiple modulators can be chained to create rich, evolving textures:

var base = new SinOscillator(110, 1.0);
var mod1 = new SinOscillator(0.5, 10);  // Slow, deep modulation
var mod2 = new SinOscillator(7, 2);     // Faster, lighter modulation

var complex = base.ApplyModulator(mod1).ApplyModulator(mod2);

Applications in Radio Communications

HAM Radio and RF Applications

Modulation is essential in radio communications for encoding information onto radio frequency carriers:

Amplitude Modulation (AM)

In AM radio, the audio signal modulates the amplitude of a high-frequency carrier:

// Audio signal (1 kHz tone)
var audio = new SinOscillator(1000, 0.5);

// RF carrier (simulated as lower frequency for example)
var rfCarrier = new SinOscillator(10000, 1.0);

// AM modulation (conceptual - actual AM requires multiplication)
var amSignal = rfCarrier.ApplyModulator(audio);

Control Signals

Modulation can generate control signals for various RF applications:

// Generate a swept frequency signal for testing
var baseFreq = new SinOscillator(1000, 1.0);
var sweep = new SinOscillator(0.1, 100); // Slow sweep ±100Hz

var sweptSignal = baseFreq.ApplyModulator(sweep);

Signal Analysis

Modulated signals help in analyzing and testing RF systems:

// Test signal with known modulation characteristics
var testCarrier = new SinOscillator(5000, 1.0);
var testMod = new SinOscillator(25, 0.2); // 25Hz modulation at 20%

var testSignal = testCarrier.ApplyModulator(testMod);

Mathematical Foundation

The modulation implemented in this library follows the additive model:

output(t) = carrier(t) + modulator(t)

Where:

This simple yet powerful approach allows for complex signal generation through composition of simple oscillators.

Real-World Considerations

Sample Rate and Aliasing

When working with digital signals, consider the sample rate to avoid aliasing:

Performance

For real-time applications:

Creative Applications

Modulation opens up endless creative possibilities:

Try It Yourself

Use the sample CLI to experiment with these concepts:

# Generate and visualize different modulation examples
dotnet run --project ModulatorSampleCLI vibrato vibrato.json
dotnet run --project ModulatorSampleCLI complex-mod complex.json
dotnet run --project ModulatorSampleCLI test-square comparison.json