Beispiel #1
0
    def __init__(self, nfft, win_step):
        def tfc(x):
            return np.array([spectrogram(x[ci, :], nfft, win_step) for ci in range(x.shape[0])])

        BaseNode.__init__(self)
        self.nfft, self.win_step = nfft, win_step
        self.n = ApplyOverInstances(tfc)
Beispiel #2
0
class TFC(BaseNode):
    def __init__(self, nfft, win_step):
        def tfc(x):
            return np.array([spectrogram(x[ci, :], nfft, win_step) for ci in range(x.shape[0])])

        BaseNode.__init__(self)
        self.nfft, self.win_step = nfft, win_step
        self.n = ApplyOverInstances(tfc)

    def apply_(self, d):
        assert len(d.feat_shape) == 2  # [channels x samples]
        if d.feat_dim_lab is not None:
            assert d.feat_dim_lab == ["channels", "time"]

        tfc = self.n.apply(d)
        feat_dim_lab = ["channels", "time", "frequency"]

        if d.feat_lab is not None:
            old_time = d.feat_lab[1]
            time = np.mean(sliding_window(old_time, self.nfft, self.win_step), axis=1)
            dt = np.mean(np.diff(old_time))
            dt = (np.max(old_time) - np.min(old_time)) / len(old_time)
            freqs = np.fft.fftfreq(self.nfft, dt)
            freqs = [abs(i) for i in freqs[: self.nfft / 2 + 1]]
            channels = d.feat_lab[0]
            feat_lab = [channels, time.tolist(), freqs]
        else:
            feat_lab = None

        return DataSet(feat_dim_lab=feat_dim_lab, feat_lab=feat_lab, default=tfc)