Mudar média c linguagem


Estou tentando fazer um filtro de média móvel em linguagem C, adaptei um programa matlab que funciona corretamente, a entrada do meu filtro é um arquivo. pcm (um sinal de áudio de varredura), o problema para mim é o arquivo de saída do movimento Média em linguagem C, a saída dá errado, o sinal só diminui ao longo do tempo (não filtrar). Abaixo do meu código C: A imagem abaixo é a saída do programa matlab para a média móvel com o comprimento 16: Esta imagem é a saída em linguagem C com média móvel com comprimento 16: Alguém sabe o que pode estar Abaixo do código em matlab, que Ive Adaptado: Atualização 1 (Usando a resposta acima): O início do sinal ainda com interferência, mas do meio para o final do sinal está corretamente. É possível implementar uma média móvel em C sem a necessidade de uma janela de Amostras Eu descobri que eu posso otimizar um pouco, escolhendo um tamanho de janela que é um poder de dois para permitir o deslocamento de bits em vez de dividir, mas não precisar de um buffer seria bom. Existe uma maneira de expressar um novo resultado de média móvel apenas como função do resultado antigo e da nova amostra. Definir um exemplo de média móvel, em uma janela de 4 amostras para ser: Adicionar nova amostra e: Uma média móvel pode ser implementada de forma recursiva , Mas para uma computação exata da média móvel você deve lembrar a amostra de entrada mais antiga na soma (ou seja, a no seu exemplo). Para um comprimento N média móvel você calcula: onde yn é o sinal de saída e xn é o sinal de entrada. Eq. (1) pode ser escrito de forma recursiva, então você sempre precisa se lembrar da amostra xn-N para calcular (2). Conforme indicado por Conrad Turner, você pode usar uma janela exponencial (infinitamente longa) em vez disso, o que permite calcular a saída apenas da saída passada e da entrada atual: mas esta não é uma média móvel padrão (não ponderada), mas exponencialmente Média móvel ponderada, onde as amostras no passado obtêm um peso menor, mas (pelo menos em teoria) você nunca esquece nada (os pesos ficam menores e menores para amostras no passado). Eu implementei uma média móvel sem memória de item individual para um programa de rastreamento de GPS que escrevi. Comece com 1 amostra e divida em 1 para obter o valor médio atual. Em seguida, adicione uma amostra e divida em 2 para a média atual. Isso continua até chegar ao comprimento da média. Cada vez, adiciono na nova amostra, obtenho a média e retire essa média do total. Eu não sou um matemático, mas isso pareceu uma boa maneira de fazê-lo. Achei que isso tornaria o estômago de um verdadeiro matemático, mas, parece ser uma das formas aceitas de fazê-lo. E funciona bem. Basta lembrar que, quanto mais alto for seu comprimento, mais lento seguirá o que deseja seguir. Isso pode não ser importante na maioria das vezes, mas ao seguir os satélites, se você estiver lento, a trilha pode estar longe da posição atual e parecerá ruim. Você poderia ter uma lacuna entre o Sáb e os pontos de fuga. Eu escolhi um comprimento de 15 atualizado 6 vezes por minuto para obter um alisamento adequado e não chegar muito longe da posição real de SAT com os pontos de trilhos alisados. Respondeu 16 de novembro 16 às 23:03 inicialize o total 0, count0 (cada vez que vê um novo valor) Então uma entrada (scanf), um add totalnewValue, um incremento (contagem), uma média de divisão (quantidade total) Esta seria uma média móvel em relação a Todas as entradas Para calcular a média apenas nas últimas 4 entradas, seria necessário 4 variáveis ​​de entrada, talvez copiando cada entrada para uma variável de entrada mais antiga e, em seguida, calculando a nova média móvel. Como soma das 4 variáveis ​​de entrada, divididas por 4 (o turno direito 2 seria Bom, se todas as entradas fossem positivas para que o cálculo médio fosse respondido em 3 de fevereiro de 15 às 4:06 Isso realmente calculará a média total e NÃO a média móvel. À medida que a contagem aumenta, o impacto de qualquer nova amostra de entrada se torna ndash extremamente lento Hilmar Feb 3 15 às 13:53 Sua resposta 2017 Stack Exchange, IncI tem uma quantidade de 4000 dados de stock e tring para calcular a média móvel para todos os valores de dados, mas como a média móvel é baseada em dados anteriores e não consigo calcular o 15- Dia SMA Nos primeiros 14 dias, ignore os primeiros 14 dias e calcule o SMA no resto dos dados. E tem que estar usando o LINQ para realizar. Alguém pode dar uma amostra ou sugerir como usar o LINQ para calcular a média móvel. O resultado para os valores médios é de cerca de 500, eu realmente não entendo como é possível obter esse valor alto. Movendo averager com matriz somas: 06072017 562,49 571,72 06082017 565,84 580,32 06112017 568,56 571,17 06122017 569,55 576,16 06132017 570,56 572,16 06142017 570,63 571,53 06152017 571,21 574,13 06182017 572,78 585,78 06192017 573,79 587,41 06202017 574,23 585,74 06212017 574,22 577,67 06222017 575,63 582,10 06252017 576,06 570,77 06262017 576,68 572,03 06272017 576,88 574.50 06282017 576.7 569.05 06292017 576.95 584.00 07022017 578.37 592.52 07032017 579.92 599.41 07032017 581.74 599.41 Editado por Leemx sexta-feira, 16 de novembro de 2017 2:59 Movido por Lisa Zhu Equipe de contingentes da Microsoft segunda-feira, 19 de novembro de 2017 7:38 am linq related (From : Visual C Geral) Sexta-feira, 16 de novembro de 2017 2:42 AM Para criar uma média móvel, eu começaria por criar um intervalo de 0 a (comprimento da lista de dados - comprimento do período de movimento), então para cada valor no intervalo Selecione elementos x a x 43 comprimento do período de movimento e calcule a média. Tudo em uma boa declaração LINQ: Observe que isso não é extremamente eficiente, já que você basicamente itera sobre a lista de dados por cada valor no intervalo .. Ei, olha Este sistema permite assinaturas de mais de 60 cha Editado por Arno Brouwer sexta-feira, novembro 23, 2017 4:42 PM Marcado como resposta por Alexander Sun sexta-feira, 7 de dezembro de 2017 2:44 am sexta-feira, 23 de novembro de 2017 16:41 Todas as respostas Uma amostra da sua declaração LINQ ajudaria. Otimização do tempo é a raiz de todo o mal. Knuth Para criar uma média móvel, eu começaria criando um intervalo de 0 a (comprimento da lista de dados - comprimento do período de movimento), então, para cada valor no intervalo, selecione os elementos x Para x 43 comprimento do período de movimento e calcular a média. Tudo em uma boa declaração LINQ: Observe que isso não é extremamente eficiente, já que você basicamente itera sobre a lista de dados por cada valor no intervalo .. Ei, olha Este sistema permite assinaturas de mais de 60 cha Editado por Arno Brouwer sexta-feira, novembro 23, 2017 4:42 PM Marcado como resposta por Alexander Sun Sexta-feira, 7 de dezembro de 2017 2:44 AM Sexta-feira, 23 de novembro de 2017 16:41 A Microsoft está realizando uma pesquisa on-line para entender sua opinião sobre o site da Msdn. Se você optar por participar, a pesquisa on-line será apresentada quando você deixar o site Msdn. Gostaria de participar Ajude-nos a melhorar o MSDN. Visite a nossa página UserVoice para enviar e votar ideias Centros Dev Recursos de aprendizagem

Comments

Popular posts from this blog

Forex akciju tirgus gulbene

Benefícios de oferta estoque opções para empregados

Forex indicator predictor scam review