Eu basicamente entendi como funciona a correção Rubberband / Baseline.
- O espectro fornecido é dividido em faixas (N).
- Os pontos mais baixos em cada intervalo são determinados.
- A linha de base inicial é construída a partir desses pontos.
- Agora todos os pontos do espectro são reduzidos pela diferença entre o ponto mais baixo na faixa atual e o ponto mais baixo na linha de base.
Existem algumas nuances, porém, que eu não sei como lidar. Por exemplo, e se um dos pontos estiver exatamente na borda entre dois intervalos, etc.
Além disso, tenho que poder provar que o algoritmo que estou escrevendo é sólido e pode ser referenciado por outros trabalhos ou artigos científicos.
Se alguém pudesse me dar alguma referência, eu ficaria muito satisfeito.
frequency-spectrum
preprocessing
チ ー ズ パ
fonte
fonte
Respostas:
Isso pode ser feito facilmente em
R
ouPython
. Existem funções bem testadas disponíveis, para que você não precise se preocupar com limites ou nuances. Além disso, ambos são gratuitos e populares entre os cientistas.Solução para R
Há um pacote especial para lidar com dados espectrais, chamado hyperSpec . A correção da linha de base do elástico já está implementada lá (função
spc.rubberband
). Todos os detalhes estão destacados na documentação. O uso é bem simples:Solução para Python
Não existe (de acordo com o meu conhecimento) uma solução pronta para uso para python, mas você pode usar a
scipy.spatial.ConvexHull
função para encontrar índices de todos os pontos que formam um casco convexo em torno de seu espectro. Suponha que o espectro esteja contido emx
ey
matrizes:A matriz
v
contém índices dos pontos do vértice, dispostos na direção anti-horário, por exemplo[892, 125, 93, 0, 4, 89, 701, 1023]
. Temos que extrair parte de ondev
está subindo, por exemplo, 0-1023.Agora a linha de base é corrigida assim:
fonte
Pode haver muitas técnicas. Sua ideia me parece boa.
Duas outras idéias:
Faça uma FFT dos seus dados e filtre as frequências mais baixas. Isso também remove as modulações da linha de base. Certamente, você precisa encontrar a largura correta do filtro manualmente ou a partir de uma estimativa fundamentada dos dados.
Use as funções Cosine com vários comprimentos de onda longos e faça um ajuste linear aos seus dados. Você também pode eliminar os picos através de um filtro simples ou ponderando os pontos de dados com a força do sinal.
fonte
Solução em python usando os algoritmos Modpoly e Imodpoly.
Biblioteca Python para correção / remoção da linha de base. Possui o algoritmo Modpoly e IModploy, que pode retornar resultados corrigidos da linha de base quando você insere os valores originais como uma lista de python ou séries de pandas e especifica o grau polinomial. Instale a biblioteca como
pip install BaselineRemoval
. Abaixo está um exemplofonte
[EDIT 2018/03/24] Desde a resposta, vários usos em dados espectrais foram registrados
Se seus picos espectrais são relativamente finos e quase positivos acima de uma linha de base com um comportamento de frequência mais baixa, sugiro que tente o BEADS (Estimativa de linha de base e denoising com escassez) , um algoritmo baseado na escassez de dados e alguns de seus derivados. Funciona bem com dados cromatográficos. O código Matlab está disponível e a página BEADS reúne códigos R ou C ++ e usos conhecidos . Aqui você pode encontrar usos para espectros Raman, espectro astronômico de galáxia hiperespectral, espectroscopia de absorção de raios X (XAS), difração de raios X (XRD) e medições combinadas de XAS / XRD.
fonte