Skip to content

Signal Generation

cmplx_ct_sinusoid(A, W, t, phi=0)

Generates a complex, continuous-time sinusoid

Parameters:

Name Type Description Default
A float

Amplitude (magnitude of complex phasor)

required
W float

Frequency (radians/sec)

required
t ndarray

Vector of time points to evaluate the sinusoid at

required
phi float

Initial phase of sinusoid (radians)

0
Source code in rfproto/sig_gen.py
 6
 7
 8
 9
10
11
12
13
14
15
def cmplx_ct_sinusoid(A: float, W: float, t: np.ndarray, phi: float = 0) -> np.ndarray:
    """Generates a complex, continuous-time sinusoid

    Args:
        A: Amplitude (magnitude of complex phasor)
        W: Frequency (radians/sec)
        t: Vector of time points to evaluate the sinusoid at
        phi: Initial phase of sinusoid (radians)
    """
    return A * np.exp(1j * (W * t + phi))

cmplx_dt_lfm_chirp(A, f_start, f_end, fs, num_samples)

Generates a complex, discrete-time Linear Frequency Modulated (LFM) Chirp.

Parameters:

Name Type Description Default
A float

Amplitude (magnitude of complex phasor)

required
f_start float

Start Frequency (Hz)

required
f_end float

End Frequency (Hz)

required
fs float

Sampling Frequency (Hz)

required
num_samples int

Number of samples to output

required
Source code in rfproto/sig_gen.py
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
def cmplx_dt_lfm_chirp(
    A: float, f_start: float, f_end: float, fs: float, num_samples: int
) -> np.ndarray:
    """Generates a complex, discrete-time Linear Frequency Modulated (LFM) Chirp.

    Args:
        A: Amplitude (magnitude of complex phasor)
        f_start: Start Frequency (Hz)
        f_end: End Frequency (Hz)
        fs: Sampling Frequency (Hz)
        num_samples: Number of samples to output
    """
    y = np.zeros(num_samples) + 1j * np.zeros(num_samples)
    chirp_rate = ((f_end - f_start) / fs) / num_samples
    for i in range(num_samples):
        phase = (chirp_rate / 2.0) * (i**2.0)
        phase += (f_start / fs) * i
        y[i] = A * np.exp(1j * (2 * np.pi * phase))
    return y

cmplx_dt_sinusoid(A, f, fs, num_samples)

Generates a complex, discrete-time sinusoid. Note f and fs units must match!

Parameters:

Name Type Description Default
A float

Amplitude (magnitude of complex phasor)

required
f float

Frequency (Hz, or radians/sec)

required
fs float

Sampling Frequency (Hz, or radians/sec)

required
num_samples int

Number of samples to output

required
Source code in rfproto/sig_gen.py
18
19
20
21
22
23
24
25
26
27
28
def cmplx_dt_sinusoid(A: float, f: float, fs: float, num_samples: int) -> np.ndarray:
    """Generates a complex, discrete-time sinusoid. Note `f` and `fs` units must match!

    Args:
        A: Amplitude (magnitude of complex phasor)
        f: Frequency (Hz, or radians/sec)
        fs: Sampling Frequency (Hz, or radians/sec)
        num_samples: Number of samples to output
    """
    t = np.linspace(0, num_samples - 1, num_samples)
    return cmplx_ct_sinusoid(A, 2 * np.pi * f / fs, t, 0)

real_ct_sinusoid(A, W, t, phi=0)

Generates a real, continuous-time sinusoid

Parameters:

Name Type Description Default
A float

Amplitude

required
W float

Frequency (radians/sec)

required
t ndarray

Vector of time points to evaluate the sinusoid at

required
phi float

Initial phase of sinusoid (radians)

0
Source code in rfproto/sig_gen.py
52
53
54
55
56
57
58
59
60
61
def real_ct_sinusoid(A: float, W: float, t: np.ndarray, phi: float = 0) -> np.ndarray:
    """Generates a real, continuous-time sinusoid

    Args:
        A: Amplitude
        W: Frequency (radians/sec)
        t: Vector of time points to evaluate the sinusoid at
        phi: Initial phase of sinusoid (radians)
    """
    return A * np.sin(W * t + phi)