Análise wavelet. O básico

1. Introdução


A palavra em inglês wavelet (do francês "ondelette") se traduz literalmente como "onda curta (pequena)". Em várias traduções de artigos estrangeiros para o russo, também existem termos: "burst", "função burst", "função de ondas baixas", "wave" etc.

A transformada wavelet (VP) é amplamente usada para análise de sinais. Além disso, ele encontra ótima aplicação no campo da compactação de dados. O VP de um sinal unidimensional é sua representação na forma de uma série generalizada ou integral de Fourier sobre um sistema de funções básicas.

 psiab(t)= frac1 sqrta psi left( fractba right) (1)

construído a partir da wavelet mãe (fonte)  psi(t) possuir certas propriedades devido a operações de mudança de horário (b) e mudanças na escala temporal (a).

Multiplicador 1/ sqrta garante a independência da norma de funções (1) do número de escala (a). Para os valores fornecidos dos parâmetros aeb, a função  psiab(t) e há uma wavelet gerada pela mãe wavelet  psi(t) .

Um exemplo é a wavelet de chapéu mexicana nos domínios de tempo e frequência:

Lista de wavelet para domínio de tempo
from numpy import* import matplotlib.pyplot as plt x= arange(-4,30,0.01) def w(a,b,t): f =(1/a**0.5)*exp(-0.5*((tb)/a)**2)* (((tb)/a)**2-1) return f plt.title(" « »:\n$1/\sqrt{a}*exp(-0,5*t^{2}/a^{2})*(t^{2}-1)$") y=[w(1,12,t) for t in x] plt.plot(x,y,label="$\psi(t)$ a=1,b=12") y=[w(2,12,t) for t in x] plt.plot(x,y,label="$\psi_{ab}(t)$ a=2 b=12") y=[w(4,12,t) for t in x] plt.plot(x,y,label="$\psi_{ab}(t)$ a=4 b=12") plt.legend(loc='best') plt.grid(True) plt.show() 




Listagem para o espectro wavelet
 from numpy import* from pylab import * from scipy import * import os def w(a,b,t): f =(1/a**0.5)*exp(-0.5*((tb)/a)**2)* (((tb)/a)**2-1) return f x= arange(-4,30,0.2) def plotSpectrum(y,Fs): n = len(y) k = arange(n) T = n/Fs frq = k/T frq = frq[range(int(n/2))] Y = fft(y)/n Y = Y[range(int(n/2))] return Y,frq xlabel('f (Hz)') ylabel('|Y(f)|') Fs=1024.0 y=[w(1,12,t) for t in x] Y,frq=plotSpectrum(y,Fs) plot(frq,abs(Y),label="$\psi(\omega)$ a=1,b=12") y=[w(2,12,t) for t in x] Y,frq=plotSpectrum(y,Fs) plot(frq,abs(Y),label="$\psi_{ab}(\omega)$ a=2 b=12") y=[w(4,12,t) for t in x] Y,frq=plotSpectrum(y,Fs) plot(frq,abs(Y),label="$\psi_{ab}(\omega)$ a=4 b=12") plt.title(" « »   $\omega$") legend(loc='best') grid(True) show() 




Conclusão:

1. Entre o conceito de harmônicas de Fourier e a escala da wavelet, existe realmente um relacionamento. A principal coisa nesse relacionamento é a proporção inversa da frequência e escala naturais. Além disso, reduzindo a escala, aumentamos a largura de banda do espectro de wavelets.

2. Alterando a escala (aumentar a leva a um estreitamento do espectro de Fourier de  psiab(t) ), as wavelets são capazes de detectar a diferença de características em diferentes escalas (frequências) e, devido à mudança, analisar as propriedades do sinal em diferentes pontos em todo o intervalo estudado. Portanto, ao analisar sinais não estacionários, devido à localidade das wavelets, obtêm uma vantagem significativa sobre a transformada de Fourier, que fornece apenas informações globais sobre as frequências (escalas) do sinal analisado, uma vez que o sistema de funções utilizadas (expoente complexo ou senos e cossenos) é definido em intervalo infinito.

3. As listagens acima, escritas na linguagem Python de alto nível distribuída gratuitamente, permitem selecionar funções para wavelets que atendem aos requisitos especificados. No entanto, é adicionalmente necessário levar em consideração todos os principais sinais de wavelets.

