Le guide des scientifiques et ingénieurs sur le traitement du signal numérique Par Steven W. Smith, Ph. D. Filtres passe-haut, passe-bande et rejet de bande Les filtres passe-haut, passe-bande et rejet de bande sont conçus en commençant par un filtre passe-bas puis en le convertissant en la réponse souhaitée . Pour cette raison, la plupart des discussions sur la conception de filtre ne donnent que des exemples de filtres passe-bas. Il existe deux méthodes pour la conversion passe-bas-passe-haut: inversion spectrale et inversion spectrale. Les deux sont tout aussi utiles. Un exemple d'inversion spectrale est illustré en 14-5. La figure (a) montre un kernel de filtre passe-bas appelé windowed-sinc (le sujet du chapitre 16). Ce noyau de filtre a une longueur de 51 points, bien que de nombreux échantillons aient une valeur si petite qu'ils semblent être zéro dans ce graphe. La réponse en fréquence correspondante est indiquée en (b), trouvée en ajoutant 13 zéros au noyau du filtre et en prenant une FFT de 64 points. Deux choses doivent être faites pour changer le noyau du filtre passe-bas en un noyau de filtre passe-haut. Tout d'abord, changez le signe de chaque échantillon dans le noyau du filtre. Deuxièmement, ajouter un à l'échantillon au centre de symétrie. Il en résulte le noyau du filtre passe-haut représenté en (c), avec la réponse en fréquence indiquée en (d). L'inversion spectrale retourne la réponse en fréquence de haut en bas. Le changement des bandes passantes en bandes d'arrêt et les bandes d'arrêt en bandes passantes. En d'autres termes, il passe d'un filtre passe-bas à passe-haut, passe-haut à passe-bas, passe-bande à bande-rejet ou bande-rejet à bande passante. La figure 14-6 montre pourquoi cette modification en deux étapes du domaine temporel donne un spectre de fréquence inversé. En (a), le signal d'entrée, x n, est appliqué à deux systèmes en parallèle. Un de ces systèmes est un filtre passe-bas, avec une réponse impulsionnelle donnée par h n. L'autre système ne fait rien au signal, et a donc une réponse impulsionnelle qui est une fonction delta, delta n. La sortie globale, y n, est égale à la sortie du système passe-tout moins la sortie du système passe-bas. Puisque les composantes basse fréquence sont soustraites du signal original, seules les composantes haute fréquence apparaissent dans la sortie. Ainsi, un filtre passe-haut est formé. Cela pourrait être effectué en deux étapes dans un programme informatique: exécuter le signal via un filtre passe-bas, puis soustraire le signal filtré de l'original. Cependant, l'opération entière peut être réalisée dans un étage de signal en combinant les deux noyaux de filtre. Comme décrit au chapitre 7, les systèmes parallèles avec des sorties ajoutées peuvent être combinés en un seul stade en ajoutant leurs réponses impulsionnelles. Comme indiqué en (b), le noyau de filtre pour le filtre passe-haut est donné par: delta n - h n. C'est-à-dire, changer le signe de tous les échantillons, puis ajouter un à l'échantillon au centre de symétrie. Pour que cette technique fonctionne, les composants basse fréquence sortant du filtre passe-bas doivent avoir la même phase que les composants basse fréquence sortant du système passe-tout. Sinon, une soustraction complète ne peut avoir lieu. Ceci impose deux restrictions à la méthode: (1) le noyau de filtre d'origine doit avoir une symétrie gauche-droite (c'est-à-dire une phase nulle ou linéaire), et (2) l'impulsion doit être ajoutée au centre de symétrie. La deuxième méthode pour la conversion passe-bas à passe-haut, inversion spectrale. Est illustré sur la Fig. 14-7. Comme précédemment, le noyau de filtre passe-bas en (a) correspond à la réponse en fréquence en (b). Le noyau du filtre passe-haut, (c), est formé en changeant le signe de chaque autre échantillon en (a). Comme représenté dans (d), cela retourne le domaine fréquentiel gauche-pour-droite. 0 devient 0,5 et 0,5 devient 0. La fréquence de coupure de l'exemple de filtre passe-bas est de 0,15, ce qui fait que la fréquence de coupure du filtre passe-haut est de 0,35. Changer le signe de chaque autre échantillon équivaut à multiplier le noyau du filtre par une sinusoïde de 0,5. Comme discuté au chapitre 10, ceci a pour effet de décaler le domaine de fréquence de 0,5. Regardez (b) et imaginez les fréquences négatives entre -0,5 et 0 qui sont de l'image miroir des fréquences comprises entre 0 et 0,5. Les fréquences qui apparaissent dans (d) sont les fréquences négatives de (b) décalées de 0,5. Enfin, les Figs. 14-8 et 14-9 montrent comment les noyaux de filtre passe-bas et passe-haut peuvent être combinés pour former des filtres passe-bande et de rejet de bande. En bref, l'ajout des noyaux de filtre produit un filtre de rejet de bande, tandis que la convolution des noyaux de filtre produit un filtre passe-bande. Ceux-ci sont basés sur la façon dont les systèmes en cascade et parallèles sont combinés, comme discuté au chapitre 7. Une combinaison multiple de ces techniques peut également être utilisée. Par exemple, un filtre passe-bande peut être conçu en ajoutant les deux noyaux de filtre pour former un filtre passe-bande, puis utiliser l'inversion spectrale ou l'inversion spectrale comme décrit précédemment. Toutes ces techniques fonctionnent très bien avec peu de surprises. Lissage supprime des variations à court terme, ou quotnoisequot pour révéler la forme sous-jacente sous-jacente importante des données. Igoracutes Smooth opération exécute boîte, quotbinomialquot, et Savitzky-Golay lissage. Les différents algorithmes de lissage convoluent les données d'entrée avec des coefficients différents. Le lissage est une sorte de filtre passe-bas. Le type de lissage et la quantité de lissage modifient la réponse de fréquence de filtrage: Moyenne mobile (alias lissage de boîte) La forme la plus simple de lissage est la moyenne quotmoving qui remplace simplement chaque valeur de données par la moyenne des valeurs voisines. Pour éviter de déplacer les données, il est préférable de faire la moyenne du même nombre de valeurs avant et après l'endroit où la moyenne est calculée. Dans la forme d'équation, la moyenne mobile est calculée par: Un autre terme pour ce genre de lissage est quotsliding moyenquot, quotbox smoothingquot, ou quotboxcar smoothingquot. Il peut être mis en œuvre en convolvant les données d'entrée avec une impulsion en forme de boîte de valeurs 2M1 toutes égales à 1 (2M1). Nous appelons ces valeurs les quotcoefficientsquot du noyau quotsmoothing: Binomial Smoothing Le lissage binomial est un filtre gaussien. Il convertit vos données avec des coefficients normalisés dérivés du triangle Pascalacutes à un niveau égal au paramètre Smoothing. L'algorithme est dérivé d'un article de Marchand et Marmet (1983). Savitzky-Golay Smoothing Le lissage Savitzky-Golay utilise un ensemble différent de coefficients précomprimés populaires dans le domaine de la chimie. C'est un type de lissage polynomial des moindres carrés. La quantité de lissage est contrôlée par deux paramètres: l'ordre polynomial et le nombre de points utilisés pour calculer chaque valeur de sortie lissée. Références Marchand, P. et L. Marmet, Filtre de lissage binomial: un moyen d'éviter certains pièges de lissage polynomial à moindres carrés, Rev. Sci. Instrum. . 54. 1034-41, 1983. Savitzky, A. et M. J.E. Golay, Lissage et différenciation des données par des procédures simplifiées par moindres carrés, Analytical Chemistry. 36. 1627-1639, 1964. Im codage quelque chose au moment où Im prenant un tas de valeurs au fil du temps d'une boussole matérielle. Cette boussole est très précise et mise à jour très souvent, avec le résultat que si elle jiggles légèrement, je me retrouve avec la valeur étrange qui est sauvagement incompatible avec ses voisins. Je veux lisser ces valeurs. Après avoir fait quelques lectures, il semblerait que ce que je veux est un filtre passe-haut, un filtre passe-bas ou une moyenne mobile. Moyenne mobile je peux descendre avec, il suffit de garder un historique des dernières 5 valeurs ou autre, et d'utiliser la moyenne de ces valeurs en aval dans mon code où j'ai été une fois juste en utilisant la valeur la plus récente. Cela devrait, je pense, lisser ces jiggles joliment, mais il me semble que son probablement tout à fait inefficace, et c'est probablement l'un de ces problèmes connus aux programmeurs appropriés à qui theres une solution vraiment ordonnée Clever Math. Je suis, cependant, l'un de ces programmeurs autodidactes horribles sans un morceau de l'éducation formelle dans quelque chose même vaguement liés à CompSci ou Math. La lecture autour d'un peu suggère que cela peut être un filtre passe-haut ou bas, mais je ne peux pas trouver quoi que ce soit qui explique en termes compréhensibles à un hack comme moi ce que l'effet de ces algorithmes serait sur un tableau de valeurs, travaux. La réponse donnée ici. Par exemple, techniquement répond à ma question, mais seulement en termes compréhensibles à ceux qui seraient probablement déjà savoir comment résoudre le problème. Ce serait une personne très belle et intelligente en effet qui pourrait expliquer le genre de problème, c'est, et comment les solutions de travail, en termes compréhensibles pour un diplômé Arts. Si votre moyenne mobile doit être longue afin d'obtenir le lissage requis, et que vous n'avez pas vraiment besoin d'une forme particulière de noyau, alors vous êtes mieux si vous utilisez une moyenne mobile exponentiellement en décomposition: où vous Choisissez minuscule pour être une constante appropriée (par exemple, si vous choisissez le minuscule 1- 1N, il aura la même quantité de moyenne que la fenêtre de taille N, mais différemment différemment sur les points plus anciens). Quoi qu'il en soit, puisque la prochaine valeur de la moyenne mobile ne dépend que de la précédente et vos données, vous n'avez pas à garder une file d'attente ou quoi que ce soit. Et vous pouvez penser à cela comme faire quelque chose comme, Eh bien, Ive a obtenu un nouveau point, mais je ne fais pas vraiment confiance, donc Im va garder 80 de ma vieille estimation de la mesure, et ne font confiance à ce nouveau point de données 20. Thats À peu près la même chose que de dire, Eh bien, je ne fais confiance à ce nouveau point 20, et Ill utiliser 4 autres points que je fais confiance à la même quantité, sauf qu'au lieu de prendre explicitement les 4 autres points, vous êtes en supposant que la moyenne que vous avez fait la dernière fois Était raisonnable, donc vous pouvez utiliser votre travail précédent. Répondre Sep 21 10 at 14:27 Hey, je sais que c'est 5 ans de retard, mais merci pour une réponse géniale. I39m travaillant sur un jeu où le son change en fonction de votre vitesse, mais en raison de l'exécution du jeu sur un ordinateur slow-ass, la vitesse fluctuerait sauvagement, ce qui était bien pour la direction, mais super ennuyeux en termes de son. C'était une solution vraiment simple et bon marché pour quelque chose que je pensais être un problème vraiment complexe. Ndash Adam Mar 16 15 at 20:20 Si vous essayez de supprimer la valeur impair occasionnelle, un filtre passe-bas est le meilleur des trois options que vous avez identifié. Les filtres passe-bas permettent des changements à faible vitesse tels que ceux causés par la rotation d'une boussole à la main, tout en rejetant des changements à grande vitesse tels que ceux provoqués par des bosses sur la route, par exemple. Une moyenne mobile ne sera probablement pas suffisante, car les effets d'un seul flip dans vos données affecteront plusieurs valeurs ultérieures, selon la taille de votre fenêtre de moyenne mobile. Si les valeurs impaires sont facilement détectées, vous pouvez même être mieux avec un algorithme de suppression de glitch qui les ignore complètement: Voici un graphique guick à illustrer: Le premier graphe est le signal d'entrée, avec un glitch désagréable. Le deuxième graphique montre l'effet d'une moyenne mobile de 10 échantillons. Le graphe final est une combinaison de la moyenne de 10 échantillons et de l'algorithme de détection de glitch simple représenté ci-dessus. Lorsque le glitch est détecté, la moyenne de 10 échantillons est utilisée au lieu de la valeur réelle. Répondre Sep 21 10 at 13:38 Bien expliqué, et des points de bonus pour le graphique) ndash Henry Cooke Sep 22 10 à 0:50 Wow. Rarement vu une si belle réponse ndash Muis Jun 4 13 at 9:14 La moyenne mobile est un filtre passe-bas. Ndash nomen Oct 21 13 at 19:36 Essayez une médiane runningstreaming à la place. Ndash kert Apr 25 14 at 22:09 Moyenne mobile, je peux descendre avec. Mais il me semble que son probablement tout à fait inefficace. Theres vraiment aucune raison qu'une moyenne mobile devrait être inefficace. Vous conservez le nombre de points de données que vous voulez dans un tampon (comme une file d'attente circulaire). Sur chaque nouveau point de données, vous générez la valeur la plus ancienne et soustrayez-la d'une somme, puis appuyez sur la plus récente et ajoutez-la à la somme. Donc, chaque nouveau point de données implique vraiment seulement un poppush, un ajout et une soustraction. Votre moyenne mobile est toujours cette somme décalage divisée par le nombre de valeurs dans votre tampon. Il devient un peu plus délicat si vous recevez des données simultanément à partir de plusieurs threads, mais puisque vos données proviennent d'un périphérique matériel qui semble très douteux pour moi. Oh et aussi: horribles programmeurs autodidactes se réunissent) La moyenne mobile semblait inefficace pour moi parce que vous devez stocker un tampon de valeurs - mieux faire juste quelques Clever Maths avec votre valeur d'entrée et la valeur de travail courante Je pense que la moyenne mobile exponentielle travaux. Une optimisation que j'observe pour ce type de moyenne mobile implique l'utilisation d'un ampli de files d'attente de longueur fixe, un pointeur vers l'endroit où vous vous trouvez dans cette file d'attente, et juste d'envelopper le pointeur autour (avec ou un if). Voila Pas cher pushpop. Puissance pour les amateurs, le frère ndash Henry: Pour une moyenne mobile straight-up vous avez besoin de la mémoire tampon simplement pour que vous sachiez ce que la valeur se fait sauter lorsque la prochaine valeur obtenir poussé. Cela dit, l'ampli de queue de longueur fixe, un pointeur que vous décrivez est exactement ce que je voulais dire par file d'attente quotcirculaire. C'est pourquoi je disais que ce n'est pas efficace. Qu'est-ce que vous pensez que je voulais dire Et si votre réponse est quotan tableau qui décale ses valeurs sur chaque suppression indexée (comme std :: vector en C). Je ne sais pas sur AS3, mais un programmeur Java a obtenu des collections comme CircularQueue à son disposition (I39m pas un Java développeur donc I39m sûr il ya de meilleurs exemples là-bas that39s juste ce que j'ai trouvé à partir d'une recherche rapide Google), qui implémente précisément la fonctionnalité we39re parler. I39m assez confiant la majorité des langues de moyenne et de basse-niveau avec les bibliothèques standard ont quelque chose de semblable (par exemple, dans. NET QueuxTTGt). Quoi qu'il en soit, j'étais moi-même la philosophie. tout est pardonné. Ndash Dan Tao Sep 22 10 at 12:44 Une moyenne mobile exponentiellement en décomposition peut être calculée à la main avec seulement la tendance si vous utilisez les valeurs appropriées. Voir fourmilab. chhackdiete4 pour une idée sur la façon de le faire rapidement avec un stylo et du papier si vous cherchez exponentiellement lissée moyenne mobile avec 10 lissage. Mais puisque vous avez un ordinateur, vous voulez probablement faire le décalage binaire plutôt que le décalage décimal) De cette façon, tout ce dont vous avez besoin est une variable pour votre valeur actuelle et une pour la moyenne. La moyenne suivante peut alors être calculée à partir de cela. Il ya une technique appelée une porte de gamme qui fonctionne bien avec des échantillons parasites faible occurrence. En supposant l'utilisation de l'une des techniques de filtrage mentionnées ci-dessus (moyenne mobile, exponentielle), une fois que vous avez suffisamment d'historique (une constante de temps), vous pouvez tester le nouvel échantillon de données entrantes pour le caractère raisonnable avant d'être ajouté au calcul. Une certaine connaissance du taux de changement de signal maximal raisonnable est nécessaire. L'échantillon brut est comparé à la valeur lissée la plus récente et si la valeur absolue de cette différence est supérieure à la plage permise, cet échantillon est rejeté (ou remplacé par une certaine heuristique, par exemple une prédiction basée sur le différentiel de pente ou la tendance Valeur de prédiction à partir du double lissage exponentiel) Répondue Apr 30 16 at 6:56
No comments:
Post a Comment