View Raw SPL
/*****************************************************************************
* *
* MODFM.SPL Copyright (C) 2007 DSP Development Corporation *
* All Rights Reserved *
* *
* Author: Randy Race *
* *
* Synopsis: FM modulation of an input series *
* *
* Revisions: 5 Feb 2007 RRR Creation *
* *
*****************************************************************************/
#if @HELP_MODFM
MODFM
Purpose: Performs frequency modulation of a series.
Syntax: MODFM(s, fmin, fmax)
s - the input series
fmin - Optional, a real. The minimum modulation frequency.
Defaults to 0.0.
fmax - Optional, a real. The maximum modulation frequency.
Defaults to rate(s) / 2.
Returns: A series, the frequency modulated output.
Example:
W1: gtriwave(1000,.001, 4)
W2: modfm(w1)
W3: demodfm(w2)
W4: specgram(w2, 64, 63, 1024)
The triangle series of W1 is frequency modulated between
0 Hz and 500 Hz in W2. W3 recovers the modulated
series and W4 displays the joint time-frequency plot
of the frequency modulated series.
Example:
W1: gtriwave(1000,.001, 4)
W2: modfm(w1, 100, 300)
W3: demodfm(w2)
W4: specgram(w2, 64, 63, 1024)
Same as above except the series is frequency modulated between
100 Hz and 300 Hz.
Remarks:
The maximum modulation frequency (fmax) should be set to
rate(s) / 2 or less.
See DEMODFM to demodulate a frequency modulated series.
See GSWEEP to generate a simple swept sinewave.
See Also:
Modam
Demodfm
Demodam
Gsweep
Specgram
#endif
/* frequency modulate a series */
ITERATE modfm(s, fmin, fmax)
{
local fm;
if (argc < 3)
{
if (argc < 2)
{
if (argc < 1) error("modfm - input series required");
fmin = 0;
}
fmax = rate(s) / 2;
}
fm = cos(2 * pi * integ(rescale(s, fmin, fmax)));
return(fm);
}