Eu tenho um sinal barulhento, que é o som do motor a uma velocidade constante, então o som "deveria" ser periódico, eu sei que existe uma maneira de usar a função de autocorrelação para obter o período, consegui, mas fiz não consigo descobrir o período. Alguma idéia de como fazer isso abaixo do sinal e do resultado da autocorrelação: o sinal
o resultado da autocorrelação:
matlab
discrete-signals
Motor
fonte
fonte
Respostas:
Aqui está uma tentativa de fazer o que você precisa
scilab.
O gráfico superior mostra alguns dados que eu sintetizei. O segundo gráfico mostra a correlação automática dos dados brutos (ampliada em torno do pico central da correlação automática). Os círculos vermelhos mostram os picos encontrados usando esta
find_peaks
função .O gráfico final mostra a diferença entre todos os locais de pico. Esta será uma estimativa do período. Como você não está realmente garantido de que o período subjacente será um número inteiro de amostras, provavelmente você deve encontrar a média desses valores.
Nesse caso, o período "verdadeiro" é
1/f0 = 11.191996
, e recebediffs = diff(peaks);
e depoismean(diffs(10:173))
cede11.195122
.Código abaixo.
fonte
parece que você está aplicando alguma função de janela em seu sinal (o gráfico de autocorrelação parece em janela)!
Para fazer seu trabalho, divida seu sinal em dados constantes emoldurados sobrepostos ou não, aplique a função de autocorrelação:
No final, encontre a posição de pico e parabéns por ter encontrado o período!
Como fazer isso no matlab aqui
fonte
Minha maneira preferida de descobrir o "período" do seu sinal é observar o espectro. Parece que o seu sinal tem uma forte onda senoidal com algum ruído. Se você pegar a FFT e plotar a magnitude, poderá ver em quais frequências são mais fortes (provavelmente corresponderão às RPM nas quais o motor está funcionando). O "período" do seu sinal será 1 dividido pela frequência do sinal. Se você tiver uma onda senoidal de 10Hz, seu período será de 0,1 segundos.
fonte