Wednesday, 15 February 2017

Moving Average Algorithm Matlab

Créé le Mercredi 08 Octobre 2008 20:04 Dernière mise à jour le Jeudi, 14 Mars 2013 01:29 Écrit par Batuhan Osmanoglu Clics: 41147 Moyenne mobile Dans Matlab Souvent je me trouve dans le besoin de la moyenne des données que je dois réduire le bruit un peu bit. J'ai écrit quelques fonctions pour faire exactement ce que je veux, mais matlabs construit dans la fonction de filtre fonctionne très bien aussi. Ici Ill écrire sur la moyenne 1D et 2D des données. Filtre 1D peut être réalisé en utilisant la fonction filtre. La fonction de filtre nécessite au moins trois paramètres d'entrée: le coefficient de numérateur pour le filtre (b), le coefficient de dénominateur pour le filtre (a) et les données (X) bien sûr. Un filtre de moyenne courante peut être défini simplement par: Pour les données 2D, nous pouvons utiliser la fonction Matlabs filter2. Pour plus d'informations sur la façon dont le filtre fonctionne, vous pouvez taper: Voici une mise en œuvre rapide et délibérée d'un filtre de moyenne mobile 16 par 16. Nous devons d'abord définir le filtre. Puisque tout ce que nous voulons est la contribution égale de tous les voisins, nous pouvons simplement utiliser la fonction ones. Nous divisons tout avec 256 (1616) puisque nous ne voulons pas changer le niveau général (amplitude) du signal. Pour appliquer le filtre, nous pouvons simplement dire ce qui suit: Voici les résultats pour la phase d'un interférogramme SAR. Dans ce cas, Range est dans l'axe Y et Azimuth est mappé sur l'axe X. Le filtre était 4 pixels de largeur dans la gamme et 16 pixels de largeur dans Azimuth. I besoin de calculer une moyenne mobile sur une série de données, dans une boucle for. Je dois obtenir la moyenne mobile sur N9 jours. Le tableau Im calculant est 4 séries de 365 valeurs (M), qui sont elles-mêmes des valeurs moyennes d'un autre ensemble de données. Je veux tracer les valeurs moyennes de mes données avec la moyenne mobile dans une parcelle. J'ai googlé un peu sur les moyennes mobiles et la commande conv et trouvé quelque chose que j'ai essayé de mettre en œuvre dans mon code. Ainsi, fondamentalement, je calculer ma moyenne et le tracer avec une moyenne mobile (fausse). J'ai choisi la valeur wts directement sur le site mathworks, donc c'est incorrect. (Source: mathworks. nlhelpeconmoving-average-trend-estimation. html) Mon problème, c'est que je ne comprends pas ce que c'est wts est. Quelqu'un peut-il expliquer si elle a quelque chose à voir avec le poids des valeurs: qui est invalide dans ce cas. Toutes les valeurs sont pondérées de la même façon. Et si je fais ce tout à fait mal, puis-je obtenir de l'aide avec elle Mes plus sincères remerciements. L'utilisation de conv est un excellent moyen de mettre en œuvre une moyenne mobile. Dans le code que vous utilisez, wts est combien vous peser chaque valeur (comme vous l'avez deviné). La somme de ce vecteur doit toujours être égale à un. Si vous souhaitez pondérer chaque valeur uniformément et faire un filtre N de taille N alors vous voudriez faire L'utilisation de l'argument valide en conv entraînera à avoir moins de valeurs dans Ms que vous avez dans M. Utilisez même si vous ne vous inquiétez pas les effets de Rembourrage zéro. Si vous avez la boîte à outils de traitement du signal, vous pouvez utiliser cconv si vous voulez essayer une moyenne mobile circulaire. Quelque chose comme Vous devriez lire la documentation conv et cconv pour plus d'informations si vous n'avez pas déjà. J'ai un vecteur et je veux calculer la moyenne mobile de celui-ci (en utilisant une fenêtre de largeur 5). Par exemple, si le vecteur en question est 1, 2, 3, 4, 5, 6, 7, 8. Alors la première entrée du vecteur résultant doit être la somme de toutes les entrées dans 1,2,3,4,5 (ie 15) la deuxième entrée du vecteur résultant doit être la somme de toutes les entrées dans 2,3,4, 5,6 (ie 20) etc. A la fin, le vecteur résultant devrait être 15,20,25,30. Comment puis-je faire? La fonction conv est tout à fait votre allée: Trois réponses, trois méthodes différentes. Voici un repère rapide (différentes tailles d'entrée, largeur de fenêtre fixe de 5) en utilisant le temps, n'hésitez pas à piquer des trous dans les commentaires si vous pensez qu'il doit être affiné. Conv apparaît comme l'approche la plus rapide son environ deux fois plus vite que l'approche des pièces (à l'aide de filtre). Et environ quatre fois plus vite que l'approche de Luis Mendos (en utilisant cumsum). Voici un autre benchmark (taille d'entrée fixe de 1e4: différentes largeurs de fenêtre). Ici, Luis Mendos cumsum approche émerge comme le vainqueur clair, parce que sa complexité est principalement régie par la longueur de l'entrée et est insensible à la largeur de la fenêtre. Conclusion Pour résumer, vous devez utiliser l'approche conv si votre fenêtre est relativement petite, utilisez l'approche cumsum si votre fenêtre est relativement grande. Code (pour les repères)


No comments:

Post a Comment