mcsm-benchs: Exploring signals provided by the SignalBank class

The SignalBank class encapsulates the signal generation code and yields a dictionary with a number of signals. In order to access those signals, the keys of this dictionary are called signal_id. The constructor simply takes the number N of samples of the desired signals.

[3]:
import numpy as np
import scipy.signal as sg
from numpy import pi as pi
from matplotlib import pyplot as plt
from mcsm_benchs.SignalBank import SignalBank
from utils import get_stft
[4]:
N = 2048
signal_bank = SignalBank(N=N)
signals_dic = signal_bank.signalDict

number_of_signals = len(signals_dic.keys())
# nplots = int(np.ceil(np.sqrt(number_of_signals)))
# print(nplots)
fig, ax = plt.subplots(10, 3, figsize = (20,30))

for i,signal_id in enumerate(signals_dic):
    signal = signals_dic[signal_id]
    S = np.abs(get_stft(signal))**2
    idx = np.unravel_index(i, ax.shape)
    ax[idx].imshow(S, origin = 'lower',aspect='auto')
    ax[idx].set_title('signal_id = '+ signal_id)
    ax[idx].set_xticks([],[])
    ax[idx].set_xlabel('time')
    ax[idx].set_yticks([])
    ax[idx].set_ylabel('frequency')
../_images/notebooks_demo_signal_bank_2_0.png

Controlling the signal’s effective length inside the observation window

[5]:
N = 2048
signal_bank = SignalBank(N = N)
signals_dic = signal_bank.signalDict
fmin = signal_bank.fmin
fmax = signal_bank.fmax
tmin = signal_bank.tmin
tmax = signal_bank.tmax
Nfft = 2*N

signal_names = ['LinearChirp', 'CosChirp', 'ExpChirp', # Single-component signals
                'McCrossingChirps',                       # Crossing-components
                'McMultiLinear','McPureTones',               # Multi-Component Harmonic signals
                'McMultiCos','McDoubleCosChirp',    # Multi-Component Non-Harmonic
                'McSyntheticMixture2',
                'HermiteFunction','HermiteElipse',        # Hermite type signals
                'ToneDamped','ToneSharpAttack',           # Dumped and Sharps attacks
                'McOnOffTones']                           # Modes that born and die

fig, ax = plt.subplots(5, 3, figsize = (20,20))

for i,signal_id in enumerate(signal_names):
    signal = signals_dic[signal_id]
    S = np.abs(get_stft(signal))**2
    idx = np.unravel_index(i, ax.shape)
    # print(idx)
    ax[idx].imshow(S, origin = 'lower')
    ax[idx].set_title('signal_id = '+ signal_id)
    ax[idx].set_xticks([],[])
    ax[idx].set_xlabel('time')
    ax[idx].set_yticks([])
    ax[idx].set_ylabel('frequency')
    ax[idx].plot([tmin, tmin],[fmin*Nfft, fmax*Nfft],'--w')
    ax[idx].plot([tmax, tmax],[fmin*Nfft, fmax*Nfft],'--w')
    ax[idx].plot([tmin, tmax],[fmin*Nfft, fmin*Nfft],'--w')
    ax[idx].plot([tmin, tmax],[fmax*Nfft, fmax*Nfft],'--w')
../_images/notebooks_demo_signal_bank_4_0.png