[ << ] | [ < ] | [ Acima ] | [ > ] | [ >> ] | [Topo] | [Conteúdo] | [Índice] | [ ? ] |
Esse capítulo descreve funções para executar Transformadas Wavelet Discretas (DWTs (55)). A biblioteca inclui wavelets para dados reais em ambas uma e duas dimensões. As funções wavelet são declaradas nos arquivos de cabeçalho ‘gsl_wavelet.h’ e ‘gsl_wavelet2d.h’.
31.1 Definições | ||
31.2 Inicialização | ||
31.3 Funções de Transformada | ||
31.4 Exemplos | ||
31.5 Referências e Leituras Adicionais |
[ << ] | [ < ] | [ Acima ] | [ > ] | [ >> ] | [Topo] | [Conteúdo] | [Índice] | [ ? ] |
A transformada wavelet contínua e sua inversa são definidas pelas
relações,
|
|
A versão discreta da transformada wavelet atua sobre amostras equitativamente espaçadas, com passos de translações e ajustes proporcionais (s, \tau). Dos eixos de frequência e tempo são retiradas amostras diádicamente sobre ajustes proporcionais de 2^j através de um parâmetro de nível j. A família resultante de funções {\psi_{j,n}} constitue uma base ortonormal para sinais de quadrados integráveis.
A transformada wavelet discreta é um algoritmo O(N), e é também referenciado como transformada wavelet rápida.
[ << ] | [ < ] | [ Acima ] | [ > ] | [ >> ] | [Topo] | [Conteúdo] | [Índice] | [ ? ] |
A estrutura gsl_wavelet
contém os coeficientes de filtro
definindo a wavelet e quaisquer parâmetros de deslocamento associado.
Essa função aloca e inicializa um objeto wavelet do tipo T. O parâmetro k seleciona o membro específico da família de wavelet. Um apontador nulo é retornado se não tiver memória suficiente disponível ou se um membro não suportado for selecionado.
Os seguintes tipos de wavelet são implementados:
Essa é a família de wavelets de Daubechies (56) de fase máxima com k/2 momentos tendendo para zero. As wavelets implementadas são k=4, 6, …, 20, com k sendo um número par.
Essa é a wavelet de Haar (57). A única escolha válida de k para a wavelet de Haar é k=2.
Essa é a família de wavelet B-spline biortogonal de ordem (i,j). Os valores implementados de k = 100*i + j são 103, 105, 202, 204, 206, 208, 301, 303, 305 307, 309.
As formas centradas de wavelets alinham com os coeficientes de várias sub-bandas sobre arestas. Dessa forma a visualização resultante dos coeficientes da transformada wavelet no plano de fase é fácil para entender.
Essa função retorna um apontador para o nome da família de wavelet para w.
Essa função libera o objeto wavelet w.
A estrutura gsl_wavelet_workspace
contém espaço de rascunho do
mesmo tamanho que os dados de entrada e é usado para manter resultados intermediários
durante a tranformação.
Essa função aloca um espaço de trabalho para a transformada wavelet discreta. Para executar uma transformada unidimensional sobre n elementos, um espaço de trabalho de tamanho n deve ser fornecido. Para transformadas bidimensionais de matrizes n-por-n é suficiente alocar um espaço de trabalho de tamanho n, uma vez que a transformada opera sobre linhas individuais e colunas individuais. Um apontador nulo é retornado se não houver memória suficiente disponível.
Essa função libera o espaço de trabalho alocado work.
[ << ] | [ < ] | [ Acima ] | [ > ] | [ >> ] | [Topo] | [Conteúdo] | [Índice] | [ ? ] |
Essa seção descreve as funções atuais executando a transformada wavelet discreta. Note que as transformadas usam condições associadas periódicas. Se o sinal não for periódico no comprimento da amostra então coeficientes espúrios irão aparecer no início e no fim de cada nível da transformada.
31.3.1 Transformadas wavelets em uma dimensão | ||
31.3.2 Transformadas wavelet em duas dimensões |
[ << ] | [ < ] | [ Acima ] | [ > ] | [ >> ] | [Topo] | [Conteúdo] | [Índice] | [ ? ] |
Essas funções calculam transformadas wavelet discretas localmente pela direita e transformadas wavelet discretas
localmente inversa ambas de comprimento n com salto stride sobre o vetor estático
data. O comprimento da transformada n é restrito a potências de base
dois. Para a versão transform
da função o argumento
dir pode ser ou forward
(+1) (58) ou backward
(59)
(-1). Um espaço de trabalho work de comprimento n deve ser fornecido.
Para a transformada pela direita, os elementos do vetor estático original são
substituídos pela transformada wavelet
discreta f_i -> w_{j,k}
em um esquema de armazenamento triangular empacotado,
onde j é o índice do nível
j = 0 ... J-1
e
k é o índice do coeficiente dentro de cada nível,
k = 0 ... (2^j)-1.
O número total de níveis é J = \log_2(n). Os dados de saída
possuem a seguinte forma,
|
Essas funções retornam uma situação atual de GSL_SUCCESS
em caso de terem completado a tarefa
com sucesso. A situação atual de GSL_EINVAL
é retornada se n não for uma potência
inteira de base dois ou se um espaço de trabalho insuficiente for fornecido.
[ << ] | [ < ] | [ Acima ] | [ > ] | [ >> ] | [Topo] | [Conteúdo] | [Índice] | [ ? ] |
A biblioteca fornece funções para executar transformadas wavelets discretas bidimensionais sobre matrizes quadradas. As dimensões da matriz devem ser uma potência inteira de base dois. Existe duas possíveis ordenações de linhas e colunas na transformada wavelet bidimensional, referenciadas como forma “padrão” e forma “não padrão”.
A transformada “padrão” executa uma completa transformada wavelet discreta sobre as linhas da matriz, seguida por uma transformada wavelet discreta completa separada sobre as colunas da resultante matriz linha transformada. Esse procedimento usa a mesma ordenação usada na transformada de Fourier bidimensional.
A transformada “não padrão” é executada em etapas intercaladas sobre as linhas e as colunas da matriz para cada nível da transformada. O primeiro nível da transformada é aplicado às linhas da matriz e em seguida colunas da matriz. Esse procedimento é então repetido ao longo de todas as linhas e colunas dos dados para os níveis subsequentes da transformada, até que a transformada wavelet seja completada em sua totalidade. A forma não padrão da transformada wavelet discreta é tipicamente usada em análise de imagem.
As funções descritas nessa seção são declaradas no arquivo de cabeçalho ‘gsl_wavelet2d.h’.
Essas funções calculam as transformadas wavelet discretas pela direita e
inversa localmente bidimensional na forma padrão sobre o
vetor estático data armazenado na forma linha principal com dimensões size1
e size2 e comprimento físico de linha tda. As dimensões devem
se iguais (matriz quadrada) e são restritas a potências de base dois. Para a
versão transform
da função o argumento dir pode ser
ou forward
(+1)(60) ou backward
(-1)(61). Um
espaço de trabalho work de tamanho apropriado deve ser fornecido. Na saída,
os elementos apropriados da vetor estático data são substituídos por sua
transformada wavelet bidimensional.
A função retorna uma situação atual de GSL_SUCCESS
em caso de terem completado a tarefa
com sucesso. GSL_EINVAL
é retornado se size1 e
size2 não forem iguais e expoentes inteiros de 2, ou se for fornecido espaço de
trabalho insuficiente.
Essas funções calculam a transformada wavelet localmente bidimensional sobre uma matriz a.
Essas funções calculam a transformada wavelet bidimensional em sua forma não padrão.
Essas funções calculam a forma não padrão da transformada wavelet localmente bidimensional sobre uma matriz a.
[ << ] | [ < ] | [ Acima ] | [ > ] | [ >> ] | [Topo] | [Conteúdo] | [Índice] | [ ? ] |
O seguinte programa demonstra o uso das funções de transformada wavelet unidimensionais. Calculam uma aproximação para um sinal entrada (de comprimento 256) usando as 20 maiores componentes da transformada wavelet, enquanto ajusta as outras para zero.
#include <stdio.h> #include <math.h> #include <gsl/gsl_sort.h> #include <gsl/gsl_wavelet.h> int main (int argc, char **argv) { int i, n = 256, nc = 20; double *data = malloc (n * sizeof (double)); double *abscoeff = malloc (n * sizeof (double)); size_t *p = malloc (n * sizeof (size_t)); FILE * f; gsl_wavelet *w; gsl_wavelet_workspace *work; w = gsl_wavelet_alloc (gsl_wavelet_daubechies, 4); work = gsl_wavelet_workspace_alloc (n); f = fopen (argv[1], "r"); for (i = 0; i < n; i++) { fscanf (f, "%lg", &data[i]); } fclose (f); gsl_wavelet_transform_forward (w, data, 1, n, work); for (i = 0; i < n; i++) { abscoeff[i] = fabs (data[i]); } gsl_sort_index (p, abscoeff, 1, n); for (i = 0; (i + nc) < n; i++) data[p[i]] = 0; gsl_wavelet_transform_inverse (w, data, 1, n, work); for (i = 0; i < n; i++) { printf ("%g\n", data[i]); } gsl_wavelet_free (w); gsl_wavelet_workspace_free (work); free (data); free (abscoeff); free (p); return 0; }
A saída pode ser usada com o programa graph
contido no pacote GNU plotutils,
$ ./a.out ecg.dat > dwt.dat $ graph -T ps -x 0 256 32 -h 0.3 -a dwt.dat > dwt.ps
Os gráficos abaixo mostram uma versão original e uma versão comprimida de uma amostra de uma gravação de ECG (62) da MIT-BIH Arrhythmia Database, integrante do arquivo PhysioNet de domínio público do conjunto de dados médicos.
Sinais de ECG original (superior) e wavelet comprimida (inferior), usando as 20 componentes maiores da transformada wavelet discreta de Daubechies(4).
[ << ] | [ < ] | [ Acima ] | [ > ] | [ >> ] | [Topo] | [Conteúdo] | [Índice] | [ ? ] |
O pano de fundo matemático para transformadas wavelet é abrangido nas anotações originais de Daubechies,
Uma introdução fácil de ler para o assunto com ênfase sobre a aplicação da transformada wavelet a vários ramos da ciência é,
Para cobertura extensiva de análise de sinal usando wavelets, coleções de wavelet e bases de cosseno local veja,
O conceito de análise de multiresolução básico na transformada wavelet é descrito em,
Os coeficientes para as famílias de wavelets individuais implementados pela biblioteca podem ser encontrados nos seguintes artigos,
O arquivo da PhysioNet de conjuntos de dados fisiológicos pode ser encontrado online em http://www.physionet.org/ e é descrito no seguinte artigo,
[ << ] | [ >> ] | [Topo] | [Conteúdo] | [Índice] | [ ? ] |
Esse documento foi gerado em 23 de Julho de 2013 usando texi2html 5.0.