#! /usr/bin/env python # -*- coding: utf-8 -*- # vim:fenc=utf-8 # # Copyright © 2015 jaidev <jaidev@newton> # # Distributed under terms of the MIT license. """ Example from section 3.1.4 of the tutorial. """ import numpy as np from tftb.processing.linear import ShortTimeFourierTransform from tftb.generators import fmlin, amgauss from matplotlib.pyplot import cm x = np.real(amgauss(128) * fmlin(128)[0]) window = np.array([1]) stft = ShortTimeFourierTransform(x, n_fbins=128, fwindow=window) tfr, _, _ = stft.run() stft.plot(show_tf=True, cmap=cm.gray)
# # Copyright © 2015 jaidev <jaidev@newton> # # Distributed under terms of the MIT license. """ ============================================================ STFT of Gaussian Wave Packets with a Hamming Analysis Window ============================================================ This example demonstrates the construction of a signal containing two transient components, having the same Gaussian amplitude modulation and the same frequency, but different time centers. It also shows the effect of a Hamming window function when used with th STFT. Figure 3.7 from the tutorial. """ import numpy as np import matplotlib.pyplot as plt from tftb.generators import atoms from scipy.signal import hamming from tftb.processing.linear import ShortTimeFourierTransform coords = np.array([[45, .25, 32, 1], [85, .25, 32, 1]]) sig = atoms(128, coords) x = np.real(sig) window = hamming(65) stft = ShortTimeFourierTransform(sig, n_fbins=128, fwindow=window) stft.run() stft.plot(show_tf=True, cmap=plt.cm.gray)
#! /usr/bin/env python # -*- coding: utf-8 -*- # vim:fenc=utf-8 # # Copyright © 2015 jaidev <jaidev@newton> # # Distributed under terms of the MIT license. """ Examples from section 3.1.4 of the tutorial. """ import numpy as np import matplotlib.pyplot as plt from tftb.generators import atoms from scipy.signal import hamming from tftb.processing.linear import ShortTimeFourierTransform coords = np.array([[45, .25, 32, 1], [85, .25, 32, 1]]) sig = atoms(128, coords) x = np.real(sig) window = hamming(17) stft = ShortTimeFourierTransform(sig, n_fbins=128, fwindow=window) stft.run() stft.plot(show_tf=True, cmap=plt.cm.gray)
#! /usr/bin/env python # -*- coding: utf-8 -*- # vim:fenc=utf-8 # # Copyright © 2015 jaidev <jaidev@newton> # # Distributed under terms of the MIT license. """ ===================== Ideal time resolution ===================== This example demonstrates that only the shortest possible window can provide ideal resolution in time. """ import numpy as np from tftb.processing.linear import ShortTimeFourierTransform from tftb.generators import fmlin, amgauss from matplotlib.pyplot import cm x = np.real(amgauss(128) * fmlin(128)[0]) window = np.array([1]) stft = ShortTimeFourierTransform(x, n_fbins=128, fwindow=window) tfr, _, _ = stft.run() stft.plot(show_tf=True, cmap=cm.gray)
from tftb.generators import fmlin from tftb.processing.linear import ShortTimeFourierTransform import matplotlib.pyplot as plt from scipy.signal import hamming import numpy as np from mpl_toolkits.axes_grid1 import make_axes_locatable N = 128 x1, _ = fmlin(N, 0, 0.2) x2, _ = fmlin(N, 0.3, 0.5) x = x1 + x2 n_fbins = 128 window = hamming(33) tfr, _, _ = ShortTimeFourierTransform(x, timestamps=None, n_fbins=n_fbins, fwindow=window).run() tfr = tfr[:64, :] threshold = np.amax(np.abs(tfr)) * 0.05 tfr[np.abs(tfr) <= threshold] = 0.0 + 1j * 0.0 tfr = np.abs(tfr) ** 2 t = np.arange(tfr.shape[1]) f = np.linspace(0, 0.5, tfr.shape[0]) T, F = np.meshgrid(t, f) fig, axScatter = plt.subplots(figsize=(10, 8)) axScatter.contour(T, F, tfr, 5) axScatter.grid(True) axScatter.set_title('Squared modulus of STFT') axScatter.set_ylabel('Frequency') axScatter.yaxis.set_label_position("right")
from tftb.processing.linear import ShortTimeFourierTransform from tftb.generators import fmconst import numpy as np sig = np.r_[fmconst(128, 0.2)[0], fmconst(128, 0.4)[0]] tfr = ShortTimeFourierTransform(sig) tfr.run() tfr.plot()