modulation

Examples

Harmonic

"""Harmonics with noise."""
import os
import sys
import random
import matplotlib.pyplot as plt

sys.path.insert(0, os.path.abspath('.'))
from dsplab.modulation import harm


def noise(t):
    """Return random value."""
    return random.normalvariate(0, 0.1)


def main():
    """Run example."""
    T = 10
    fs = 100
    x, t = harm(
        length=T, sample_rate=fs,
        amp=1, freq=1,
    )
    plt.plot(t, x)
    x, t = harm(
        length=T, sample_rate=fs,
        amp=2, freq=1,
        noise_a=noise
    )
    plt.plot(t, x)
    x, t = harm(
        length=T, sample_rate=fs,
        amp=2, freq=1,
        noise_f=noise
    )
    plt.plot(t, x)
    plt.show()


if __name__ == "__main__":
    main()

Amplitude

"""Example of amplitude modulation."""
import os
import sys
import matplotlib.pyplot as plt

sys.path.insert(0, os.path.abspath('.'))
from dsplab.modulation import amp_mod


def modulator(t):
    """Return amplitude value."""
    if t < 5:
        return 1
    return 2


def main():
    """Run example."""
    T = 10
    fs = 100
    f = 1
    x, t = amp_mod(
        length=T,
        sample_rate=fs,
        freq=f,
        func=modulator,
    )
    plt.plot(t, x)
    plt.show()


if __name__ == "__main__":
    main()

Frequency

"""Example of frequency modulation."""
import os
import sys
import matplotlib.pyplot as plt

sys.path.insert(0, os.path.abspath('.'))
from dsplab.modulation import freq_mod


def modulator(t):
    """Return frequency value."""
    return 0.05*t + 0.5


def main():
    """Run example."""
    T = 10
    fs = 100
    amp = 1
    xs, phases, ts = freq_mod(
        length=T,
        sample_rate=fs,
        amp=amp,
        func=modulator,
    )
    plt.subplot(211)
    plt.plot(ts, xs)
    plt.subplot(212)
    plt.plot(ts, phases)
    plt.show()


if __name__ == "__main__":
    main()

Members

Functions for modulation and demodulation.

dsplab.modulation.amp_mod(length, sample_rate, func, freq, phi=0, noise_f=None, noise_a=None)[source]

Amplitude modulation.

Parameters:
  • length (float) – Length pf signal (sec).
  • sample_rate (float) – Sampling frequency (Hz).
  • freq (float) – Frequency of signal (Hz).
  • phi (float) – Initial phase (radians).
  • func (Object) – Function that returns amplitude value depending on time.
  • noise_f (Object) – Function that returns noise value added to frequency.
  • noise_a (Object) – Function that returns noise value added to amplitude.
Returns:

  • np.array – Signal values.
  • np.array – Time values.

dsplab.modulation.digital_hilbert_filter(ntaps=101, window='hamming')[source]

Calculate digital hilbert filter.

Parameters:
  • ntaps (integer) – Length of filter.
  • window (str) – Window. Default is ‘hamming’.
Returns:

Filter.

Return type:

np.array

dsplab.modulation.envelope_by_extremums(xdata, sample_rate=1, tdata=None)[source]

Calculate envelope by local extremums of signals.

Parameters:
  • xdata (array_like) – Signal values.
  • sample_rate (float) – Sampling frequency.
  • tdata (array_like) – Time values. Use it for unregular discretized input signal.
Returns:

  • np.array – Damping values.
  • np.array – Time values.

dsplab.modulation.freq_amp_mod(length, sample_rate, a_func, f_func, phi=0)[source]

Simultaneous frequency and amplitude modulation.

Parameters:
  • length (float) – Length pf signal (sec).
  • sample_rate (float) – Sampling frequency (Hz).
  • a_func (Object) – Function that returns amplitude value depending on time.
  • f_func (Object) – Function that returns frequency values (in Hz) depending on time.
  • phi (float) – Initial phase (radians).
Returns:

  • np.array – Signal values.
  • np.array – Full phase values.
  • np.array – Time values.

