Signaux et systèmes du monde réel cas: conception de filtre analogique avec une torsion

Vous êtes donné la tâche de concevoir un analogue (en temps continu) filtrer pour répondre aux spécifications de réponse d'amplitude indiqués. Vous avez également besoin de trouver la réponse de l'étape de filtration, de déterminer la valeur du dépassement de pointe, et au moment où le dépassement de pointe se produit.

Sommaire

image0.jpg

L'objectif de la conception du filtre est de l'ampleur de la réponse en fréquence en dB (20log10|H(F) |) De passer à travers la région non ombrée de la figure lorsque la fréquence augmente. Les exigences de conception réduisent à la bande passante et la bande d'arrêt fréquences critiques Fp et Fs Les niveaux d'atténuation de bande passante et de bande d'arrêt Hz et UNp et UNs dB.

En outre, la caractéristique de réponse est d'être Butterworth, ce qui signifie que la fonction de réponse du filtre et la grandeur de prendre cette forme:

image1.jpg

Ici, N est l'ordre du filtre, Fc est la bande passante à 3 dB fréquence de coupure du filtre, et les pôles, situé sur un demi-cercle est la gauche, la moitié s-avion, sont donnés par

image2.jpg

Ce problème vous oblige à travailler dans le domaine de fréquence, le domaine du temps, et peut-être la s-domaine, en fonction de l'approche de la solution que vous choisissez.

A partir des besoins, la réponse en fréquence de filtre a un gain unitaire (0 dB) dans la bande passante. La réponse de l'étape (a de caractérisation dans le domaine temporel) du filtre Butterworth est connu pour dépasser l'unité avant de se fixer à l'unité comme

image3.jpg

Pour concevoir le filtre, vous pouvez utiliser l'une des deux approches:

  1. Travailler une solution à la main, en utilisant l'ampleur réponse en fréquence Butterworth |HBU(F) | et le fonctionnement du système, HBU(s).

  2. Utilisez les capacités de conception de filtre de la SciPy signal package.

Trouver l'ordre du filtre et de 3 dB fréquence de coupure

Suivez ces étapes pour concevoir le filtre en utilisant Python et SciPy pour faire le nombre réel croquer:

  1. Trouver N et Fc pour répondre aux exigences de réponse de magnitude.

    Utilisez la fonction SciPy N, wc = signal.buttord (WP, WS, Ap, As, analogique = 1) et entrez les exigences de conception de filtre, où wp et ws sont la bande passante et la bande d'arrêt fréquences critiques en rad / s et Ap et Comme sont les niveaux de bande passante et de bande d'arrêt d'atténuation (les deux séries de chiffres proviennent de la figure précédente). La fonction retourne l'ordre du filtre N et la fréquence de coupure WC en rad / s.

  2. Synthétiser le filtre - trouver le {bk} Et {unk} Coefficients de l'équation différentielle de la LCC qui réalise le système souhaité.




    Si trouver des éléments de circuit est la fin du jeu, vous pouvez aller immédiatement, en utilisant des formules de synthèse du circuit. Appelez la fonction SciPy B, A = signal.butter (N, wc, analogique = 1) avec l'ordre du filtre et la fréquence de coupure, et il renvoie les coefficients de filtre dans les tableaux b et un.

  3. Trouvez la réponse à un échelon sous forme mathématique exacte ou par simulation.

Voici comment utiliser les outils de Python avec les exigences de conception donnée, puis vérifier le travail en traçant la réponse en fréquence comme une superposition. Note: Vous pouvez faire la même chose dans MATLAB avec presque la même syntaxe.

Dans [379]: N, wc = signal.buttord (2 * pi * 1e3,2 * pi * 10e3,3.0,50, analogique = 1) # find filtre afin NIn [380]: N # filtre orderOut [380]: 3En [381]: Wc fréq # de coupure en rad / Sout [381]: 9222.4701630595955In [382]: B, a = signal.butter (N, wc, analogique = 1) # get coeffs.In [383]: BOut [383]: Array ([7.84407571e + 11 + 0.j]) Dans [384]: Réel (a) Out [384]: Array ([1.00000000e + 00, + 1.84449403e 04,1.70107912e + 08,7.84407571e + 11])

Les résultats de la ligne [379] vous disent que l'ordre du filtre est nécessaire N = 3 et la fréquence de coupure du filtre est requis

image4.jpg

Les ensembles de coefficients de filtre sont également inclus dans les résultats.

Utilisez le real () fonction pour afficher en toute sécurité la partie réelle de l'ensemble des coefficients un parce que vous savez les coefficients sont réels. Comment? Les Polonais, les racines du dénominateur de HBU(s), Sont réels ou se produire par paires conjuguées complexes, en veillant à ce que le polynôme dénominateur a coefficients réels lorsqu'il est multiplié out. Les très petites parties imaginaires sont dus à des erreurs de précision numérique.

Vérification de la réponse finale de fréquence de conception

Pour vérifier la conception, utiliser la recette de réponse en fréquence.

