Thursday 3 August 2017

Detecção Média Pico Em Movimento


Estou trabalhando com uma grande quantidade de séries temporais. Essas séries temporais são basicamente medidas de rede que chegam a cada 10 minutos, e algumas delas são periódicas (ou seja, a largura de banda), enquanto algumas outras arent (ou seja, a quantidade de tráfego de roteamento). Gostaria de um algoritmo simples para fazer uma detecção atípica em linha. Basicamente, eu quero manter na memória (ou no disco) todos os dados históricos para cada série temporal, e eu quero detectar qualquer outlier em um cenário ao vivo (cada vez que uma nova amostra é capturada). Qual é a melhor maneira de alcançar esses resultados Estou atualmente usando uma média móvel para remover um pouco de ruído, mas então o que é seguinte. Simples coisas como o desvio padrão, louco. Contra todo o conjunto de dados não funciona bem (eu não posso assumir que as séries temporais estão estacionárias), e eu gostaria de algo mais preciso, idealmente uma caixa preta como: double outlierdetection (double vector, double value) onde vector é a matriz de dupla contendo Os dados históricos e o valor de retorno são a pontuação de anomalia para o novo valor da amostra. Perguntou 2 de agosto 10 às 20:37 Sim, eu assumi que a freqüência é conhecida e especificada. Existem métodos para estimar a frequência automaticamente, mas isso complicaria consideravelmente a função. Se você precisa estimar a freqüência, tente fazer uma pergunta separada sobre isso - e provavelmente vou fornecer uma resposta, mas precisa de mais espaço do que eu tenho disponível em um comentário. Ndash Rob Hyndman 3 de agosto 10 às 23:40 Uma boa solução terá vários ingredientes, incluindo: Use uma janela resistente, móvel, suave para remover a não-estabilidade. Reexpresse os dados originais para que os resíduos em relação ao liso sejam distribuídos aproximadamente de forma simétrica. Dada a natureza dos seus dados, é provável que suas raízes quadradas ou logaritmos dêem resíduos simétricos. Aplique os métodos do gráfico de controle, ou pelo menos o pensamento da tabela de controle, para os resíduos. No que diz respeito ao último, o pensamento do gráfico de controle mostra que os limiares convencionais, como 2 SD ou 1,5 vezes o IQR além dos quartis, funcionam mal porque provocam muitos sinais falsos fora de controle. As pessoas costumam usar 3 SD no trabalho de tabela de controle, daí 2.5 (ou mesmo 3) vezes o IQR além dos quartis seria um bom ponto de partida. Eu esbocei mais ou menos a natureza da solução Rob Hyndmans, ao mesmo tempo em que adicionei dois pontos principais: o potencial precisa reexpressar os dados e a sabedoria de ser mais conservador na sinalização de um outlier. Não tenho certeza de que Loess seja bom para um detector on-line, no entanto, porque não funciona bem nos pontos finais. Você pode, em vez disso, usar algo tão simples como um filtro de medição móvel (como no alisamento resistente de Tukeys). Se os outliers não vierem em rajadas, você pode usar uma janela estreita (5 pontos de dados, talvez, que serão quebrados apenas com uma explosão de 3 ou mais valores atípicos dentro de um grupo de 5). Depois de ter realizado a análise para determinar uma boa reexpressão dos dados, é improvável que você precise alterar a reexpressão. Portanto, seu detector on-line realmente precisa apenas fazer referência aos valores mais recentes (a última janela) porque não usará os dados anteriores. Se você tiver muito tempo, você poderia avançar para analisar a autocorrelação e a sazonalidade (como flutuações diárias ou semanais recorrentes) para melhorar o procedimento. Respondeu 26 de agosto às 18:02 John, 1.5 IQR é a recomendação original da Tukey39 para os bigodes mais longos em um boxplot e 3 IQR é sua recomendação para marcar pontos como quotfar outliersquot (um riff em uma frase popular de 6039s). Isso é incorporado em vários algoritmos boxplot. A recomendação é analisada teoricamente em Hoaglin, Mosteller, amp Tukey, Understanding Robust e Exploratory Data Analysis. Ndash whuber 9830 out 9 12 at 21:38 Isso confirma dados de séries temporais que tentei analisar. A média da janela e também os desvios padrão de uma janela. ((X - avg) sd) gt 3 parecem ser os pontos que eu quero marcar como outliers. Bem, pelo menos, avisar como outliers, eu sinalizador qualquer coisa superior a 10 sd como extremos extremos outliers. O problema em que eu toco é o que é um comprimento de janela ideal I39m jogando com qualquer coisa entre 4-8 pontos de dados. Ndash NeoZenith 29 de junho 16 às 8:00 Neo Sua melhor aposta pode ser experimentar um subconjunto de seus dados e confirmar suas conclusões com os testes no restante. Você também poderia realizar uma validação cruzada mais formal (mas é necessário um cuidado especial com dados da série temporal devido à interdependência de todos os valores). Ndash whuber 9830 29 jun 16 às 12:10 (Esta resposta respondeu a uma pergunta duplicada (agora fechada) na Detecção de eventos pendentes, que apresentou alguns dados em forma gráfica.) A detecção de ultrapassagem depende da natureza dos dados e do que você é Disposto a assumir sobre eles. Os métodos de uso geral dependem de estatísticas robustas. O espírito desta abordagem é caracterizar a maior parte dos dados de uma forma que não é influenciada por valores aberrantes e, em seguida, apontar para valores individuais que não se enquadram nessa caracterização. Como esta é uma série de tempo, ela acrescenta a complicação da necessidade de (re) detectar outliers de forma contínua. Se isso for feito à medida que a série se desenrola, então só podemos usar dados mais antigos para a detecção, não dados futuros. Além disso, como proteção contra os muitos testes repetidos, gostaríamos de usar um método com falso muito baixo Taxa positiva. Essas considerações sugerem a execução de um teste outlier de janela móvel simples e robusto sobre os dados. Existem muitas possibilidades, mas uma simples, fácil de entender e facilmente implementada é baseada em um MAD em execução: desvio absoluto mediano da mediana. Esta é uma medida fortemente robusta de variação dentro dos dados, semelhante a um desvio padrão. Um pico periférico seria vários MAD ou mais maior que a mediana. Ainda há algum ajuste a ser feito. Quanto de um desvio da maior parte dos dados deve ser considerado periférico e em que ponto de volta no tempo deve ser um aspecto, deixe estes como parâmetros para a experimentação. Heres e uma implementação R aplicada a dados x (1,2, ldots, n) (com n1150 para emular os dados) com valores correspondentes y: Aplicada a um conjunto de dados como a curva vermelha ilustrada na pergunta, produz esse resultado: os dados São mostrados em vermelho, a janela de 30 dias dos limiares da mediana5MAD em cinza e os outliers - que são simplesmente esses valores de dados acima da curva de cinza - em preto. (O limite só pode ser calculado começando no final da janela inicial. Para todos os dados nesta janela inicial, o primeiro limiar é usado: é por isso que a curva cinza é plana entre x0 e x30.) Os efeitos da alteração dos parâmetros são (A) o aumento do valor da janela tenderá a suavizar a curva cinza e (b) o limite crescente aumentará a curva cinza. Sabendo disso, pode-se tomar um segmento inicial dos dados e identificar rapidamente os valores dos parâmetros que melhor segregam os picos periféricos do resto dos dados. Aplique esses valores de parâmetros para verificar o resto dos dados. Se um gráfico mostra que o método está piorando ao longo do tempo, isso significa que a natureza dos dados está mudando e os parâmetros podem precisar ser reajustados. Observe o pouco que este método assume sobre os dados: eles não precisam ser normalmente distribuídos, eles não precisam exibir qualquer periodicidade, eles não precisam ser negativos. Tudo o que presume é que os dados se comportam de maneira razoavelmente similar ao longo do tempo e que os picos periféricos são visivelmente maiores do que o resto dos dados. Se alguém quiser experimentar (ou comparar alguma outra solução com a oferecida aqui), aqui está o código que eu usei para produzir dados como os que estão na pergunta. Estou adivinhando que o modelo sofisticado de séries temporais não funcionará para você por causa do tempo necessário para detectar outliers usando esta metodologia. Portanto, aqui está uma solução alternativa: primeiro estabeleça padrões de tráfego de linha de base por um ano com base na análise manual de dados históricos, que responde por hora do dia, semana, fim de semana, mês do ano, etc. Use essa linha de base, juntamente com algum mecanismo simples (Por exemplo, média móvel sugerida por Carlos) para detectar outliers. Você também pode querer rever a literatura de controle de processo estatístico para algumas idéias. Sim, isso é exatamente o que eu estou fazendo: até agora eu dividir manualmente o sinal em períodos, de modo que para cada um deles eu posso definir um intervalo de confiança dentro do qual o sinal deve ser parado e, portanto, eu posso usar métodos padrão, como Como desvio padrão. O problema real é que não consigo decidir o padrão esperado para todos os sinais que eu tenho que analisar, e é por isso que estou procurando por algo mais inteligente. Ndash gianluca 2 de agosto 10 às 21:37 Aqui está uma idéia: Etapa 1: Implementar e estimar um modelo genérico de séries temporais em uma base única com base em dados históricos. Isso pode ser feito offline. Etapa 2: use o modelo resultante para detectar outliers. Passo 3: em algumas frequências (talvez a cada mês), calibre novamente o modelo da série temporal (isso pode ser feito offline), de modo que a detecção de outliers por etapas 2 não ultrapasse os padrões de tráfego atuais. Isso funcionaria para o seu contexto ndash user28 2 de agosto 10 às 22:24 Sim, isso pode funcionar. Eu estava pensando em uma abordagem semelhante (recomputando a linha de base a cada semana, o que pode ser intensivo em CPU se você tiver centenas de séries temporais univariadas para análise). Entretanto, a verdadeira questão difícil é quot qual é o melhor algoritmo de estilo blackbox para modelar um sinal completamente genérico, considerando o ruído, estimativa de tendência e sazonalidade. AFAIK, cada abordagem na literatura requer uma fase de tuningquot quotparameter muito difícil, e o único método automático que encontrei é um modelo ARIMA da Hyndman (robjhyndmansoftwareforecast). Estou faltando algo ndash gianluca 2 de agosto 10 às 22:38 Novamente, isso funciona muito bem se o sinal for suposto ter uma sazonalidade como essa, mas se eu usar uma série de tempo completamente diferente (ou seja, o tempo médio de ida e volta de TCP ao longo do tempo ), Este método não funcionará (uma vez que seria melhor lidar com aquele com uma média global simples e desvio padrão usando uma janela deslizante contendo dados históricos). Ndash gianluca 2 de agosto 10 às 22:02 A menos que você esteja disposto a implementar um modelo de série de tempo geral (que traz seus contras em termos de latência, etc.) Eu sou pessimista que você encontrará uma implementação geral que, ao mesmo tempo, é simples o suficiente Para trabalhar em todos os tipos de séries temporais. Ndash user28 2 de agosto 10 às 22:06 Outro comentário: eu sei que uma boa resposta pode ser porque você pode estimar a periodicidade do sinal e decidir o algoritmo para usar de acordo com isso, mas eu não encontrei uma boa solução para este. Problema (eu joguei um pouco com análise espectral usando DFT e análise de tempo usando a função de autocorrelação, mas minhas séries temporais contêm muito barulho e esses métodos dão alguns resultados loucos dos tempos) ndash gianluca 2 de agosto 10 às 22:06 A Comente para o seu último comentário: por isso estou procurando uma abordagem mais genérica, mas eu preciso de um tipo de caixa de quotblack porque não posso fazer qualquer suposição sobre o sinal analisado e, portanto, não posso criar o conjunto de parâmetros mais velozes para o algoritmo de aprendizagem. Ndash gianluca 2 de agosto 10 às 22:09 Uma vez que é um dado da série temporal, um filtro exponencial simples em. wikipedia. orgwikiExponentialsmoothing irá suavizar os dados. É um filtro muito bom, pois você não precisa acumular pontos de dados antigos. Compare cada valor de dados recentemente suavizado com o seu valor não suavizado. Uma vez que o desvio excede um certo limiar predefinido (dependendo do que você acredita que um valor de seus dados é negativo), seu outlier pode ser facilmente detectado. Respondeu 30 de abril 15 às 8:50 Você poderia usar o desvio padrão das últimas N medidas (você deve escolher um N adequado). Uma boa pontuação de anomalia seria quantos desvios padrão uma medida é da média móvel. Respondeu 2 de agosto 10 às 20:48 Obrigado pela sua resposta, e se o sinal exibir uma alta sazonalidade (ou seja, muitas medidas de rede são caracterizadas por um padrão diário e semanal ao mesmo tempo, por exemplo, noite vs. dia ou fim de semana Vs dias úteis) Uma abordagem baseada no desvio padrão não funcionará nesse caso. Ndash gianluca 2 de agosto 10 às 20:57 Por exemplo, se eu receber uma nova amostra a cada 10 minutos, e I39m fazendo uma detecção outlier do uso de largura de banda da rede de uma empresa, basicamente às 18h, esta medida cairá (isso é esperado Um padrão normal total), e um desvio padrão calculado sobre uma janela deslizante falhará (porque ele irá ativar um alerta com certeza). Ao mesmo tempo, se a medida cair às 16h (desviando-se da linha de base usual), este é um valor de risco real. Ndash gianluca 2 de agosto 10 às 20:58 o que eu faço é agrupar as medidas por hora e dia da semana e comparar os desvios-padrão dessa. Ainda não correto para coisas como feriados e sazonalidade invernal, mas é correto na maioria das vezes. A desvantagem é que você realmente precisa coletar um ano ou mais de dados para ter o suficiente para que o stddev comece a fazer sentido. A análise espectral detecta periodicidade em séries temporais estacionárias. A abordagem de domínio de freqüência com base na estimativa da densidade espectral é uma abordagem que eu recomendaria como seu primeiro passo. Se, por certos períodos, a irregularidade significa um pico muito maior do que o típico nesse período, a série com tais irregularidades não seria estacionária e a análise espacial espectral não seria apropriada. Mas supondo que você tenha identificado o período que tem as irregularidades, você deve determinar aproximadamente qual seria a altura normal do pico e, em seguida, pode definir um limite em algum nível acima dessa média para designar os casos irregulares. Respondeu 3 de setembro às 14:59 Sugiro o esquema abaixo, que deve ser implementável em um dia ou assim: Coletar tantas amostras quanto você pode segurar na memória Remover outliers óbvias usando o desvio padrão para cada atributo Calcular e armazenar a matriz de correlação E também a média de cada atributo Calcule e armazene as distâncias de Mahalanobis de todas as suas amostras Calculando a outlierness: Para a única amostra da qual você quer saber a sua existência: Recuperar os meios, matriz de covariância e Mahalanobis distância s do treinamento Calcule a distância de Mahalanobis d Para a sua amostra Retorne o percentil em que d cai (usando as distâncias de Mahalanobis do treino). Esse será o seu resultado outlier: 100 é um outlier extremo. PS. Ao calcular a distância Mahalanobis. Use a matriz de correlação, não a matriz de covariância. Isso é mais robusto se as medidas da amostra variarem na unidade e no número. Detecção de freqüência de Arduino Como seguimento do tutorial de Entrada de Áudio Arduino que postei na semana passada, escrevi um esboço que analisa um sinal que entra na entrada analógica de Arduinos e determina a freqüência. O código usa uma taxa de amostragem de 38,5 kHz e é generalizado para formas de ondas arbitrárias. Também liguei o LED para o pino 13 em um indicador de recorte, então você sabe se você precisa ajustar a amplitude de seus sinais enquanto o envia para o Arduino. Algumas idéias de projeto para o código aqui apresentado incluem: projetos reativos de pitch - altere a cor dos LEDs RGB com pitch ou faça um bloqueio que só se abre quando você canta um certo tom ou melodia de áudio para conversão MIDI - obtenha o Arduino para traduzir uma entrada Sinal em uma série de mensagens MIDI. Veja a minha instrução sobre como obter o Arduino para enviar e receber MIDI para muitos códigos de exemplo para começar os efeitos de áudio - use as informações de frequência para reconstruir um sinal de áudio da biblioteca de tom () ou com algumas amostras armazenadas para criar um efeito de caixa de efeitos legal. O primeiro passo deste projeto é configurar o circuito de entrada de áudio. Eu escrevi um Instructable detalhado sobre isso aqui. Passo 1: Detecção da inclinação do sinal Primeiro, queria experimentar a detecção de pico, então escrevi um código (abaixo) que emite um sinal alto quando o sinal de áudio recebido tem uma inclinação positiva e produz um sinal baixo quando o áudio entrante O sinal tem uma inclinação negativa. Para uma onda senoidal simples, isso gerará um sinal de pulso com a mesma freqüência que a onda senoidal e um ciclo de trabalho de 50 (uma onda quadrada). Desta forma, os picos estão sempre localizados onde a onda de pulso alterna entre os estados alto e baixo. A parte importante do código é reproduzida abaixo. Todo esse código ocorre na interrupção ADC (interrompe e executa cada vez que um novo valor analógico está pronto a partir de A0, mais informações sobre quais interrupções são e por que as usamos podem ser encontradas aqui) prevData newDatastore valor anterior newData ADCHget value from A0 se (newData gt prevData) PORTB B00010000set pino 12 muito mais se (newData lt prevData) PORTB amp B11101111set pino 12 baixo Devo observar aqui que neste tutorial uso manipulação de porta direta para desligar e ligar o pino de saída (pino 12) Do Arduino. Eu fiz isso porque a manipulação de porta é uma maneira muito mais rápida de abordar os pinos Arduinos do que o comando digitalWrite (). Como eu tinha que colocar todo o código acima dentro de uma rotina de interrupção que estava funcionando em 38.5kHz, eu precisava do código para ser o mais eficiente possível. Você pode ler mais sobre a manipulação de portas no site Arduino. Ou veja os comentários que eu escrevi acima para entender o que cada linha faz. Você também notará no código abaixo que usei alguns comandos desconhecidos na função setup () para que eu pudesse obter a entrada analógica Arduinos para amostra em uma alta freqüência. Mais informações sobre isso podem ser encontradas no meu tutorial Arduino Audio Input. A Fig. 1 mostra a saída de pulso em azul e a onda senoidal em amarelo num osciloscópio. Observe como a saída de pulso alterna cada vez que a onda senovel atinge um máximo ou mínimo. A Fig. 2 mostra a saída de pulso em azul para uma forma de onda arbitrária em amarelo. Observe aqui como a onda de pulso toma um ciclo de trabalho irregular porque o sinal de entrada (amarelo) é muito mais complicado do que uma onda de seno. LtpgtHello Amanda, ltpgtltpgtMuito obrigado por esta publicação muito informativa. Ltpgtltpgt Estou trabalhando atualmente em uma luz de Natal de LED controlada por passo e I39m usando seu código para a detecção de pitch, I39m usando meu próprio circuito, a configuração de microfone de eletreo e estou lendo ampquotinf hzampquot, o que significa que o período é ampquot0ampquot, mas quando eu mantenho a liderança sozinho que é Conectado ao a0, ele lê algumas frequências. Eu imprima o intervalo de tempo e mostra ampquot0ampquot confirmando-o. ltpgtltpgtAs idéias sobre por que o período é 0ltpgt ltpgtEdit: Eu acho que descobri por que, os valores de entrada que recebo não são suficientes, pois eles não têm uma margem bastante larga além do máximo e Min values. ltpgt ltpgtThanks para projectltpgtltpgtI construímos o circuito de entrada de áudio delineado no link no topo desta página. Estou tentando construir um dispositivo que apenas acenda o Led anexado ao Uno quando uma determinada freqüência é detectada pelo microfone. Estou tendo problemas para desenvolver código para esta tarefa e preciso de uma pequena orientação. LtpgtltpgtSe qualquer um pode ajudar isso será ótimo, ltpgtltpgtthanksltpgtltpgt-Alexltpgt ltpgtThanks para a excelente informação do projeto. Eu tentei usar um microfone eletret com um amplificador, mas não estou obtendo uma saída limpa no monitor serial. Basicamente, as freqüências que ele escreve estão por todo o mapa. Por exemplo, se eu jogar uma nota em torno de 70Hz (I39m planejando colocá-la no meu baixo vertical, então eu já usei isso para testar), me dará um monte de freqüências que podem ser de 10Hz a 7000Hz, então me dê várias Em uma linha que são cerca de 70Hz, então de volta para todo, etc. Mesmo quando eu joguei uma nota de 440Hz de um sintonizador, me deu uma quantidade decente de aleatoriedade. Ltbrgtltbrgt. Eu acho que preciso ajustar os valores de slopeTol e timerTol, uma vez que as frequências aleatórias são muitas vezes (embora muitas vezes não) algumas das múltiplas das que eu procuro, fazendo-me pensar que está faltando alguns cruzamentos. Estou pensando direito. Eu realmente não sei qual mudar e por quanto eu estou com os dois e eles estão atualmente no slopeTol 2 e timerTol 15. Qualquer idéia de algumas estações de baliza para estas se eu estiver olhando para medir tons do meu baixo. Existe Alguma outra parte que eu deveria ajustar Obrigado pela ajuda. Eu realmente gostei de usar seu método em vez de FFT ou FHT, já que parece muito mais eficiente para o meu projeto. ltpgt ltpgtVer postagem acima. ltpgt ltpgtOne coisa que eu pensei: agora eu 39m alimentando o Arduino através do USB, já que eu uso a série Monitorar para depurar. Usaria o USB como fonte de energia, adicionando ruído ao sinal. Meu projeto será alimentado por uma bateria de 9V e eu já liguei, acabei de desligar. Isso ajudaria a ter a fonte de 9V, além de ser conectado ao USB. Eu tenho que mantê-lo conectado para usar o monitor serial, mas se isso é o que causa problemas. Ltpgt ltpgtHiltbrgtThanks muito para thisltbrgtltbrgtalthough eu tenho uma pergunta: Id como o Arduino para reconhecer algumas das notas que toco com o meu clarinete (então, o som ao vivo), como é possível fazer isso sem ter que usar um trackltpgt ltpgtIt39 possível fazer Isso com apenas o circuito e código. ltpgtltpgt Estou usando uma variação deste esboço para ler a saída de um captador de guitarra e exibir a freqüência e entonação do string39 (um ajuste que corrige os harmônicos).ltpgtltpgt. Como estamos usando instrumentos, temos que considerar alguns Efeitos adversos de harmônicos reversos. Eu incluí um filtro de passagem baixa (4.7K e 6.8uF - consertar tudo acima de 5kHz.) Você quer um filtro que permita que sua nota mais alta venha - assumindo que você não supera ou joga usando harmonics. ltpgtltpgtDouble sua nota jogável mais alta, então converta Para uma frequência - insira uma instrução if para não exibir tudo acima dela. ltpgtltpgtlta hrefquotphy. mtu. edu suitsetvsmean. htmlltagtltpgtltpgtCambie o código para dividir qualquer freqüência amostrada para um elemento fundamental de cotação de acoplamento de listar. ltpgtltpgtA 10uF não funcionou bem com este circuito para o meu Aplicação pretendida. Um valor de 4.7uF, em vez disso, me permitiu ter uma leitura bastante fluida na exibição do meu terminal. Também removi o capacitor 47nF para terra. Tudo o que fez foi manter minha amostra por muito tempo e evitar leituras acessíveis. Ltpgtltpgt Estou no processo de escrever um cabeçalho para computações musicais que inclui algoritmos FHTFFT - mas tudo o que você precisa fazer é usar seu método preferido para identificar e lidar com diferentes número values. ltpgtltpgtdouble noteFrequency 440 Concert 39A39 - 440 desvio hzltpgtltpgtdouble 4 nobody39s perfectltpgtltpgtdouble hiRange, loRangeltpgtltpgthiRange noteFrequency deviationltpgtltpgtloRange noteFrequency - deviationltpgtltpgtif (frequência ampgt Lorange frequência ampampampamp amplt hiRange) ltpgtltpgt ltpgtltpgtExpand isso como quiser, mas it39s um start. ltpgtltpgtThanks básicos para uma excelente Amandaltpgt instructable LtpgtAside de inventar um computador analógico ou usar computação quântica, os dispositivos de computação que todos usamos conhecem 139s e 039s. Usando um sinal digital, 10-bit está se referindo ao 2101024, ou seja, com dez switches onoff, existem 1024 combinações. É por isso que há passos para a onda. Ltpgtltpgt O som que ouvimos é a intensidade ao longo do tempo, quão alto é um som que não nos diz o que nota era. FFT é um 39transform39 para mostrar a intensidade sobre a freqüência, então, quando vemos a intensidade em uma determinada frequência, vemos essa nota ter sido tocada. LtpgtltpgtI39ve visto bibliotecas usando o microcontrolador Teensy rodando em 120MHz, podendo provar e fazer uma FFT para determinar notas. Comece a olhar para lá. A única maneira que eu poderia pensar que seria possível, é se fosse um pequeno padrão de notas exatas, você pode fazê-lo usando um conjunto muito específico de filtros de passagem de banda, mas essa abordagem teria outros problemas. ltpgt ltpgtI39m trabalhando em Um projeto pessoal sobre a detecção de freqüência de áudio usando o Arduino. Eu tenho uma pergunta para perguntar-lhe sobre por que a última freqüência detectada pelo software que repetiu no monitor serial. ltpgtltpgtI significa que enquanto eu toco um som e então não tenho sinal na linha, no entanto, o monitor serial ainda imprime o último Frequência detectada. Você sabe como consertar isso ou, se for possível, eu deixo uma captura de tela anexa para mostrar o que eu falo sobre isso. ltpgtltpgtThanksltpgt ltpgtthank you for thisltpgt ltpgtThanks muito por publicar este projeto muito claro e útil. LtbrgtI construí-lo, mas usando a saída de placa de som de um computador (ou similar, como um telefone ou mediaplayer) como uma entrada. Como esses sinais são muito mais fortes, deixei de sair o opamp. Para o resto, a configuração é semelhante: um resistor () e um potmeter (-) como divisor de tensão antes do 10uF Cap e dois resistores (ampamp-) como divisor de tensão do outro lado. E o condensador 47nF entre o sinal e (-). LtbrgtIt funciona bastante bem, mas as leituras mostram inconsistências f. i. Muitas linhas de quase 80,80-82,01Hz quase perfeitas e, de repente, um 25,94Hz (e surpreendentemente, muitas vezes a metade dos valores do sinal) ou dizer uma passagem de 12820,67Hz. E, muitas vezes, falhas erráticas semelhantes aparecem no começo e no final de um sinal. Para uma obra de arte, eu quero dirigir um servo com esta técnica, com algo movendo em sinc com um vídeo (diretamente (freqüência é posição) ou através de um Ssc32 (a freqüência é a posição e o comprimento do sinal é a velocidade) com os caracteres transmitidos). Por isso, esses saltos são bastante irritantes. Eu tentei ajustar muito com as configurações em seu programa (ampTreshold, timingTol, slopeTol) e no hardwareside com capacitores para obter as ondulações, mas até agora sem sorte. Qualquer sugestão para o meu iduino é alimentado pelo computador para poder ler as leituras e não tenho um osciloscópio para verificar o sinal de saída do computador. Eu tentei outras fontes, com resultados semelhantes. ltpgtltpgtMuitos agradecimentos de qualquer maneira pela instrução que já me ajudou muito e muitos agradecimentos antecipadamente. ltpgtltpgtMatthijsltpgtltpgtps: os servos de ltbrgtsteering desta forma parecem um tipo de desvio, mas colocando manualmente os blocos de sinal certos no lugar certo E jogá-los com o mediaplayer pareceu ser ainda mais trabalho. Usar a técnica de freqüência torna muito mais flexível e onipresente. Ltpgt ltpgtThank você para compartilhar Amanda. Eu não tenho que começar do ponto zero no meu sintonizador de guitarra automático projectltpgtltpgtBut Eu tenho uma pergunta. Posso usar um piezo para pegar a vibração ou o som em vez de usar um microfone, o que permite que o sintonizador funcione em ambiente ruidoso. posso. Estou usando isso em um violino. No momento, o algoritmo é um pouco esporádico, mas se você reduzir as tolerâncias de tempo e declive, ele funciona um pouco melhor. Eu acho que se você reestruturar o código para obter a resolução completa de 10 bits em vez de 8 bits, você deve ser capaz de fazer com que este código funcione melhor. Mas os ciclos extras de instruções podem dificultar outras operações. Ainda tenho um projeto ao longo dessas linhas, e eu me perguntei a mesma coisa sobre pegar o ruído de outras fontes (ou instrumentos, já que eu planejo usá-lo enquanto joga). O uso de um piezo veio à mente, contente por ver que alguém o fez com sucesso. Eu estava pensando, o que você usou para enfiar seu piezo em seu instrumento, eu não quero fazer nada que dano a madeira. Você usou algum tipo de adesivo que é seguro para instrumentos de cordas, porque eu tentei uma subida da ponte, bem como uma ponte sobre o captador Um piezo genérico e um Shadow SH 3001, respectivamente. Eu usei isso em um elétrico dedicado, de modo que o piezo da haste era apropriado e muito mais barato, mas há tipo de filme sob os captadores de ponte, como captadores de Realistas que deveriam funcionar para você. Descobri que a mistura de ambos os tipos de captadores (horizontal e veritcal) através de um micromix mx400 barato oferece bons resultados, embora você precise lidar com dois fios em vez de apenas um. Ltpgt ltpgtGotcha, obrigado. Veremos se posso encontrar algo assim para meu baixo ereto. Estou planejando usá-lo para controlar uma tira de LEDs, então eu provavelmente não preciso que a qualidade seja tão alta que um coletor deve fazê-lo. Você precisou conectá-lo com toda a configuração do amplificador operacional a partir do tutorial de Entrada de áudio, ou alguns têm amplificadores construídos inltpgt ltpgtYes, você precisará amplificá-lo um pouco com base nas características de resposta de tensão do elemento que você está usando. Você terá que mexer porque nenhum dos dois piezo39s são os mesmos. Há muitos projetos para o arduino lá em como fazer isso, basta pesquisar a entrada de áudio do ampquotarduino se o esquema acima não for suficientemente descritivo para você. Por isso, com este código arduino, eu poderia controlar a freqüência da luz com a freqüência Do som que eu quero construir um sistema de iluminação para o meu quarto e o carro que reagirão com o som, mas de certa forma, que as cores de baixo nível, as cores amplas de agasalho (ou mesmo vice-versa). Eu sinto que isso daria uma experiência melhor para a música. Por isso, você conseguiu que sua idéia funcionasse. Tenho uma idéia de projeto semelhante. ltpgt ltpgtHi Amanda, ltpgtltpg. Obrigado pelo trabalho muito útil que você fez, não posso medir a frquência da minha agricultura Aplicativo que usa um anel de excitador. ltpgtltpgtI tenho uma qustion como posso mudar para outro pino analógico no ideltpgtltpgtThanks, ltpgtltpgtRien BrandltpgtltpgtNetherlandsltpgt ltpgtNão tenho certeza se você encontrou a resposta para sua pergunta, mas se você procurar o ADMUX registrar na folha de dados para seu atmega particular Você verá como mudar o conversor analógico para digital. ltpgtltpgtHere39s um link para entender ADMUXltpgtltpgtrobotplatformknowledgeADCadctutorial3.htmlltpgt ltpgtWe fez isso, finalmente enfrentando problemas. Utilizamos guitarra elétrica para esse propósito. Agradeço a Amanda. Mantenha o bom trabalho ltpgtHello Amanda obrigado pela sua partilha. Eu quero perguntar sobre este ... ltbrgtso estou desenvolvendo uma detecção de grito humano Arduino é possível detectar a voz de grito de ajuda humana usando este tipo de programa Arduino porque eu quero construir o componente consistente pelo filtro de passagem de banda. Ganho e circuito de retificador e, em seguida, procure a sua detecção de passo e a duração da voz ....ltbrgtltbrgt. Você tem alguma idéia sobre o circuito que eu preciso para completar meu projeto. Por isso é possível usar alguma biblioteca Arduino e escrever o código de reconhecimento de fala ltpgtHi Amanda, Muito obrigado por esta fonte. Muito surpreendente. Ltpgtltpgtbut. Um pequeno problema meu arduino. Ltpgtltpgtyour fonte é excelente. Ltpgtltpgtbut. Meu arduino não está funcionando ltpgtltpgtmy versão arduino. é. Ltpgtltpgt8-bitltbrgtMicrocontrollerltbrgtwith 256K BytesltbrgtIn-SystemltbrgtProgrammableltbrgtFlashltpgtltpgtmaybe. Ltpgtltpgtversion é problema é diferente. Ltpgt ltpgtHi Amanda, muito obrigado por este instrutivo Muito útil. Tenho preferência a esta versão de código mais simples (integrada com amplificação de amplificador), porque eu quero fazer um analisador de som. Onde voce associa ou canta uma nota de ampquotooohampquot e então você tem a frequência. Fazendo um portátil construído com uma tela de 4 dígitos e lá é um dispositivo perfeito para qualquer engenheiro de som ou músico, que quer saber qual freqüência causa feedbacks de microfones. ltpgtltpgtDoes faz algum sentido coletando uma série de medidas e faz uma média matemática como eu Não precisa de um processo rápido, mas um pouco mais lento e mais sólido (sem medições de amperímetro) tentei algum ciclo de amplificação com uma matriz simples, mas não parece acrescentar qualquer precisão (talvez eu não saiba onde colocá-lo). Oi, amanda. Seus instrutores no arduino são ótimos ... sempre que eu quiser saber se é possível medir uma amplitude de onda senoidal em arduino ltpgt. Obrigado pela instrução, eu apenas coloquei um circuito com um sinal de microfone eletrométrico amplificado usando a alimentação do opamp para ele. No entanto, quando eu to olhando para a saída serial, parece funcionar apenas para o primeiro segundo ou 2, então ele pára de trabalhar com a última linha parece uma imagem anexada. Qualquer idéia do que poderia ser motivo de agradecimento, ltpgtHi, este é um excelente projeto. Funciona bem no meu arduino uno. No entanto, eu preciso que ele funcione em um mega arduino com escudo ethernet. Ao adicionar os códigos ao meu projeto ethernet, a conexão com a internet é brocken (I39m carregando dados no servidor xively). Qualquer sugestão para o HiIiltbrgt. Como nós medimos a frequência. Quero detectar freqüência de freqüência de 60Hz a 100Hz. Posso usar este progtame obrigado e resposta rápida de você ltpgt Este é incrível I39m olhando para um pedal guitarra-MIDI, mas uma solução DIY é mais barata e muito mais legal. Props para você por este incrível pedaço de código, ltpgtHi, alguém completou este projeto (possivelmente, com um tipo diferente de microfone) e não gostaria de compartilhar isso. Sou iniciante e gostaria realmente de tentar isso. Etapas um pouco mais detalhadas seriam mais úteis: Dltpgt ltpgtHi amanda, eu quero felicitar com você por isso instrutivo, realmente poderoso: DI tem uma pergunta, isto é, é possível verificar as frequências de uma música de reprodução dessa maneira, através de uma Sinal auxiliar, ou seja, um leitor de MP3 ou a saída dos fones de ouvido do notebook (após a gestão correta do sinal, como na sua instrução sobre a entrada do arduino auido) ltpgtltpgtThanks a lotltpgtltpgtDltpgt ltpgtHas qualquer um fez este projeto com ChipKit Uno32. Estou realmente à procura de projetos como esse para o meu cartão de desenvolvimento Uno32, porque eu preciso ler a freqüência do sinal analógico proveniente do sensor de rotação óptica. ltpgt Excelente trabalho I39m tentando usar este código para um osciloscópio laser automático que estou projetando. Ltbrgt ltbrgtI39ve encontrado que o código pára de medir freqüências assim que eu tente analogRead () de um pino analógico diferente. No momento, não compreendo completamente a programação de nível inferior do ADC que você realizou. Existe alguma maneira de ler dos outros pinos analógicos sem interferir com a medida de passo sim, da maneira como isso é configurado, todos os outros pinos analógicos estão desativados. Você pode ler um valor analógico de um pino digital usando RCTime: ltbr gtarduino. ccenTutorialRCtime ltbr gtinstructablesidArduino-Basics-RCtime ltbr gthope que funciona para o que você está fazendo. LtpgtThank you for the great article. Eu só queria saber se eu posso usar um microfone com um pré-amplificador para fazer a detecção. ltpgtltpgtI tenho: ltpgtltpgtlta hrefquotfreetronicsproductsmicrophone-sound-input-modulequot relquotnofollowquotgtfreetronicsproductsmicrophone-sou. LtagtltpgtltpgtThank you muchtltpgt ltpgti tentou construir sintonizador de violão lta hrefquotinstructablesidArduino-Guitar-TunerALLSTEPSqualqualqualqualquêsadaproditoresinstruçãoArduino-Guitarra-Tun. Ltagtltpgtltpgtbut arduino can39t ler a entrada do meu guitar. ltbrgtc, você me ajuda a resolver este problema ltpgt você tem um osciloscópio ltpgti don39t tem osciloscópio. ltbrgtdoes se torna um problema se eu uso 100nF Cap no DC offset ltpgtltpgti veja o seu projeto use 47nF Cap. Isso não deve ser bom. Você precisará de um osciloscópio para depurar isso, talvez veja se existe um lta targetquotblankquot hrefquothackerspaces. orgwikiListofHackerSpacesquotgthackerspaceltagt ou escola perto de você onde você pode usar um de graça. Qual é o principal problema de que a entrada do violão não pode alcançar o Arduinoltbrgtltbrgttt que o projeto poderia Seja completado se houver um osciloscópio ltpgt ltpg, você poderia tentar usar um computador executando audácia como um osciloscópio improvisado, para descobrir onde o sinal está se perdendo. Você tem uma entrada de áudio no seu computador, ltpgtyes, eu tenho que começar a produzir saída de áudio do amplificador e do circuito de deslocamento de CC para o meu computador. Existem 3 saídas amplquotA0. 5v e GNDampquotltpgt ltpgtI39m novo em Arduino, eu quero fazer isso, mas com um microfone de eletrotécnica, acho que é muito diferente do microfone que você usou. Como posso fazer o circuito com um Electret Microphoneltpgt ltpgtit shouldn39t ser muito diferente, mas talvez seja necessário alterar o ganho no amplificador no pino analógico do Arduino39. Você provavelmente vai querer um osciloscópio à mão para que você possa ver o que você está fazendo. Ltpgt ltpgt Você sabe se há um osciloscópio virtual que eu poderia usar Como um programa de PC. Ltpgtltpgt Sobre o microfone, I39m usando um microfone Elecret com Breakout Board (amplificador incluído), conecto-o diretamente ao Arduino, é tudo o que é certo, adivinhe, você poderia usar a entrada de áudio em seu comp e gravar usando o Audacity ou algo. ltpgt ltpgtI39m então Feliz eu tropecei em seu Instructable. É exatamente o que eu estou tentando fazer. Infelizmente, estou tentando fazê-lo com um Picaxe. - (ltpgt ltpgtHey Amanda Awesome Instructable. Esta foi uma ótima experiência de aprendizagem. Consegui obter o código (e o circuito do seu Arduino Audio Input Instructable) funcionando bem em um clone do Uno, mas ao fazer o upload do mesmo esboço para um Arduino Micro, ele Não parece atualizar os valores de saída quando eu imprimo a variável (eu apenas obtenho ampquotinfampquot).ltbrgtltbrgt Existe uma diferença no Micro que evitaria que esse esboço funcione I39m usando o mesmo esboço e circuito para ambas as versões (I39ve só trocou o Uno Para um Micro), mas eu potencialmente fiz algo incorretamente.

No comments:

Post a Comment