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')

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')