Dans [386]: F = logspace (2,5,500) # fréquence de journal axisIn [387]: W, H = signal.freqs (B, A, 2 * pi * f) Dans [388]: Semilogx (f, 20 * log10 (abs (H)), 'g')

La figure montre le tracé de la réponse conception de magnitude final avec les exigences de conception d'origine.

image5.jpg

Trouver la réponse à un échelon à partir des coefficients de filtre

L'approche la plus élégante pour trouver la réponse à un échelon à partir des coefficients de filtrage est de trouver

image6.jpgimage7.jpg

La s-section de domaine de la figure vous indique comment compléter l'expansion de fraction partielle (PFE) numériquement. Vous avez les tableaux de coefficients pour H(s), De sorte que tout ce que vous devez faire est de multiplier le polynôme dénominateur par s. Vous pouvez le faire à la main ou vous pouvez utiliser une relation entre les coefficients des polynômes et la séquence convolution.

Lorsque vous multipliez deux polynômes, les tableaux de coefficient pour chaque polynôme sont convolution, comme dans la séquence convolution.

Ici, vous travaillez à travers le problème, en utilisant signal.convolve pour effectuer multiplication polynomiale dans le dénominateur. Pour vous convaincre que cela fonctionne vraiment, considère la multiplication des deux polynômes suivants:

(X2 + X + 1)(X + 1) = X3 + 2X2 + 2X + 1

Si vous convolve les coefficients ensembles [1, 1, 1] et [1, 1] comme des tableaux en Python, vous obtenez cette sortie:

Dans [418]: Signal.convolve ([1,1,1], [1,1]) Out [418]: Array ([1, 2, 2, 1])

Ceci est en accord avec le calcul à la main. Pour trouver le PFE, branchez les coefficients des tableaux b et convolve (a, [1,0]) en R, p, K = résidu (b, a). Les coefficients [1, 0] correspondent à la s-domaine polynôme s + 0.

Dans [420]: R, P, K = signal.residue (b, signal.convolve ([1,0], a)) Dans [421]: R # (résidus) rayer minuscule errorsOut numérique [421]: Array ([1.0000e + 00 + 2.3343e-16j, résidu # 0, une partie de imag 0-1.0000e + 00 + 1.0695e-15j, # résidu 1, une partie de imag 01.08935e-15 -5.7735e-01J, # résidu 2, partie réelle 01.6081e-15 + 5.7735e-01J]) # résidu 3, partie réelle 0 Au [422]: P # (pôles) Out [422]: Array ([0.0000 + 0.0000e + 00J, pôle # 0 à 9222,4702 -1.5454e-12j, # pôle 1, imag partie de 0 à 4611,2351 -7.9869e + 03J, # 2 à 4611,2351 pôle + 7.9869e + 03J]) # pôle 3Dans [423]: K # (de la division de long) Out [423]: Array ([0 + 0.j]) # bonne rationnelle, donc pas de termes

Vous disposez de quatre pôles: deux réel et une paire de conjugué complexe - un peu de désordre de travailler à travers, mais il est faisable. Reportez-vous à la paire transformer

image8.jpg

pour calculer la transformation inverse pour tous les quatre termes.

Pour les pôles conjugués, les résidus sont également conjugués. Cette propriété détient toujours.

Vous pouvez écrire la transformée inverse des termes de pôles conjugué que sinus et cosinus, en utilisant la formule d'Euler et de l'annulation des parties imaginaires devant le cosinus et parties réelles devant le sinus:

image9.jpg

Mettre le tout ensemble, vous obtenez yétape(t) = u(t) - e-9,222.47tu(t) -2 X 0,5774e-4,611.74tsin (7,986.89t)u(t). Avoir cette forme est agréable, mais vous avez encore besoin de trouver le maximum de fonctions pour t > 0 et la position maximale. Pour ce faire, tracer la fonction et d'observer le maximum.

Une approche plus directe est d'utiliser la simulation via signal.lsim et la recette dans le domaine temporel. L'entrée du système est une étape, de sorte que la sortie de la simulation sera la réponse à un échelon. De la réponse de l'étape de simulation, vous pouvez calculer le peak numériquement et voir dans un complot. Le code IPython de ligne de commande est

image10.jpg
Dans [425]: T = arange (0,0.002,1e-6) # pas moins de petit temps Constantin [426]: T, ys, x_state = signal.lsim ((b, a), ceux (len (t)), t) Dans [428]: Parcelle (t * 1e3, ys)

Utilisation de la matrice temps t et la matrice de réponse à un échelon ys, vous pouvez utiliser la max () et find () fonctions pour compléter la tâche:

Dans [436]: Max (réel (ys)) # réelle pour effacer num. errorsOut [436]: 1,0814651457627822 # pic dépassement is8.14% Dans [437]: Trouver (réels (YS) == max (réels (YS))) Out [437]: Array ([534]) # find pic étant à l'index 534In [439]: T [534] * 1e3 # temps à l'indice 534 en msOut [439]: 0,5339

» » » » Signaux et systèmes du monde réel cas: conception de filtre analogique avec une torsion