Wprowadzenie do elektroniki/Filtry/Wstęp-Analiza układu RC
Filtr RC
[edytuj]Schemat filtru RC dolnoprzepustowego
[edytuj]Równanie w dziedzinie czasu
[edytuj]Zaczynając rozdział chciałbym przytoczyć bardzo prosty układ filtru pasywnego składający się z dwóch elementów, rezystora R oraz kondensatora C. Następnie przytoczyć kilka możliwości jego opisu. Do zrozumienia rozdziału będzie konieczne zapoznanie się z takimi zagadnieniami jak liczby zespolone transformata Laplace'a, a także zagadnienia z zakresu rachunku różniczkowego.
Z napięciowego prawa Kirchhoffa wynika następująca zależność
Następnie należy wyznaczyć prąd płynący w obwodzie jako funkcję napięcia wyjściowego
Ładunek zgromadzony na kondensatorze wyraża się zależnością
Stąd równanie na prąd przyjmie postać
Ostatecznie stan w obwodzie możemy opisać takim równaniem różniczkowym w którym mamy tylko jedną niewiadomą.
Równanie to będzie stanowiło bazę do dalszych rozważań w tym rozdziale.
Metoda rozwiązania równania różniczkowego jest zależna od tego jak opisany będzie sygnał wejściowy filtru. Dla testu proszę sobie rozwiązać równanie kiedy wymuszeniem filtru będzie sygnał o stałej wartości a watrość początkowa będzie 0.
Dla tych co nie wiedzą jak się do tego zabrać podaje gotowe rozwiązanie. Licealista znający podstawy obliczania pochodnych będzie mógł sprawdzić przez podstawienie czy rozwiązanie jest prawdziwe.
Równanie
Ma rozwiązanie
Równanie Różniczkowe - Transformata Laplace'a
[edytuj]Transformata Laplace'a [1] jest to odwzorowanie przekształcające funkcję zmiennej t na funkcję zmiennej s
Transformata Laplace'a ma szereg właściwości ułatwiających rozwiązywanie równań różniczkowych, pozwala na łatwe przejście między opisem w dziedzinie czasu , dyskretnym czy opisem w dziedzinie częstotliwości. Umożliwia łatwe symulowanie układów w programie matlab.
W naszych rozważaniach skorzystamy z jednej właściwości transformaty Laplace'a. A mianowicie z tego, że transformata pochodnej funkcji jest równa transformacie funkcji pomnożonej przez zmienną s. Nasze równanie różniczkowe
Po zastosowaniu przekształcenia będzie wyglądało następująco
Widzimy, iż po takim przekształceniu z równania różniczkowego zrobiło nam się równanie algebraiczne. Możemy teraz wyznaczyć transmitancję układu jako stosunek sygnału wyjściowego do sygnału wejściowego
Powyżej otrzymane równanie użyjemy w kolejnym punkcie do analizy częstotliwościowej filtru. A teraz zostaje nam podzielenie obydwu stron równania przez w celu obliczenia transmitancji fitru
I oto mamy transmitancję filtru którą możemy użyć do symulacji w programie matlab, i patrzeć jak zachowuje się układ pod wpływem różnych wymuszeń.
Opis w dziedzinie częstotliwości
[edytuj]Uczyłeś się elektrotechniki?? Wiesz jak działa dzielnik napięcia?? Znasz podstawy liczb zespolonych?? oto fragment dla ciebie.
Zakładamy iż filtr został zasilony napięciem sinusoidalnym (większość przebiegów okresowych można aproksymować do sumy przebiegów sinusoidalnych rozwijając je w szereg furiera[2] - funkcje harmoniczne).
Reaktancja kondensatora w postaci zespolonej
Całkowita impedancja zespolona układu jest równa
Z właściwości dzielnika napięciowego wiemy iż
Po podstawieniu mamy
Mnożąc obydwie strony ułamka przez i pamiętając zależność dla liczb zespolonych mamy
Zastępując wyrażenie RC stałą czasowa otrzymamy
Przytoczę tutaj równanie jakie otrzymaliśmy w wyniku transformaty lapalcea
Pewnie widzicie jak łatwo przy pomocy tego typu transformaty przejść do opisu w dziedzinie częstotliwości wystarczy bowiem za podstawić
Dyskretyzacja - Czyli jak zrobić taki filtr komputerowo??
[edytuj]Teraz to co tygrysy lubią najbardziej.
Wiadomo że czasy w jakich przyszło nam żyć opanowały komputery. Sprzęt muzyczny opuszcza pomału analogowe układy (oczywiście że nigdy tego do końca nie zrobi). Również filtry przechodzą ze swoich analogowych wzorców do świata cyfrowego. W tym rozdziale zajmiemy się zagadnieniem jak przeportować nasz analogowy pierwowzór do procesora. Okazuje się, że wcale nie jest bo bardzo trudne. Można to zrobić na kilka sposobów:
między innymi stosując transformatę Z. Ja tutaj przedstawię sposób z zamianą równania różniczkowego na różnicowe.
- - n-ta próbka sygnału wejściowego
- - n-ta próbka sygnału wyjściowego
- - n-1 opóźniona o jeden (poprzednia) próbka sygnału wyjściowego
- - Okres próbkowania
Należy teraz wyznaczyć
a to próbkę n-tą wyznaczamy ze wzoru
Przykład
[edytuj]Napiszemy program filtra cyfrowego wzorowanego na układzie RC. R=100kΩ, C=2μF, okres próbkowania 1ms, czas obserwacji 1s. Program będzie przeliczał dla wymuszenia skokowego i sinusoidalnego.
Wszystkie współczynniki mamy już policzone więc zabieramy się do kodu
//Funkcja wciśnięcia przycisku
void MainWindowImpl::on_pushButton_clicked()
{
double x[1000], y[1000], z[1000];
double wy, we;
wy=0;
we=0;
for (int i=0; i<1000; i++)
{
x[i]=(double)i/1000;
//wymuszenie sinusoidalne
// we=10*sin(10*x[i]);
//wymuszenie skokowe
we=10;
wy= (we+200*wy)/201;
y[i] = we;
z[i] = wy;
}
qwtPlot->setAxisLabelRotation(QwtPlot::xBottom, -50.0);
// dwie krzywe wartość zadana U_we oraz wartość wyjściowa U_wy
U_we->setSamples(x, y, 1000);
U_wy->setSamples(x, z, 1000);
qwtPlot->replot();
}
Oczywiście Część odpowiedzialna za obliczenia wygląda ona tak:
for (int i=0; i<1000; i++)
{
we=10;
wy= (we+200*wy)/201;}
Prawda że proste ??
Dla niewtajemniczonych w języki programowania jeden szczegół zasługuje na wytłumaczenie. Chodzi mianowicie o to, iż zmienna wy znajdująca się po prawej stronie równania jest to wartość z wcześniejszej iteracji pętli. Ponieważ języki programowania działają w ten sposób, iż pierw wykonują działania a przypisanie wartości następuje na końcu. równanie jest niepoprawne matematycznie a komputer najpierw wykona a dopiero potem wynik przypisze do zmiennej (zwiększenie wartości x o jeden).
Warto pokusić się o blisko dwukrotne skrócenie czasu wykonania pętli poprzez jednorazowe wyliczenie ilorazu 1/201 poza pętlą i zamianę ostatniej liniji pętli na równoważną (zamiast dzielenia w pętli mamy odejmowanie):
wy= wy -(wy-we)*(1/201);}
Na koniec podaje jak wyszły wykresy wartości zadanej(czerwona linia) i wartości wyjściowej filtru(niebieska linia).
Teraz jeśli zmienimy wymuszenie na sinusoidalne (zakomentujemy linijkę we=10; a odkomentujemy linijkę we=10*sin(10*x[i]); ) to odpowiedź naszego filtru będzie wyglądała tak