points = np.arange(-min([lg, signal.shape[0] - ti - tau]), min([lg, ti - 1 - tau]) + 1) g2 = twindow[lg + points] g2 = g2 / np.sum(g2) R = np.sum(g2 * signal[ti + tau - points - 1] * np.conj(signal[ti - tau - points - 1])) tfr[1 + tau, icol] = fwindow[lh + tau + 1] * R R = np.sum(g2 * signal[ti - tau - points - 1] * np.conj(signal[ti + tau - points - 1])) tfr[freq_bins - tau - 1, icol] = fwindow[lh - tau + 1] * R tau = np.round(freq_bins / 2.0) if (ti <= signal.shape[0] - tau) and (ti >= tau + 1) and (tau <= lh): points = np.arange(-min([lg, signal.shape[0] - ti - tau]), min([lg, ti - 1 - tau]) + 1) g2 = twindow[lg + 1 + points] g2 = g2 / np.sum(g2) _x = np.sum(g2 * signal[ti + tau - points] * np.conj(signal[ti - tau - points])) _x *= fwindow[lh + tau + 1] _y = np.sum(g2 * signal[ti - tau - points] * np.conj(signal[ti + tau - points])) _y *= fwindow[lh - tau + 1] tfr[tau, icol] = (_x + _y) * 0.5 tfr = np.fft.fft(tfr, axis=0) return np.real(tfr) if __name__ == '__main__': from tftb.generators import anapulse sig = anapulse(128) t = np.linspace(0, 1, 128) spec = WignerVilleDistribution(sig, timestamps=t) spec.run() spec.plot(kind="contour", scale="log")
g2 = g2 / np.sum(g2) R = np.sum(g2 * signal[ti + tau - points - 1] * np.conj(signal[ti - tau - points - 1])) tfr[1 + tau, icol] = fwindow[lh + tau + 1] * R R = np.sum(g2 * signal[ti - tau - points - 1] * np.conj(signal[ti + tau - points - 1])) tfr[freq_bins - tau - 1, icol] = fwindow[lh - tau + 1] * R tau = np.round(freq_bins / 2.0) if (ti <= signal.shape[0] - tau) and (ti >= tau + 1) and (tau <= lh): points = np.arange(-min([lg, signal.shape[0] - ti - tau]), min([lg, ti - 1 - tau]) + 1) g2 = twindow[lg + 1 + points] g2 = g2 / np.sum(g2) _x = np.sum(g2 * signal[ti + tau - points] * np.conj(signal[ti - tau - points])) _x *= fwindow[lh + tau + 1] _y = np.sum(g2 * signal[ti - tau - points] * np.conj(signal[ti + tau - points])) _y *= fwindow[lh - tau + 1] tfr[tau, icol] = (_x + _y) * 0.5 tfr = np.fft.fft(tfr, axis=0) return np.real(tfr) if __name__ == '__main__': from tftb.generators import anapulse sig = anapulse(128) spec = WignerVilleDistribution(sig) spec.run() spec.plot(kind="contour", scale="log")
#! /usr/bin/env python # -*- coding: utf-8 -*- # vim:fenc=utf-8 # # Copyright © 2015 jaidev <jaidev@newton> # # Distributed under terms of the MIT license. """ """ from tftb.generators import anapulse import matplotlib.pyplot as plt import numpy as np x = 2.5 * anapulse(512, 301) plt.plot(np.real(x)) plt.xlim(0, 512) plt.grid() plt.title('Analytic Dirac Impulse') plt.show()
=================================== This example plots the scalogram of a Dirac impulse functions. This shows the behaviour of the scalograms as the scale (or inversely, the frequency) changes. it is well localized for small scales (large frequencies), and less localized as the scale increases (as the frequency decreases). Figure 3.19 from the tutorial. """ from tftb.generators import anapulse from tftb.processing import Scalogram import numpy as np import matplotlib.pyplot as plt sig1 = anapulse(128) tfr, t, f, _ = Scalogram(sig1, waveparams=6, fmin=0.05, fmax=0.45, n_voices=128).run() tfr = np.abs(tfr)**2 threshold = np.amax(tfr) * 0.05 tfr[tfr <= threshold] = 0.0 t, f = np.meshgrid(t, f) plt.contour(t, f, tfr, 20) plt.grid() plt.title('Morlet Scalogram of a Dirac Impluse') plt.xlabel('Time') plt.ylabel('Normalized Frequency') plt.show()
#! /usr/bin/env python # -*- coding: utf-8 -*- # vim:fenc=utf-8 # # Copyright © 2015 jaidev <jaidev@newton> # # Distributed under terms of the MIT license. """ Example showing Morlet scalogram of a Dirac impulse. """ from tftb.generators import anapulse from tftb.processing import scalogram import numpy as np import matplotlib.pyplot as plt sig1 = anapulse(128) tfr, t, f, _ = scalogram(sig1, waveparams=6, fmin=0.05, fmax=0.45, n_voices=128) tfr = np.abs(tfr) ** 2 threshold = np.amax(tfr) * 0.05 tfr[tfr <= threshold] = 0.0 t, f = np.meshgrid(t, f) plt.contour(t, f, tfr, 20) plt.grid() plt.title('Morlet Scalogram of a Dirac Impluse') plt.xlabel('Time') plt.ylabel('Normalized Frequency') plt.show()