FAQ

Questões

1. Todas as funções utilizadas na implementação do algoritmo da Decomposição Empírica Modal, excepto as funções e_max(t) e e_min(t) que são obtidas por interpolação de splines cúbicos, são funções discretas? Consideramos que vamos sempre trabalhar numa situação de "oversampling" do sinal, uma vez que segundo Rilling desde que hajam imensos pontos de amostragem é possível identificar os extremos locais com eficiência, pelo que não há a necessidade de se trabalhar com funções contínuas obtidas por interpolação ("...some special attention has to be paid to the fact that extrema must be correctly identified, a pre-requisite which requires a fair amount of oversampling")? Ou seja, as funções resíduo (r_k(t)), valor médio (m_k(t)), detalhe (d_k(t)), variação (sigma_t()) e as IMF obtidas são apenas avaliadas nas amostragens temporais (t = t_i, i = 0,...,N), ou dever-se-á interpolar as funções referidas entre os tempos de amostragem e obter as respectivas funções como objectos TF1 da biblioteca ROOT?

Resposta:

Sim, todas as funções são discretas salvo as funções de interpolação e a função média. As IMF são funções discretas.
Os extremos locais (máximos e mínimos) devem ser encontrados a partir da amostragem do sinal. Por exemplo um extremo x_i que será bem identificado: abs(y(x_i)) > abs(y(x_i-1)) e abs(y(x_i)) > abs(y(x_i+1)). No entanto se tivermos abs(y(x_i)) = abs(y(x_i-1)) > abs(y(x_i+1)), pode exigir soluções inovadoras para definir o máximo ou mínimo.


2. Caso as funções referidas tenham de ser contínuas, todos os métodos de determinação de máximos, mínimos, zeros da função devem ser implementados por nós ou pode-se fazer recurso a métodos da classe TF1?

Resposta:

Resposta dada na pergunta anterior.


3. Não percebi a seguinte nota do enunciado:
Uma nota sobre os pontos fronteira do sinal: poderá ser conveniente fazer o "mirroring" dos últimos extremos da função sinal para ter um bom comportamento na interpoladora.,
nomeadamente, o que significa fazer o mirroring dos últimos extremos da função sinal?

Resposta:

Significa espelhar/replicar alguns dos pontos do sinal para fora dos limites do mesmo, fazendo uma transformação de simetria (f(x) = f(-x)). Esta simetrização dos extremos (seja no início ou no fim do sinal) não deve porém ter necessariamente como ponto de simetria seja o primeiro ou o último ponto de amostragem do sinal em questão, de modo a não distorcer a periodicidade aparente do sinal. Exemplo: em certos casos o ponto de simetria no início do sinal poderá ser o primeiro máximo/mínimo, noutros o primeiro ponto. Deverão aferir em que condições se deve adoptar qual critério de ponto de simetria.


4. Nós tivemos algumas dúvidas quanto ao condicionamento que deve ser usado para os extremos dos Spline3. No enunciado, aconselha-se a utilização de mirroring, uma técnica que vem depois explicada nas FAQ. No entanto, não existe nenhuma indicação sobre quanto o sinal deve ser estendido (nós pensámos que talvez chegaria fazer mirroring até completar mais um máximo/mínimo para cada lado, mas gostávamos de ter confirmação). A outra dúvida prende-se com o facto de no documento 3 (Issues with the applications of EMD analysis) eles terem feito uma análise comparativa de três possíveis técnicas de condicionamento nas fronteiras e de terem concluído que a técnica de mirroring é a menos eficiente, sendo que a recomendado é a do Szero. Devemos seguir com a técnica seguida no enunciado ou devemos optar/experimentar com esta técnica alternativa.

Resposta:

Basta geralmente (sempre que tal seja possível) simetrizar 2 extremos. Não é necessário utilizar técnicas alternativas à da simetrização. Apesar de não ser perfeita nos extremos é suficiente numa primeira aproximação.


5. Devemos considerar incluir nos máximos/mínimos os valores do sinal na fronteira ? (Vemos que no passo 4 é dito que não). Contudo, será que isso iria melhorar o comportamento dos envelopes interpoladores?

Resposta:

Só se faz a cubic spline interpolation depois de determinar os mirror points (para os incluirmos no spline) caso contrário pode de facto acontecer que o envelope dos máximos/mínimos intersecte o nosso sinal...
De qualquer forma e sendo este trabalho um projecto, pode tentar a solução que propôe e concluir se é melhor ou pior!


