def check_IFT_continuous(a, t0, f0, method, f): H = sinegauss_FT(f, t0, f0, a) t, h = IFT_continuous(f, H, method=method) assert_allclose(h, sinegauss(t, t0, f0, a), atol=1E-12)
def check_wavelets(t0, f0, Q, t): h = sinegauss(t, t0, f0, Q) f, H = FT_continuous(t, h) H2 = sinegauss_FT(f, t0, f0, Q) assert_allclose(H, H2, atol=1E-8)
def check_PSD_continuous(a, t0, f0, method, t): h = sinegauss(t, t0, f0, a) f, P = PSD_continuous(t, h, method=method) assert_allclose(P, sinegauss_PSD(f, t0, f0, a), atol=1E-12)
# "Statistics, Data Mining, and Machine Learning in Astronomy" (2013) # For more information, see http://astroML.github.com import numpy as np from matplotlib import pyplot as plt from astroML.fourier import FT_continuous, IFT_continuous, sinegauss #------------------------------------------------------------ # Set up the wavelets t0 = 0 t = np.linspace(-0.4, 0.4, 10000) f0 = np.array([5, 5, 10, 10]) Q = np.array([1, 0.5, 1, 0.5]) # compute wavelets all at once W = sinegauss(t, t0, f0[:, None], Q[:, None]) #------------------------------------------------------------ # Plot the wavelets fig = plt.figure() fig.subplots_adjust(hspace=0.05, wspace=0.05) # in each panel, plot and label a different wavelet for i in range(4): ax = fig.add_subplot(221 + i) ax.plot(t, W[i].real, '-k') ax.plot(t, W[i].imag, '--k') ax.text(0.02, 0.98, "$f_0 = %i$\n$Q = %.1f$" % (f0[i], Q[i]), ha='left', va='top', transform=ax.transAxes, size=14)
def check_FT_continuous(a, t0, f0, method, t): h = sinegauss(t, t0, f0, a) f, H = FT_continuous(t, h, method=method) assert_allclose(H, sinegauss_FT(f, t0, f0, a), atol=1E-12)
# you can set usetex to False. from astroML.plotting import setup_text_plots setup_text_plots(fontsize=8, usetex=True) #------------------------------------------------------------ # Choose parameters for the wavelet N = 10000 t0 = 5 f0 = 2 Q = 2 #------------------------------------------------------------ # Compute the wavelet on a grid of times Dt = 0.01 t = t0 + Dt * (np.arange(N) - N / 2) h = sinegauss(t, t0, f0, Q) #------------------------------------------------------------ # Approximate the continuous Fourier Transform f, H = FT_continuous(t, h) rms_err = np.sqrt(np.mean(abs(H - sinegauss_FT(f, t0, f0, Q)) ** 2)) #------------------------------------------------------------ # Plot the results fig = plt.figure(figsize=(5, 3.75)) fig.subplots_adjust(hspace=0.25) # plot the wavelet ax = fig.add_subplot(211) ax.plot(t, h.real, '-', c='black', label='$Re[h]$', lw=1)
from scipy import fftpack from astroML.fourier import FT_continuous, sinegauss, sinegauss_FT #------------------------------------------------------------ # Choose parameters for the wavelet N = 10000 t0 = 5 f0 = 2 Q = 2 #------------------------------------------------------------ # Compute the wavelet on a grid of times Dt = 0.01 t = t0 + Dt * (np.arange(N) - N / 2) h = sinegauss(t, t0, f0, Q) #------------------------------------------------------------ # Approximate the continuous Fourier Transform f, H = FT_continuous(t, h) rms_err = np.sqrt(np.mean(abs(H - sinegauss_FT(f, t0, f0, Q))**2)) #------------------------------------------------------------ # Plot the results fig = plt.figure() fig.subplots_adjust(hspace=0.25) # plot the wavelet ax = fig.add_subplot(211) ax.plot(t, h.real, '-', c='black', label='$Re[h]$', lw=1)
def test_FT_continuous(a, t0, f0, method): t = np.linspace(-9, 10, 10000) h = sinegauss(t, t0, f0, a) f, H = FT_continuous(t, h, method=method) assert_allclose(H, sinegauss_FT(f, t0, f0, a), atol=1E-12)
def test_PSD_continuous(a, t0, f0, method): t = np.linspace(-9, 10, 10000) h = sinegauss(t, t0, f0, a) f, P = PSD_continuous(t, h, method=method) assert_allclose(P, sinegauss_PSD(f, t0, f0, a), atol=1E-12)
def test_wavelets(t0, f0, Q): t = np.linspace(-10, 10, 10000) h = sinegauss(t, t0, f0, Q) f, H = FT_continuous(t, h) H2 = sinegauss_FT(f, t0, f0, Q) assert_allclose(H, H2, atol=1E-8)
setup_text_plots(fontsize=8, usetex=True) #------------------------------------------------------------ # Sample the function: localized noise np.random.seed(0) N = 1024 t = np.linspace(-5, 5, N) x = np.ones(len(t)) h = np.random.normal(0, 1, len(t)) h *= np.exp(-0.5 * (t / 0.5)**2) #------------------------------------------------------------ # Compute an example wavelet W = sinegauss(t, 0, 1.5, Q=1.0) #------------------------------------------------------------ # Compute the wavelet PSD f0 = np.linspace(0.5, 7.5, 100) wPSD = wavelet_PSD(t, h, f0, Q=1.0) #------------------------------------------------------------ # Plot the results fig = plt.figure(figsize=(5, 5)) fig.subplots_adjust(hspace=0.05, left=0.12, right=0.95, bottom=0.08, top=0.95) # First panel: the signal ax = fig.add_subplot(311) ax.plot(t, h, '-k', lw=1) ax.text(0.02,
def check_IFT_continuous(a, t0, f0, method): f = np.linspace(-9, 10, 10000) H = sinegauss_FT(f, t0, f0, a) t, h = IFT_continuous(f, H, method=method) assert_allclose(h, sinegauss(t, t0, f0, a), atol=1E-12)
FT_continuous, IFT_continuous, sinegauss, sinegauss_FT, wavelet_PSD #------------------------------------------------------------ # Sample the function: localized noise np.random.seed(0) N = 1024 t = np.linspace(-5, 5, N) x = np.ones(len(t)) h = np.random.normal(0, 1, len(t)) h *= np.exp(-0.5 * (t / 0.5) ** 2) #------------------------------------------------------------ # Compute an example wavelet W = sinegauss(t, 0, 1.5, Q=1.0) #------------------------------------------------------------ # Compute the wavelet PSD f0 = np.linspace(0.5, 7.5, 100) wPSD = wavelet_PSD(t, h, f0, Q=1.0) #------------------------------------------------------------ # Plot the results fig = plt.figure(figsize=(8, 8)) fig.subplots_adjust(hspace=0.05, left=0.12, right=0.95, bottom=0.08, top=0.95) # First panel: the signal ax = fig.add_subplot(311) ax.plot(t, h, '-k', lw=1) ax.text(0.02, 0.95, ("Input Signal:\n"
def compute_Gaussian(): from astroML.fourier import\ FT_continuous, IFT_continuous, sinegauss, sinegauss_FT, wavelet_PSD #---------------------------------------------------------------------- # This function adjusts matplotlib settings for a uniform feel in the textbook. # Note that with usetex=True, fonts are rendered with LaTeX. This may # result in an error if LaTeX is not installed on your system. In that case, # you can set usetex to False. from astroML.plotting import setup_text_plots setup_text_plots(fontsize=8, usetex=False) #------------------------------------------------------------ # Sample the function: localized noise np.random.seed(0) N = 1024 t = np.linspace(-5, 5, N) x = np.ones(len(t)) h = np.random.normal(0, 1, len(t)) h *= np.exp(-0.5 * (t / 0.5) ** 2) #------------------------------------------------------------ # Compute an example wavelet W = sinegauss(t, 0, 1.5, Q=1.0) #------------------------------------------------------------ # Compute the wavelet PSD f0 = np.linspace(0.5, 7.5, 100) wPSD = wavelet_PSD(t, h, f0, Q=1.0) #------------------------------------------------------------ # Plot the results fig = plt.figure(figsize=(5, 5)) fig.subplots_adjust(hspace=0.05, left=0.12, right=0.95, bottom=0.08, top=0.95) # First panel: the signal ax = fig.add_subplot(311) ax.plot(t, h, '-k', lw=1) ax.text(0.02, 0.95, ("Input Signal:\n" "Localized Gaussian noise"), ha='left', va='top', transform=ax.transAxes) ax.set_xlim(-4, 4) ax.set_ylim(-2.9, 2.9) ax.xaxis.set_major_formatter(plt.NullFormatter()) ax.set_ylabel('$h(t)$') # Second panel: an example wavelet ax = fig.add_subplot(312) ax.plot(t, W.real, '-k', label='real part', lw=1) ax.plot(t, W.imag, '--k', label='imag part', lw=1) ax.text(0.02, 0.95, ("Example Wavelet\n" "$t_0 = 0$, $f_0=1.5$, $Q=1.0$"), ha='left', va='top', transform=ax.transAxes) ax.text(0.98, 0.05, (r"$w(t; t_0, f_0, Q) = e^{-[f_0 (t - t_0) / Q]^2}" "e^{2 \pi i f_0 (t - t_0)}$"), ha='right', va='bottom', transform=ax.transAxes) ax.legend(loc=1) ax.set_xlim(-4, 4) ax.set_ylim(-1.4, 1.4) ax.set_ylabel('$w(t; t_0, f_0, Q)$') ax.xaxis.set_major_formatter(plt.NullFormatter()) # Third panel: the spectrogram ax = plt.subplot(313) ax.imshow(wPSD, origin='lower', aspect='auto', cmap=plt.cm.jet, extent=[t[0], t[-1], f0[0], f0[-1]]) ax.text(0.02, 0.95, ("Wavelet PSD"), color='w', ha='left', va='top', transform=ax.transAxes) ax.set_xlim(-4, 4) ax.set_ylim(0.5, 7.5) ax.set_xlabel('$t$') ax.set_ylabel('$f_0$') plt.show()