Os principais sinais da wavelet


Limitação. O quadrado da norma da função deve ser finito:
 left | psi right |2= int infty infty left| psi(t) right|2dt< infty . 2)

Localização O VP, em contraste com a transformação de Fourier, usa uma função inicial localizada no tempo e na frequência. Para fazer isso, basta que as seguintes condições sejam atendidas:

 left| psi(t) right| leqC(1+ left|t right|)1 varepsilon e
 left|S psi( omega) right| leqC(1+ left| omega right|)1 varepsilon às  varepsilon>0 (3)

Por exemplo, uma função delta  delta(t) e a função harmônica não satisfazem as condições necessárias para a localização simultânea nos domínios de tempo e frequência.

Média zero. O gráfico da função original deve oscilar (alternando) em torno de zero no eixo do tempo e ter área zero:

 int infty infty psi(t)dt=0 . 4)

A partir dessa condição, fica clara a escolha do nome "wavelet" - uma pequena onda.

Área de função igual a zero  psi(t) , ou seja, momento zero, leva ao fato de a transformada de Fourier S psi( omega) esta função é igual a zero para  omega=0 e tem a forma de um filtro passa-banda. Para vários valores (a), este será um conjunto de filtros passa-banda.

Muitas vezes, para aplicativos, é necessário que não apenas zero, mas todos os primeiros n momentos sejam iguais a zero:

 int infty inftytn psi(t)dt=0 . (5)

As n-ésimas wavelets permitem analisar a estrutura mais fina (alta frequência) do sinal, suprimindo seus componentes que mudam lentamente.

Feito por você mesmo. Uma característica do VP é sua auto-similaridade. Todas as wavelets de uma família específica  psiab(t) têm o mesmo número de oscilações que a mãe wavelet  psi(t) , desde que obtido por meio de transformações de escala (a) e deslocamento (b).

Transformada de wavelet contínua


Transformada de wavelet contínua (integral) (NVP ou WT - transformação de wavelet contínua). Construímos a base  psiab(t) usando transformações contínuas de escala (a) e transferências (b) da wavelet mãe  psi(t) com valores arbitrários dos parâmetros base aeb na fórmula (1).

Então, por definição, o NVP direto (análise) e reverso (síntese) (ou seja, PNVP e ONVP) do sinal S (t) são escritos da seguinte forma:
Ws(a,b)=(S(t), psiab(t))= frac1 sqrta int infty inftyS(t) psi left( fractba right)dt (6)

S(t)= frac1C psi int infty infty int infty inftyWs(a,b) psiab(t) fracdadba2 (7)

onde C psi - coeficiente de normalização,
C psi= int infty infty left| psi( omega) right|2 left| omega right|1d omega< infty
onde: (•, •) é o produto escalar dos fatores correspondentes,
 mathbf psi( omega) - Transformada de Fourier de uma wavelet  psi(t) . Para wavelets ortonormais C psi=1 .

Resulta de (6) que o espectro de wavelets Ws(b,a) (espectro wavelet, ou espectro de escala de tempo), diferentemente do espectro de Fourier (espectro único), é uma função de dois argumentos: o primeiro argumento a (escala de tempo) é semelhante ao período de oscilação, ou seja, é inverso à frequência e o segundo b –– é semelhante ao deslocamento do sinal ao longo do eixo do tempo.

Note-se que Ws(b,a0) caracteriza a dependência do tempo (em a=a0) , enquanto as dependências Ws(a,b0) é possível combinar a dependência de frequência (por b=b0 )

Se o sinal estudado S (t) é um único pulso de duração  tauu concentrado no bairro t=t0 , seu espectro de wavelets terá o maior valor nas proximidades do ponto com coordenadas a= tauu,b=t0 .

Métodos de apresentação Ws(b,a) pode ser diferente. Spectrum Ws(b,a) é uma superfície no espaço tridimensional. No entanto, muitas vezes em vez da imagem da superfície, sua projeção no plano ab é apresentada com níveis iso (ou figuras de várias cores), que permitem rastrear a mudança na intensidade das amplitudes do EP em diferentes escalas (a) e no tempo (b).

Além disso, eles representam linhas de extremos locais dessas superfícies, o chamado esqueleto (esqueleto), que revela a estrutura do sinal analisado.