6. Ao longo do exercício 1, é suposto trabalharmos com TF1 ou arrays de muitos doubles? É que obviamente é preciso começar com os arrays porque eu recebo os 400 pontos e não o sinal contínuo em si. No entanto, para calcular os envelopes do método uso o cubicspline que me retorna TF1s. É melhor passar a trabalhar com as TF1s a partir daí (e considerar IMFs, etc como TF1) ou uso o Eval() para ficar com arrays de doubles novamente(e considero as IMFs como os arrays)? Obrigado.

Resposta:

Não nos parece necessário o uso de TF1. Os cubicspline são definidos de forma contínua, a partir dos extremos locais (máximos e mínimos). O seu valor será avaliado de forma contínua para o cálculo das funções média e amplitude. No entanto, o recálculo do sinal para a definição das funções "detalhe", implica a avaliação das funções contínuas nos pontos de amostragem. Ou seja, a discretização mantém-se ao longo do algoritmo...


7. Tenho uma dúvida relativamente ao projeto. Podemos usar a classe derivator do root? Ou temos de fazer a nossa?

Resposta:

Devem utilizar as classes desenvolvidas ao longo do semestre de Física Computacional (tal como é referido no enunciado!!!).


8. Na definição das funções envelope emax e emin, que definição de máximo local devemos utilizar? Em particular, estou mais interessado nos casos em que a função Sk seja localmente constante. Numa situação em que uma função é constante numa vizinhança de um ponto, algumas definições sugerem que esse ponto se trate tanto de um máximo local como de um mínimo local. Outra dúvida surge, especialmente se adotarmos este critério, o que acontece à função de variação se a sua amplitude Ak for nula num certo ponto?

Resposta:

Ver Pergunta 1.


9. Relativamente à condição de fim de iteração no cálculo das IMFs "o resíduo possuir um valor aproximadamente constante", nós pensámos em usar ou a derivada ou a distância entre máximo absoluto e mínimo absoluto. Estávamos mais inclinados para esta última, sendo que, para essa distância-limite, estávamos a pensar usar (xmax - xmin) * k (sendo que esta constante seria uma valor muito pequeno, por exemplo 0.001, ou 0.0001). O que se entende por "aproximadamente constante"? No nosso caso, qual a ordem de grandeza de k mais adequada?

Resposta:

O que diz faz sentido se a função resíduo tiver extremos. E nesse caso tendo extremos, não me parece lógico testar a condição constante!!!!


10. A determinação da frequência instantânea, pelo que percebi na explicação que coloca na página web, é que no interior de dois zeros os pontos possuem a mesma frequência, ou seja , a frequência em função do tempo iria representar uma função em escada. Contudo não seria mais legitimo considerar que esta frequência calculada para estes subintervalo corresponderia apenas ao ponto médio entre dois zeros e depois realizar um cubicspline para todo o t?

Resposta:

A frequẽncia "instantânea" não o é verdadeiramente porque estamos a usar zero-crossings, o que nos dará uma média! Deverão proceder conforme acharem mais adequado no sentido de aferir a frequência instantânea.


11. Todos os plots que pretende que sejam desenhados deve ser apenas pontos(usar datapoints), dado que as funções são discretas ou devemos aplicar o cubicspline aos arrays para obter plots de funções continuas!

Resposta:

