Eu tenho amostras discretas de um sinal sísmico : y [ n ]
Quero encontrar máximos locais no sinal.
Um teste ingênuo para se for o máximo seria: y [ n ] : m a x i m a se y [ n ] > y [ n - 1 ] e y [ n ] > y [ n + 1 ]
No entanto, os máximos provavelmente estão localizados entre as amostras, por exemplo, pode haver um máximo em .
Para encontrar o máximo entre as amostras, acredito que preciso interpolar .
- Como encontro os máximos usando a interpolação?
- Que forma de interpolação devo usar?
Como você pode ver, meu sinal não é muito barulhento, no entanto, seria bom se o método também filtrasse um pouco, para que os máximos excedessem um limite e tivessem uma certa largura (sem picos).
Meu maior problema, no entanto, é apenas encontrar picos entre as amostras. Alguma sugestão para uma boa maneira de fazer isso?
Agradecemos antecipadamente por qualquer resposta!
Respostas:
Obtendo uma resolução de subamostra
Uma solução muito barata (em termos de tamanho do código) é apenas para ampliar o seu sinal. No matlab, isso pode ser feito com
interp(y ,ratio)
. Uma solução um pouco mais complicada consiste em detectar ingenuamente picos; e para cada pico, ajustando uma parábola através de y [pico - 1], y [pico], y [pico + 1]; depois, use o ponto em que essa parábola é máxima como a verdadeira posição do pico.Em relação à detecção de pico
Um monte de técnicas que ajudam a:
Tudo isso pode ser implementado com muita eficiência no Matlab com algumas passagens do nlfilter.
fonte
Experimente um detector de pico com perdas:
onde "a" é um número menor que 1 que controla a rapidez com que o detector decai. Ele determina o quão perto os picos vizinhos podem estar sem esmagar em um único. Em seguida, faça uma detecção de limite.
fonte