Monday, February 27, 2017

Exemple De Code Matlab De Filtrage Moyen

Description: Matlab comprend des fonctions appelées movavg et tsmovavg (moyenne mobile de la série chronologique) dans la boîte à outils financières, movAv est conçu pour reproduire la fonctionnalité de base de celles-ci. Le code ici fournit un bel exemple de gestion des index dans les boucles, ce qui peut être source de confusion pour commencer. Ive délibérément gardé le code court et simple pour garder ce processus clair. MovAv effectue une moyenne mobile simple qui peut être utilisée pour récupérer des données bruyantes dans certaines situations. Il fonctionne en prenant la moyenne de l'entrée (y) sur une fenêtre temporelle glissante, dont la taille est spécifiée par n. Plus grand est n, plus la quantité de lissage de l'effet de n est relative à la longueur du vecteur d'entrée y. Et effectivement (ainsi, sorte de) crée un filtre de fréquence passe-bas - voir la section exemples et considérations. Comme la quantité de lissage fournie par chaque valeur de n est relative à la longueur du vecteur d'entrée, il vaut toujours la peine de tester différentes valeurs pour voir ce qui convient. Rappelez-vous aussi que n points sont perdus sur chaque moyenne si n est 100, les 99 premiers points du vecteur d'entrée ne contiennent pas assez de données pour une moyenne de 100 p. Ceci peut être évité quelque peu en empilant des moyennes, par exemple, le code et le graphique ci-dessous comparent un certain nombre de moyennes de fenêtre de longueur différentes. Notez comment lisse 1010pt est comparé à une seule moyenne 20pt. Dans les deux cas, 20 points de données sont perdus au total. Créer xaxis x1: 0.01: 5 Générer du bruit noiseReps 4 bruit repmat (randn (1, ceil (numel (x) noiseReps)), noiseReps, 1) remodeler le bruit (noise, 1, X) 10noise (1: length (x)) Moyennes de Perfrom: y2 movAv (y, 10) 10 pt y3 movAv (y2, 10) 1010 pt y4 movAv (y, 20) 20 pt y5 movAv (y, 40) 40 pt (X, y, y2, y3, y4, y5, y6) légende (données brutes, moyenne mobile 10pt, 1010pt, 20pt, 40pt, 100pt) xlabel (x) ylabel Y) title (Comparaison des moyennes mobiles) movAv. m fonction de la fonction run-through movAv (y, n) La première ligne définit le nom des fonctions, les entrées et les sorties. L'entrée x doit être un vecteur de données pour effectuer la moyenne sur, n doit être le nombre de points pour effectuer la moyenne sur la sortie contiendra les données moyennes renvoyées par la fonction. Pré-affecter la sortie outputNaN (1, numel (y)) Trouver le point médian de n midPoint round (n2) Le travail principal de la fonction se fait dans la boucle for, mais avant de démarrer deux choses sont préparées. Tout d'abord la sortie est pré-allouée comme NaNs, cela a servi à deux fins. Tout d'abord, la préallocation est généralement une bonne pratique car elle réduit la mémoire de jonglage Matlab a à faire, d'autre part, il est très facile de placer les données moyennées dans une sortie de la même taille que le vecteur d'entrée. Cela signifie que le même xaxis peut être utilisé ultérieurement pour les deux, ce qui est pratique pour le tracé, sinon les NaN peuvent être enlevés plus tard dans une ligne de code (sortie de sortie) (La variable midPoint sera utilisée pour aligner les données dans le vecteur de sortie. N 10, 10 points seront perdus car, pour les 9 premiers points du vecteur d'entrée, il n'y a pas assez de données pour prendre une moyenne de 10. La sortie sera plus courte que l'entrée, elle doit être correctement alignée. Être utilisée pour qu'une quantité égale de données soit perdue au début et à la fin et que l'entrée soit maintenue alignée sur la sortie par les tampons NaN créés lors de la préallocation de la sortie. (A: b) ban Calculer la moyenne de sortie (amidPoint) moyenne (y (a: b)) end Dans la boucle for elle-même, une moyenne est prise sur chaque segment consécutif de l'entrée. Définie comme 1 jusqu'à la longueur de l'entrée (y), moins les données qui seront perdues (n). Si l'entrée a 100 points de long et n est 10, la boucle va de (a) 1 à 90. Signifie a fournit le premier indice du segment à évaluer. Le deuxième indice (b) est simplement an-1. Donc sur la première itération, a1. N10. Donc b 11-1 10. La première moyenne est prise sur y (a: b). Ou x (1:10). La moyenne de ce segment, qui est une valeur unique, est stockée dans la sortie à l'index amidPoint. Ou 156. Sur la deuxième itération, a2. B 210-1 11. De sorte que la moyenne est prise sur x (2:11) et stockée dans la sortie (7). Sur la dernière itération de la boucle pour une entrée de longueur 100, a91. B 9010-1 100 de sorte que la moyenne est prise en compte sur x (91: 100) et mémorisée dans la sortie (95). Ceci laisse la sortie avec un total de n (10) valeurs de NaN à l'indice (1: 5) et (96: 100). Exemples et considérations Les moyennes mobiles sont utiles dans certaines situations, mais elles ne sont pas toujours le meilleur choix. Voici deux exemples où ils ne sont pas nécessairement optimale. Étalonnage du microphone Ce jeu de données représente les niveaux de chaque fréquence produite par un haut-parleur et enregistrée par un microphone avec une réponse linéaire connue. La sortie du haut-parleur varie avec la fréquence, mais nous pouvons corriger cette variation avec les données d'étalonnage - la sortie peut être ajustée au niveau pour tenir compte des fluctuations de l'étalonnage. Notez que les données brutes sont bruyantes - cela signifie qu'un petit changement de fréquence semble nécessiter un changement de niveau important et irrégulier. Est-ce réaliste ou est-ce un produit de l'environnement d'enregistrement Il est raisonnable dans ce cas d'appliquer une moyenne mobile qui lisse la courbe de niveau de fréquence pour fournir une courbe d'étalonnage qui est légèrement moins erratique. Mais pourquoi est-ce pas optimal dans cet exemple Plus de données serait mieux - plusieurs étalonnages en moyenne ensemble détruirait le bruit dans le système (aussi longtemps que son aléatoire) et de fournir une courbe avec moins de détail subtile perdu. La moyenne mobile ne peut que l'approximer, et peut supprimer certains plongeons et pics de fréquence plus élevés de la courbe qui existent réellement. Les ondes sinusoïdales L'utilisation d'une moyenne mobile sur les ondes sinusoïdales souligne deux points: La question générale du choix d'un nombre raisonnable de points pour effectuer la moyenne sur. Son simple, mais il existe des méthodes plus efficaces d'analyse du signal que la moyenne des signaux oscillants dans le domaine du temps. Dans ce graphique, l'onde sinusoïdale originale est tracée en bleu. Le bruit est ajouté et tracé comme la courbe orange. Une moyenne mobile est effectuée à différents nombres de points pour voir si l'onde originale peut être récupérée. 5 et 10 points fournissent des résultats raisonnables, mais ne supprimez pas le bruit entièrement, où comme un plus grand nombre de points commencent à perdre détails d'amplitude que la moyenne s'étend sur différentes phases (rappelez-vous la vague oscille autour de zéro, et la moyenne (-1 1) . Une autre approche consisterait à construire un filtre passe-bas que celui qui peut être appliqué au signal dans le domaine fréquentiel. Im pas entrer dans le détail car il va au-delà de la portée de cet article, mais comme le bruit est considérablement plus fréquente que la fréquence fondamentale des ondes, il serait assez facile dans ce cas de construire un filtre passe-bas que supprimera la haute fréquence Bruit. Créé le mercredi 08 Octobre 2008 20:04 Dernière mise à jour le Jeudi, 14 Mars 2013 01:29 Écrit par Batuhan Osmanoglu Clics: 41045 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 petit peu. 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. Cet exemple montre comment utiliser les filtres de moyenne mobile et le rééchantillonnage pour isoler l'effet des composantes périodiques de l'heure de la journée sur les lectures de la température horaire, ainsi que supprimer la ligne indésirables Bruit à partir d'une mesure de tension en boucle ouverte. L'exemple montre également comment lisser les niveaux d'un signal d'horloge tout en préservant les bords en utilisant un filtre médian. L'exemple montre également comment utiliser un filtre Hampel pour supprimer des valeurs aberrantes importantes. Motivation Smoothing est la façon dont nous découvrons des modèles importants dans nos données tout en laissant de côté les choses qui sont sans importance (à savoir le bruit). Nous utilisons le filtrage pour effectuer ce lissage. L'objectif du lissage est de produire des changements de valeur lents afin que son plus facile de voir les tendances dans nos données. Parfois, lorsque vous examinez les données d'entrée, vous pouvez lisser les données afin de voir une tendance dans le signal. Dans notre exemple, nous avons un ensemble de mesures de température en Celsius prises toutes les heures à l'aéroport de Logan pour tout le mois de janvier 2011. Notez que nous pouvons visualiser l'effet que l'heure du jour a sur les relevés de température. Si vous n'êtes intéressé que par la variation quotidienne de la température au cours du mois, les fluctuations horaires ne contribuent qu'au bruit, ce qui peut rendre les variations quotidiennes difficiles à discerner. Pour supprimer l'effet de l'heure, nous aimerions maintenant lisser nos données en utilisant un filtre de moyenne mobile. Un filtre de moyenne mobile Dans sa forme la plus simple, un filtre de moyenne mobile de longueur N prend la moyenne de chaque N échantillons consécutifs de la forme d'onde. Pour appliquer un filtre de moyenne mobile à chaque point de données, nous construisons nos coefficients de notre filtre de sorte que chaque point est pondéré de façon égale et contribue 124 à la moyenne totale. Cela nous donne la température moyenne sur chaque période de 24 heures. Délai de filtrage Notez que la sortie filtrée est retardée d'environ douze heures. Ceci est dû au fait que notre filtre de moyenne mobile a un retard. Tout filtre symétrique de longueur N aura un retard de (N-1) 2 échantillons. Nous pouvons tenir compte de ce délai manuellement. Extraire les différences moyennes Nous pouvons également utiliser le filtre de la moyenne mobile pour obtenir une meilleure estimation de la façon dont l'heure du jour affecte la température globale. Pour ce faire, soustrayez d'abord les données lissées des mesures de température horaire. Ensuite, segmenter les données différenciées en jours et prendre la moyenne sur tous les 31 jours du mois. Extraction de l'enveloppe de pointe Nous aimerions parfois avoir une estimation variable de la façon dont les hauts et les bas de notre signal de température changent tous les jours. Pour ce faire, nous pouvons utiliser la fonction enveloppe pour relier les hauts et les bas extrêmes détectés sur un sous-ensemble de la période de 24 heures. Dans cet exemple, nous nous assurons qu'il ya au moins 16 heures entre chaque extrême haut et extrême bas. Nous pouvons également avoir une idée de la façon dont les hauts et les bas sont tendance en prenant la moyenne entre les deux extrêmes. Filtres moyens mobiles pondérés D'autres types de filtres à moyenne mobile ne pondent pas de façon égale chaque échantillon. Un autre filtre commun suit l'expansion binomiale de (12,12) n Ce type de filtre se rapproche d'une courbe normale pour de grandes valeurs de n. Il est utile pour filtrer le bruit à haute fréquence pour n petits. Pour trouver les coefficients pour le filtre binomial, convoluez 12 12 avec lui-même puis convertissez itérativement la sortie avec 12 12 un nombre prescrit de fois. Dans cet exemple, utilisez cinq itérations totales. Un autre filtre un peu similaire au filtre d'expansion gaussien est le filtre de moyenne mobile exponentielle. Ce type de filtre de moyenne mobile pondéré est facile à construire et ne nécessite pas une grande taille de fenêtre. Vous ajustez un filtre de moyenne mobile exponentiellement pondéré par un paramètre alpha entre zéro et un. Une valeur plus élevée de alpha aura moins de lissage. Zoom sur les lectures pour une journée. Sélectionnez votre pays


No comments:

Post a Comment