dsplab.modulation.freq_by_extremums(xdata, sample_rate)[source]

Calculate frequency of oscillating signal by extremums.

Parameters:
  • xdata (array_like) – Values of input signals.
  • sample_rate (float) – Sampling frequency (Hz).
Returns:

Frequency.

Return type:

float

dsplab.modulation.freq_by_zeros(xdata, sample_rate)[source]

Calculate average frequency of detrended oscillating signal by counting zeros.

dsplab.modulation.freq_mod(length, sample_rate, amp, func, phi=0, noise_f=None, noise_a=None)[source]

Amplitude modulation.

Parameters:
  • length (float) – Length pf signal (sec).
  • sample_rate (float) – Sampling frequency (Hz).
  • amp (float) – Amplitude of signal.
  • phi (float) – Initial phase (radians).
  • func (Object) – Function that returns frequency values (in Hz) depending on time.
  • noise_f (Object) – Function that returns noise value added to frequency.
  • noise_a (Object) – Function that returns noise value added to amplitude.
Returns:

  • np.array – Signal values.
  • np.array – Full phase values.
  • np.array – Time values.

dsplab.modulation.freqs_by_wave_len(xdata, tdata, cut_nans=True)[source]

Calculate frequencies using lenghs of waves and linear interpolation.

Parameters:
  • xdata (np.ndarray) – Signal values.
  • tdata (np.ndarray) – Time values.
  • cut_nans (boolean) – If True, the nan values at the ends of the of the produced array will removed.
Returns:

Freqs values.

Return type:

np.ndarray

dsplab.modulation.harm(length, sample_rate, amp, freq, phi=0, noise_a=None, noise_f=None)[source]

Generate harmonic signal.

Parameters:
  • length (float) – Length pf signal (sec).
  • sample_rate (float) – Sampling frequency (Hz).
  • amp (float) – Amplitude of signal.
  • freq (Object) – Frequency of signal (Hz).
  • phi (float) – Initial phase (radians).
  • noise_a (callable) – Returns noise value added to amplitude.
  • noise_f (callable) – Returns noise value added to frequency.
Returns:

  • np.array – Signal values.
  • np.array – Time values.

dsplab.modulation.iq_demod(xdata, tdata, f_central, a_coeffs, b_coeffs)[source]

Return instantaneous frequency of modulated signal using IQ processign.

Parameters:
  • xdata (array_like) – Signal values.
  • tdata (array_like) – Time values.
  • f_central (float) – Carrier frequency.
  • a_coeffs (array_like) – a values of filter.
  • b_coeffs (array_like) – b values of filter.
Returns:

  • np.ndarray of floats – Instantaneous frequency values.
  • np.ndarray – Time values.

dsplab.modulation.linint(xdata, tdata, ts_new)[source]

Find values of xdata in ts_new points.

Parameters:
  • xdata (np.ndarray) – Signal values.
  • tdata (np.ndarray) – Time values.
  • ts_new (np.ndarray) – New time values.
Returns:

New signal values.

Return type:

np.ndarray

dsplab.modulation.phase_mod(length, sample_rate, amp, freq, func, noise_f=None, noise_a=None)[source]

Phase modulation.

Parameters:
  • length (float) – Length pf signal (sec).
  • sample_rate (float) – Sampling frequency (Hz).
  • amp (float) – Amplitude of signal.
  • freq (float) – Frequency of signal (Hz).
  • func (Object) – Function that returns phase values (in radians) depending on time.
  • noise_f (Object) – Function that returns noise value added to frequency.
  • noise_a (Object) – Function that returns noise value added to amplitude.
Returns:

  • np.array – Signal values.
  • np.array – Time values.

dsplab.modulation.wave_lens(xdata, tdata)[source]

Calculate wave lengths of signal by space between zeros.

Parameters:
  • xdata (np.ndarray) – Signal values.
  • tdata (np.ndarray) – Time values.
Returns:

  • np.ndarray – Wave lengths.
  • np.ndarray – Time values.