Sinal de suavização / detecção de saliências em um fluxo de dados

11

(EDIT: Esta pergunta segue extrair dados binários de cartão de tira magnética de WAV bruto )

Aqui está o meu sinal (linha superior) e um filtro IIR básico aplicado (linha inferior)

insira a descrição da imagem aqui

(EDIT: minha tarefa é dividir o sinal em binário 0 (frequência F) e binário 1 (frequência 2F) - é por isso que é chamado de F2F. Portanto, preciso processá-lo de forma a não garantir picos falsos. a captura de tela faz com que pareça trivial, há um problema em potencial de obter um pico duplo e também de obter falsos positivos na calha entre picos reais.)

Minha pergunta é: quais métodos estão disponíveis para suavizar esse sinal? IIR é minha melhor aposta?

Eu posso ver pelo menos três possibilidades:

  • IIR y [n] = 0,9 * y [n-1] + 0,1 * x [n] em que y [x] = 0 quando x <0

  • Média móvel / com janela - coloque uma curva de Bell com a área 1.0 ao redor, digamos, w = 10 amostras de cada lado e integre bellSmooth (x) = integral [xw, x + w] {sino (k) .samp (k)} dk

  • Determine a frequência esperada e a FFT / remova caixas de ordem superior / FFT reversa

Posso ter respondido minha própria pergunta, mas provavelmente isso está incompleto e tenho certeza de que estou usando a terminologia errada. Também não posso realmente prever os prós e contras. O último método é menos atraente, pois requer conhecimento da frequência básica do sinal. Mas o mesmo acontece com o segundo método; Preciso escolher um comprimento de janela apropriado.

Existem outros métodos?

P i
fonte
6
Quais características do sinal original você está tentando preservar / medir? Por exemplo, tempo entre pontos de pico, altura do pico, quantidade de tempo acima de um limite, outra coisa?
Martin Thompson
O tempo entre picos ... e mesmo isso não precisa ser muito preciso - é um sinal F2F (vou alterar a pergunta para referenciar a fonte do sinal e fornecer um contexto)
P i
Isso é para processamento online ou offline?
Meu tópico de tese é suavização de ruído no fluxo de dados. Você gosta deste artigo ou tópico?

Respostas:

6

Efeitos da média

O uso de um filtro de média móvel suavizará as irregularidades no sinal. O ruído se torna E / N, onde N é o comprimento do filtro da média móvel. O efeito colateral do uso de um MA é que os picos de sinal se tornam mais amplos e rasos.

Além disso, o conteúdo da frequência do sinal mudará. Um filtro de média móvel no domínio do tempo é o mesmo que convencer o sinal do domínio da frequência por uma função sinc, tudo fica borrado.

Algoritmo de detecção de pico A detecção de pico é um problema comum em 9/10 de problemas de engenharia. (na verdade não, mas MUITO depende deles)

Normalmente é isso que é feito:

Limiar médio

1) Look for all peaks in your signal. (i.e., a point that is larger than the two
   adjacent points
2) take this list of points and for each one of them compute:
   med_threshold = median(Peak,Width) + constantThresholmedian   where median is the
   median value of the data centered at "Peak" with Width being the number of 
   points to look at.
       a) The Width(usually written as Lambda in literature) and constantThreshold
          (usually written as C) are determined by trial and error and using the ROC
          curve (Acronym below)
3) if the peak's magnitude is above this threshold accept it as a true peak. 
   Else: Discard it, its a false peak
4) Generate a Receiver Operating Characteristic Curve(ROC) to how well the algorithm
   is performing.

Aqui está um exemplo:

suppose we have the signal X = [ 0 0 0 0 1 3 **9** 2 1 1 **2** 1 1 ] 
1) 9 and 2 are both potential peaks 
2) Lets use a window of 5 and  a threshold =2
so at 9 we have [1 3 9 1 2] -> [1 1 2 3 9]  so Median(9,5) = 2
9 > 2 +2, therefor its a peak
Lets take a look at 2: [ 1 1 2 1 1] -> [1 1 1 1 2 ] Median(2,5) = 1
2 < 1+2, therefor it is NOT a peak. 

Determinando a frequência

Agora que você encontrou efetivamente a localização da hora do pico, tente encontrar a frequência deles:

1) Use the locations of the peaks to generate a pulse train
      a) this means create sum(Dirac_delta[t-L(n)]) where L(n) is the nth time that 
      you've localized through median thresholding
2) Apply FFT Algorithm
3) Look for largest peak. 

Estimativa de frequência alternativa

1) Think of this like a beat in a piece of music (I learned about thresholding by
   researching Onset Detection.
2) Compute the average time distance between detected peaks.
3) now call your results BPM or PPM (pulses per minute) 

Avenidas adicionais de pesquisa

Embora você possa estar satisfeito com o sinal de pico como está, existem algoritmos que são aplicados a uma grande variedade de problemas chamados Detecção de Onset.

A Detecção de Onset é uma grande área na Pesquisa de Recuperação de Informações Musicais. É usado para determinar quando uma nota está sendo tocada.

Amostra de música de um início

Se você pensa no sinal da cabeça da fita como um sinal altamente amostrado, pode aplicar muitos dos algoritmos encontrados neste documento:

http://www.elec.qmul.ac.uk/people/juan/Documents/Bello-TSAP-2005.pdf

CyberMen
fonte
"[1 3 9 1 2]" Como você está obtendo o número 2 se a sua janela tiver largura = 5?
Spacey
Observe como eu alinhei os números. a mediana é o número do meio em um conjunto ordenado. [1 1 2 3 9] <- ordenados, número do meio é 2.
CYBERMEN
Veja os seus números, eles são [1 3 9 1 1]. De onde você tirou os 2?
Spacey
O @Mohammad passou por algumas edições enquanto trabalhava nele, foi excluído. Fixo.
CYBERMEN
Legal obrigado! Agora, quando você diz 'nota' no contexto musical, isso significa frequência única ou muitas frequências? Ou isso não importa? Estou pedindo para ver se essa é uma maneira de também ser usada com alguns outros aplicativos que são de banda estreita (tom único).
Spacey