Transformada de wavelet contínua ao determinar o espectro de wavelet com base na wavelet mãe - “chapéu mexicano”



Outras wavelets maternas usadas para NVP também são usadas:



O VP contínuo é amplamente utilizado no processamento de sinais. Em particular, a análise wavelet (VA) oferece oportunidades únicas para reconhecer características locais e "sutis" de sinais (funções), o que é importante em muitas áreas de engenharia de rádio, comunicações, rádio eletrônica, geofísica e outros ramos da ciência e tecnologia. Vamos considerar essa possibilidade com alguns exemplos simples.

Oscilação harmônica.

O sinal tem a forma: s(t)=Asin( omegat phi)

onde: A=1V, omega= frac2 piT= frac2 pi50, psi=0

Função de formação de wavelet: MHAT(t):= fracd2dt2exp(t2/2) ,

Wavelets:  psi(a,b,t)= frac1 sqrtaMHAT left( fractba right) ,

Espectro de wavelets: N: = 256, a: = 1..30, b: = 0..50, W(a,b):= intNN psi(a,b,t)s(t)dt,Nab:=W(a,b) .

Listagem do programa
 from scipy.integrate import quad from numpy import* import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from matplotlib import cm N=256 T=50 def S(t): return sin(2*pi*t/T) plt.figure() plt.title('  ', size=12) y=[S(t) for t in arange(0,100,1)] x=[t for t in arange(0,100,1)] plt.plot(x,y) plt.grid() def w(a,b): f = lambda t :(1/a**0.5)*exp(-0.5*((tb)/a)**2)* (((tb)/a)**2-1)*S(t) r= quad(f, -N, N) return round(r[0],3) x = arange(1,50,1) y = arange(1,50,1) z = array([w(i,j) for j in y for i in x]) X, Y = meshgrid(x, y) Z = z.reshape(49,49) fig = plt.figure("- :  ") ax = Axes3D(fig) ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.jet) ax.set_xlabel(' :a') ax.set_ylabel(': b') ax.set_zlabel(' : $ N_{ab}$') plt.figure("2D-  z = w (a,b)") plt.title(' ab    ', size=12) plt.contourf(X, Y, Z,100) plt.show() 




Gráfico de sinal.



Gráfico de um espectro de dois parâmetros Nab=W(ab) exibido como uma superfície no espaço tridimensional.



Note-se que a seção W (a, b) para a escala de tempo a=a0 caracteriza a oscilação inicial s (t). Além disso, sua amplitude é máxima em a0:1/ omega . Dependências W(a0,b0) pode corresponder ao espectro atual de oscilações em b=b0 .

A soma de duas oscilações harmônicas.

O sinal tem a forma: s(t):=A1sin( omega1t)+A2sin( omega2t)

onde: A1=A2=1V, omega1= frac2 piT1, omega2= frac2 piT2,T1=50s,T2=10s .

MHAT(t):= fracd2dt2 left[et2/2 right] , N: = 256,
 psi(a,b,t):=MHAT left( fractba right),W(a,b):= intNN psi(a,b,t)f(t)dt , a: = 1 ... 30, b: = 0 ... 50, Nab:=W(a,b) .

Listagem do programa
 from scipy.integrate import quad from numpy import* import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from matplotlib import cm N=256 def S(t): return sin(2*pi*t/10)+sin(2*pi*t/50) plt.figure('    ') plt.title('    ', size=12) y=[S(t) for t in arange(0,250,1)] x=[t for t in arange(0,250,1)] plt.plot(x,y) plt.grid() def w(a,b): f = lambda t :(1/a**0.5)*exp(-0.5*((tb)/a)**2)* (((tb)/a)**2-1)*S(t) r= quad(f, -N, N) return round(r[0],3) x = arange(1,50,1) y = arange(1,50,1) z = array([w(i,j) for j in y for i in x]) X, Y = meshgrid(x, y) Z = z.reshape(49, 49) fig = plt.figure("-:2-  ") ax = Axes3D(fig) ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.jet) ax.set_xlabel(' :a') ax.set_ylabel(': b') ax.set_zlabel(' : $ N_{ab}$') plt.figure("2D-  z = w (a,b)") plt.title(' ab    ', size=12) plt.contourf(X, Y, Z, 100) plt.figure() q=[w(2,i) for i in y] p=[i for i in y] plt.plot(p,q,label='w(2,b)') q=[w(15,i) for i in y] plt.plot(p,q,label='w(15,b)') q=[w(30,i) for i in y] plt.plot(p,q,label='w(30,b)') plt.legend(loc='best') plt.grid(True) plt.figure() q=[w(i,13) for i in x] p=[i for i in x] plt.plot(p,q,label='w(a,13)') q=[w(i,17) for i in x] plt.plot(p,q,label='w(a,17)') plt.legend(loc='best') plt.grid(True) plt.show() 





