Estimativa do tempo de início de um tom estourado em ruído?

14

Que técnicas se pode usar para estimar o tempo de início de um som sinusoidal estourar em um sinal barulhento?

Suponha que o tom de explosão tenha uma frequência fixa conhecida (mas fase desconhecida) e um tempo de subida muito acentuado, e que o objetivo seja estimar o tempo de início em menos de metade do tempo de subida e / ou um período da frequência do tom , se possível. Como as técnicas de estimativa podem mudar se a relação S / N for muito baixa (muito menor que 1)?

Adicionado: suponha que o tom de explosão seja de duração desconhecida, mas maior que um pequeno múltiplo do tempo de subida e do período de frequência.

Adicionado: um DFT / FFT mostra a existência muito provável de um tom. O problema é descobrir exatamente onde, na janela da FFT, o tom (ou talvez várias explosões de tom da mesma frequência) possa ter começado dentro da janela da FFT, ou determinar se o tom atual foi iniciado fora da janela da DFT, desde que eu tenha tudo isso dados adicionais no domínio do tempo.

A precisão da detecção do pulso do radar está mais próxima da resolução de que eu preciso, exceto que só tenho uma borda, pois o tom é de comprimento desconhecido e, além de um tempo de subida conhecido, não modulado. Os filtros de passagem de banda estreita distorcem o tempo de subida e, assim, eliminam a resolução da estimativa de chegada de borda.

hotpaw2
fonte
1
Podemos assumir algo sobre o barulho? É estacionário? Ele segue algum tipo de distribuição?
Phonon
2
Os alarmes falsos do seu detector são indesejáveis? Você tem uma especificação sobre a probabilidade de detectar corretamente cada pulso? Isso é muito semelhante ao (uma versão simplificada) do processamento de sinal de radar front-end; localizar pulsos (possivelmente modulados) incorporados no ruído e estimar seus parâmetros.
Jason R
1
Você precisa fazer isso em tempo real ou é uma análise offline?
Nibot
2
@ hotpaw2: O que você não gostou no algoritmo de Goertzel de acordo com esta resposta do SO ?
Peter K.
1
O algoritmo de Goertzel é usado para detecção de tons, que parece ser o que você procura. A saída do filtro é uma estimativa da "potência" do sinal na frequência em que é sintonizado. Escolha um limite. Se a saída do filtro estiver acima disso, você detectou um tom. Defina seu limite adequadamente e poderá detectar o início do tom mais cedo (e também ser mais propenso a alarmes falsos).
Peter K.

Respostas:

6

Como discutimos nos comentários, o algoritmo de Goertzel é a maneira usual de detectar um tom no ruído. Após a discussão, não tenho certeza de que é exatamente o que você procura (você quer o tempo de início ), mas parecia haver confusão sobre como o algoritmo de Goertzel poderia ser aplicado ao seu problema, então pensei em escrevê-lo aqui.

Algoritmo de Goertzel

É bom usar o algoritmo Goertzel se você souber a frequência do tom que está procurando (chame-o de ) e se tiver uma idéia razoável do nível de ruído para poder selecionar um limite de detecção apropriado.fg

O algoritmo de Goertzel pode ser pensado como sempre calculando a saída da bandeja ONE FFT:

y(n)=eȷ2πfgnk=0 0nx(n)e-ȷ2πfgk

fg

A página da Wikipedia tem uma maneira melhor de calcular isso.

Aqui está uma tentativa (fraca) do Scilab de implementá-lo:

function [y,resultr,resulti] = goertzel(f_goertzel,x)
realW = 2.0*cos(2.0*%pi*f_goertzel);
imagW = sin(2.0*%pi*f_goertzel);

d1 = 0;
d2 = 0;

for n = 0:length(x)-1,
    y(n+1) = x(n+1) + realW*d1 - d2;
    d2 = d1;
    d1 = y(n+1);
    resultr(n+1) = 0.5*realW*d1 - d2;
    resulti(n+1) = imagW*d1;
end
endfunction

f=0,0239074ϕ=4.4318752

x=pecado(2πfn+ϕ)+ϵ(n)

ϵ(n)

Neste exemplo, o tom inicia um terço no sinal no índice 1001.

fg=f-0,001

fg=f

Os quatro traços são:

  • xyfg=0,0229074
  • O resultanteresvocêeutr2+resvocêeutEu2
  • xyfg=0,0239074
  • O resultanteresvocêeutr2+resvocêeutEu2

Como você pode ver, o caso em que o tom em que estamos interessados ​​está presente atinge um pico em cerca de 250. Se definirmos o limite de detecção em cerca da metade desse valor (125), a detecção ocorrerá (o valor de raiz quadrada é maior que 125 ) no índice 1450 a 450 amostras após o início do tom.

Esse limite (125) não causará uma detecção no outro caso (para essa execução, pelo menos), mas o valor máximo dessa saída é 115,24, não podemos reduzir muito o limite sem obter uma detecção falsa.

Reduzir o limite para 116 causará detecção no caso verdadeiro (para esta execução) no índice 1401 ... mas corremos o risco de mais alarmes falsos.

insira a descrição da imagem aqui

Peter K.
fonte
Um filtro Goertzel em execução é mais adequado se você estiver procurando apenas uma estimativa de existência dentro de uma janela de comprimento fixo. Um Goertzel em execução sem um termo de perda / decaimento altera sua largura de banda ao longo de seu comprimento, e a largura de banda mais estreita posteriormente fornece uma estimativa de tempo de chegada piorada, mais sensível a erros de ruído e limite.
hotpaw2
@ hotpaw2: Correto. Você pode introduzir um "fator de esquecimento" para manter o Goertzel funcionando, mas, caso contrário, ele se lembra de tudo.
Peter K.
Lembra de tudo? É um FIR que pode ser implementado de forma recursiva. O que eu perdi aqui?
Oliver Charlesworth
y(n)