Existem funções contínuas como os interpoladores, média, amplitude e funções discretas, que envolvem o sinal (as IMF's são funções discretas). As funções contínuas podem ser representadas com o auxílio de TF1 e as discretas com TGraph.


12. quando me refiro aos três critérios são: - monótona crescente ou de decrescente; - aproximadamente constante; - possui no máximo 3 extremos locais

Considera-se um sinal inicial, s1, e testa-se se o resíduo respeita um dos três critério, se sim calcula-se o detalhe d1 e depois verifica-se se respeita o critério sifting, caso negativo, deve-se fazer que s1=d1, mas não temos de verificar primeiro se o resíduo deste novo s1 respeita os três critérios??

Esta duvida surge porque após encontrar 3 IMFs (no exercício 1 proposto) o método considera que ainda existe pelo menos 1 IMF, portanto ele calcula d4 e verifica que não é IMF pura, por isso calcula o detalhe de si mesmo (para refinar os seus valores). No entanto, verifica-se que após alguns passos deste refinamento ele repara que já não existe IMF pois o resíduo possui menos de 3 extremos locais.

Resposta:

Conforme o passo 4 da descrição do método especifica, no final do sifting e ao actualizar o resíduo, deve verificar-se se obedece ao critério dados e neste caso a decomposição não continua.


13. Como é que se define o step quando se desenha um gráfico de uma função utilizando root e cFCgraphics? Procurei em root.cern mas não encontrei!

Resposta:

O "step" do TGraph vem naturalmente da escolha de pontos que fazes. No caso da TF1 podes sempre recorrer a TF1::SetNpx(int N = 100). Este N é o número de samples que a TF1 tem no intervalo xmin-xmax. Se quiseres uma função mais smooth faz este N ser superior a 100 (10000 por exemplo). Documentação TF1::SetNpx(int)


14. Nós não temos a classe spline3 construida pelo que estamos a tentar usar a que o root disponibiliza a TSpline3. Uma vez que a documentação não é muito óbvia, é possivel explcar que parametros esta recebe para fazer o fit dos pontos?

Resposta:

A classe a utilizar deve ser a desenvolvida pelos alunos. Se não possuir e quiser usar o TSpline3 terá que ver como a utilizar e obviamente não corresponde totalmente ao que se pede e espera.


15. Gostaria de saber se podemos usar diretamente a classe de root TF1, por exemplo, na soma de funções, ou se só podemos utiliza-la indiretamente através da classe feita por nós FUNC1D.

Resposta:

Vê o ponto 11.
Existem operações sobre funções contínuas e outras que envolvem funções discretas. No primeiro caso podes de facto ter interesse em definir essas operações numa classe própria (não é absolutamente necessário). No último caso, terás que desenvolver código próprio para calcular as operações em cada ponto da amostragem.


17. Como é que posso reverter uma operação em svn? Por exemplo, adicionei um ficheiro através de "svn add" mas não o quero comitar?

Resposta: Vê aqui a documentação: http://svnbook.red-bean.com/en/1.7/svn.ref.svn.c.revert.html
Fazendo svn revert file1 file2 etc., podes reverter a operação add.


18.

Pode confirmar se o plot2D do espetro de Hilbert é para ser feito a 2 ou 3 dimensões?

Resposta:

O espectro pedido é num plot 2D conforme indicado no enunciado.


19. O nosso algoritmo está a compilar, correr e a obter resultados para o exercício 1. Porém, quando aplicado ao exercício 2, esteve 1 hora a correr e não chegou ao fim. O professor tem alguma ideia de porque esta situação esteja a ocorrer?

Resposta:

Não temos ideia...

Questão: Em caso de não conseguirmos solucionar o problema, podemos "encurtar" o ficheiro sunspots.dat, e apresentar um resultado parcial? Nós testamos o algoritmo apagando parte do ficheiro sunspots.dat e conseguimos chegar ao fim e obter resultados.

Resposta:

O problema estará na implementação deficiente do algoritmo que resolve o problema e onde vocês têm liberdade para procurar soluções. Não se esqueçam que este é o trabalho projecto!


20. Estamos a ter dificuldade em fazer o (emax+emin)/2. Inicialmente fizemos um TGraph para os mínimos locais e outro para os máximos locais, e tentámos de seguida fazer a soma dos 2, preenchendo um array de "x" com os minimizantes e um array de "y" com os mínimos, e depois preenchendo esses mesmos dois arrays com os maximizantes e os máximos, respetivamente, dividindo cada elemento depois por 2, mas este método não resultou. Também tentámos preencher os arrays por ordem, ou seja, o array de x era preenchido por ordem crescente de x, independentemente de ser máximo ou mínimo, e à correspondente posição associava-se o y no array de y, mas também não resultou. Como recomenda fazer a soma de 2 TGraphs?

Resposta:

Não se esqueçam que este é o trabalho projecto! Mas para desbloquear, o que vocês estão a fazer é a calcular a função média, m(t). Essa é uma função contínua que podem implementar como TF1.

Em relação à soma de 2 TGraphs, existem métodos que permitem recuperar os pontos do TGraph e fazer operações sobre esses valores, mas não enquanto objectos.


21. No projecto, quando o professor se refere a criação duma biblioteca refere-se ao conjunto dos programas apenas ou uma lib que temos mesmo que criar ?

Resposta:

Aqui biblioteca significa conjunto de código vosso que resolve o problema. Obviamente que poderão ter um tag no Makefile que permita fazer uma biblioteca estática ou dinâmica, libEMD.a(.so)


22. Quando se efetua um ciclo para fazer sifting, é legítimo testar dentro desse ciclo se o detalhe obtido respeita não só os critérios de Rilling (necessários para o sifting), mas também testar se respeita os critérios de paragem da obtenção de IMFs ? Em princípio, um sinal que passou nos critérios para obter IMFs, ou seja, ainda contém realmente pelo menos uma IMF irá continuar a passar nesses mesmos critérios após o cálculo do detalhe desse mesmo sinal.

Resposta:

O processo de sifting só faz sentido enquanto estamos à procura de IMFs...logo tenham em atenção o que faz sentido ou não fazer e detalhem-no no vosso projecto/apresentação.