Gráfico de sinal.



O gráfico do espectro de dois parâmetros W (a, b) é exibido como uma superfície no espaço tridimensional.



O plano dos parâmetros a, b no qual os resultados do EP são destacados em áreas coloridas.



O gráfico mostra as “seções transversais” do espectro da wavelet para dois valores do parâmetro a. Com um parâmetro relativamente pequeno da escala de tempo a, por a1=2(a1:1/ omega2) , a seção transversal do espectro carrega informações apenas sobre o componente de alta frequência do sinal, filtrando (suprimindo) seu componente de baixa frequência.

À medida que aumenta, a extensão da função base  psi( fractba) , portanto, estreitando seu espectro e estreitando a largura de banda da "janela" de frequência. Como resultado, quando a2=15(a2:1/ omega1) a seção transversal do espectro é apenas um componente de baixa frequência do sinal.

Com um aumento adicional em a, a faixa da janela ainda diminui e o nível desse componente de baixa frequência diminui para um componente constante (para um> 25), que é igual a zero para o sinal analisado.



O gráfico mostra as seções do espectro wavelet W (a, b) caracterizando
espectro de sinal atual em b1=13 e b2=17 . O espectro do sinal considerado, em contraste com o harmônico, contém um componente de alta frequência na região de pequenos valores da escala de tempo a (a: 1..3), que corresponde ao segundo componente do sinal A2sin( omega2t) .

Momento retangular.

U:=5,t0:=20, tau:=60
s(t):= beginvmatrixU,set0 leqt leqt0+ tau0,casocontrário endvmatrix
MHAT(t):= fracd2dt2exp left( fract22 right)
N:=128, psi(a,b,t):=MHAT left( fractba right),W(a,b):= intNN psi(a,b,t)f(t)dt
a:=1..50,b:=0..100,Nba:=W(a,b)

Listagem do programa
 from scipy.integrate import quad from numpy import* import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from matplotlib import cm N=256 def S(t): U=5;t0=20;tau=60 if t0<=t<=t0+tau: return U else: return 0 plt.figure() plt.title(' ', size=12) y=[S(t) for t in arange(0,120,1)] x=[t for t in arange(0,120,1)] plt.plot(x,y) plt.grid() def w(a,b): f = lambda t :(1/a**0.5)*exp(-0.5*((tb)/a)**2)* (((tb)/a)**2-1)*S(t) r= quad(f, -N, N) return round(r[0],3) x = arange(1,100,1) y = arange(1,100,1) z = array([w(i,j) for j in y for i in x]) X, Y = meshgrid(x, y) Z = z.reshape(99, 99) fig = plt.figure("3D-  ") ax = Axes3D(fig) ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.jet) ax.set_xlabel(' :a') ax.set_ylabel(': b') ax.set_zlabel(' : $ N_{ab}$') plt.figure("2D-  z = w (a,b)") plt.title(' ab    ', size=12) plt.contourf(X, Y, Z,100) plt.show() 











Os espectros da wavelet são mostrados em gráficos, o espectro da wavelet transmite bem as características sutis do sinal - seus saltos nas amostras b = 20 eb = 80 (para a: 1..10).

Conclusões


Esta publicação é de natureza educacional, fornece informações básicas sobre a análise de wavelets em geral, e exemplos simples na linguagem de programação de alto nível distribuída gratuitamente Python mostram os recursos da análise contínua de wavelet com extensa visualização gráfica em 3D e 2D.

PS O autor não diminui as vantagens incondicionais da análise de wavelets usando o Matlab, tanto em termos de número de wavelets quanto de velocidade. Mas em Python ainda há espaço para desenvolvimento adicional: scipy.signal e PyWavelets.

Source: https://habr.com/ru/post/pt449646/


All Articles