# -*- coding: utf-8 -*- # vim:fenc=utf-8 # # Copyright © 2015 jaidev <jaidev@newton> # # Distributed under terms of the MIT license. """ ================================================================================ Sampling Effects on the Wigner-Ville Distribution of a Real Valued Gaussian Atom ================================================================================ This example shows the Wigner-Ville distribution of a real valued Gaussian atom. If a signal is sampled at the Nyquist rate, the WVD is affected by spectral aliasing and many additional interferences. To fix this, either the signal may be oversampled, or an analytical signal may be used. Figure 4.6 from the tutorial. """ import numpy as np from tftb.generators import atoms from tftb.processing import WignerVilleDistribution x = np.array([[32, .15, 20, 1], [96, .32, 20, 1]]) g = atoms(128, x) spec = WignerVilleDistribution(np.real(g)) spec.run() spec.plot(kind="contour", show_tf=True, 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. """ ================================================================================ Sampling Effects on the Wigner-Ville Distribution of a Real Valued Gaussian Atom ================================================================================ This example shows the Wigner-Ville distribution of a real valued Gaussian atom. If a signal is sampled at the Nyquist rate, the WVD is affected by spectral aliasing and many additional interferences. To fix this, either the signal may be oversampled, or an analytical signal may be used. Figure 4.6 from the tutorial. """ import numpy as np from tftb.generators import atoms from tftb.processing import WignerVilleDistribution x = np.array([[32, .15, 20, 1], [96, .32, 20, 1]]) g = atoms(128, x) spec = WignerVilleDistribution(np.real(g)) spec.run() spec.plot(kind="contour", show_tf=True, 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. """ ============================================= Wigner-Ville Distribution of a Doppler Signal ============================================= This example shows the Wigner-Ville distribution of a Doppler signal. The signal steadily rises and falls, but there are many interference terms present in the time-friequency plane, due to the bilinearity of the signal. Figure 4.2 from the tutorial. """ from tftb.generators import doppler from tftb.processing import WignerVilleDistribution fm, am, iflaw = doppler(256, 50.0, 13.0, 10.0, 200.0) sig = am * fm dist = WignerVilleDistribution(sig) tfr, times, freqs = dist.run() dist.plot(show_tf=True, kind="contour", scale="log")
# -*- coding: utf-8 -*- # vim:fenc=utf-8 # # Copyright © 2015 jaidev <jaidev@newton> # # Distributed under terms of the MIT license. """ =================================================================== Wigner Ville distribution of a Gaussian Atom and a Complex Sinusoid =================================================================== This example demonstrates the Wigner Ville distribution of a signal composed from a Gaussian atom and a complex sinusoid with constant frequency modulation. Although the representation does isolate the atom and the sinusoid as independent phenomena in the signal, it also produces some interference between them. """ from tftb.generators import fmconst, amgauss from tftb.processing import WignerVilleDistribution import numpy as np sig = fmconst(128, 0.15)[0] + amgauss(128) * fmconst(128, 0.4)[0] tfr = WignerVilleDistribution(sig) tfr.run() tfr.plot(show_tf=True, kind='contour', freq_x=(abs(np.fft.fftshift(np.fft.fft(sig))) ** 2)[::-1][:64], freq_y=np.arange(sig.shape[0] / 2))
#! /usr/bin/env python # -*- coding: utf-8 -*- # vim:fenc=utf-8 # # Copyright © 2015 jaidev <jaidev@newton> # # Distributed under terms of the MIT license. """ =================================================================== Wigner Ville distribution of a Gaussian Atom and a Complex Sinusoid =================================================================== This example demonstrates the Wigner Ville distribution of a signal composed from a Gaussian atom and a complex sinusoid with constant frequency modulation. Although the representation does isolate the atom and the sinusoid as independent phenomena in the signal, it also produces some interference between them. Figure 4.8 from the tutorial. """ from tftb.generators import fmconst, amgauss from tftb.processing import WignerVilleDistribution sig = fmconst(128, 0.15)[0] + amgauss(128) * fmconst(128, 0.4)[0] tfr = WignerVilleDistribution(sig) tfr.run() tfr.plot(show_tf=True, kind='contour')
# # Copyright © 2015 jaidev <jaidev@newton> # # Distributed under terms of the MIT license. """ ========================================================= Wigner-Ville Distribution of Chirps with Different Slopes ========================================================= This example demonstrates the Wigner-Ville distribution of a signal composed of two chirps with Gaussian amplitude modulation but havind linear frequency modulations with different slopes. Note that the AF interference terms are located away from the origin. We can see the two distint signal terms, but there is some interference around the middle. """ from tftb.generators import fmlin, amgauss from tftb.processing import WignerVilleDistribution import numpy as np n_points = 64 sig1 = fmlin(n_points, 0.2, 0.5)[0] * amgauss(n_points) sig2 = fmlin(n_points, 0.3, 0)[0] * amgauss(n_points) sig = np.hstack((sig1, sig2)) tfr = WignerVilleDistribution(sig) tfr.run() tfr.plot(kind='contour', show_tf=True)
def wigner_ville_dist(mag): from tftb.processing import WignerVilleDistribution wvd = WignerVilleDistribution(mag) wvd.run() wvd.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. """ ==================================== Wigner-Ville distribution of a Chirp ==================================== This example shows the wireframe plot of the Wigner-Ville distribution of a chirp. The WV distribution can take negative values, and has almost perfect localization in the time-frequency plane. Figure 4.1 from the tutorial. """ from tftb.generators import fmlin from tftb.processing import WignerVilleDistribution sig = fmlin(256)[0] tfr = WignerVilleDistribution(sig) tfr.run() tfr.plot(threshold=0.0, kind='wireframe')
#! /usr/bin/env python # -*- coding: utf-8 -*- # vim:fenc=utf-8 # # Copyright © 2015 jaidev <jaidev@newton> # # Distributed under terms of the MIT license. """ ===================================================== Wigner-Ville Distribution of a Dirac Impulse Function ===================================================== This example demonstrates the Wigner-Ville distribution of a Dirac impulse function, and shows the limitations of the WV distribution when applied to broadband signals. Figure 4.24 from the tutorial. """ from tftb.generators import anapulse from tftb.processing import WignerVilleDistribution sig = anapulse(128) wvd = WignerVilleDistribution(sig) wvd.run() wvd.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. """ Example from section 4.1.2 of the tutorials. """ from tftb.generators import fmconst, amgauss from tftb.processing import WignerVilleDistribution import numpy as np sig = fmconst(128, 0.15)[0] + amgauss(128) * fmconst(128, 0.4)[0] tfr = WignerVilleDistribution(sig) tfr.run() tfr.plot(show_tf=True, kind='contour', freq_x=(abs(np.fft.fftshift(np.fft.fft(sig))) ** 2)[::-1][:64], freq_y=np.arange(sig.shape[0] / 2))
#! /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 4.1.1 of the tutorial. """ from tftb.generators import fmlin from tftb.processing import WignerVilleDistribution sig = fmlin(256)[0] tfr = WignerVilleDistribution(sig) tfr.run() tfr.plot(kind='surf', sqmod=True)
dT=T - 1 window = np.ones(T) TFD = Spectrogram(sig, n_fbins=N, fwindow=window) TFD.run() TFD.plot(kind="contour", threshold=0.1, show_tf=False) # plt.xlabel('t (s)','FontSize',12) # plt.ylabel('f (Hz)','FontSize',12) # plt.title(cat('T=',str(T),',N=',str(N),',dT=',str(dT))) # ukazi.m:49 -- Note: # Wigner-Villova časovno-frekvenčna porazdelitev - skoraj idealna časovna in frekvenčna ločljivost wvd = WignerVilleDistribution(np.real(sig)) wvd.run() wvd.plot(kind='contour') tfr, rtfr, hat = pseudo_wigner_ville(np.real(sig)) TFD,t,f=tfrwv(sig,nargout=3) # ukazi4.m:41 plt.figure() imagesc(t,f,TFD) plt.axis('tight') plt.xlabel('t','FontSize',12) plt.ylabel('f','FontSize',12) plt.axis('tight') plt.axis('xy') plt.title(cat('Wigner-Villova asovno-frekvenna porazdelitev')) # Trenutna autokorelacija Rss(t,tau) = sig(t+tau) .* conj(sig(t-tau)); - kvadratna funkcija signala---------------------
#! /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 4.1.3 of the tutorial. """ from tftb.generators import fmlin, amgauss from tftb.processing import WignerVilleDistribution import numpy as np n_points = 64 sig1 = fmlin(n_points, 0.2, 0.5)[0] * amgauss(n_points) sig2 = fmlin(n_points, 0.3, 0)[0] * amgauss(n_points) sig = np.hstack((sig1, sig2)) tfr = WignerVilleDistribution(sig) tfr.run() tfr.plot(kind='contour', show_tf=True)