Moduł 11 · częstotliwościowa

Systemy dyskretne

Aliasing, transformata Z, dyskretyzacja regulatorów (Euler/Tustin/ZOH), kwantyzacja, wybór T_s, specyfika embedded.

1. Po co dyskretność — komputer w pętli

Analogia. Wyobraź sobie kucharkę z budzikiem. Pomieszać zupę, sprawdzić temperaturę, dodać przyprawy — ale tylko gdy budzik zadzwoni (co minutę). Między dzwonkami zupa „leci sama". To jest dyskretne sterowanie: regulator widzi i decyduje tylko co T_s sekund, plant żyje w czasie ciągłym. Kluczowe pytanie: co minutę wystarczy? Co sekundę? Co minutę zupę można już spalić.

Dlaczego dyskretne, skoro analogowe regulatory istnieją?

  • Programowalność — zmiana kontrolera = zmiana kodu, nie elementu RC.
  • Złożoność — algorytmy typu MPC z QP per krok wymagają komputera; analogowo niemożliwe.
  • Diagnostyka — logowanie sygnałów, detekcja uszkodzeń, fault recovery.
  • Standardyzacja — ten sam algorytm na różnych platformach sprzętowych.

Cena: trzeba uważać. Złe próbkowanie wprowadza opóźnienia, zamienia stabilne planty w niestabilne, generuje aliasing. Te artefakty są nieobecne w analizie ciągłej i łatwo je przeoczyć.

2. Twierdzenie Shannona i aliasing

Analogia. Filmując koła samochodu kamerą 25 klatek/s, koła wyglądają jak obracające się wstecz przy pewnych prędkościach. To nie jest błąd kamery — to aliasing: gdy częstotliwość obrotu jest wyższa od f_s/2 (połowa klatek na sekundę), nie da się odróżnić obrotu rzeczywistego od obrotu wstecznego o niższej częstotliwości. Ta sama zasada rządzi próbkowaniem sygnałów w komputerze.

Twierdzenie Shannona-Nyquista (1949): sygnał o paśmie [0,fmax][0, f_{max}] da się jednoznacznie odzyskać z próbek wtedy i tylko wtedy gdy:

fs>2fmax.f_s > 2 f_{max}.

Próbkowanie wolniejsze powoduje, że częstotliwości powyżej fs/2f_s/2 składają się do pasma [0,fs/2][0, f_s/2] — to aliasing. Każda częstotliwość fsigf_{sig} powyżej fs/2f_s/2 wygląda jak fałszywa falias=fsigkfsf_{alias} = |f_{sig} - kf_s|, dla k=round(fsig/fs)k = \mathrm{round}(f_{sig}/f_s).

parametry

f_signal (Hz)3.0
f_s (próbkowanie, Hz)4.0
diagnoza
f_Nyquist = f_s/22.00 Hzf_aliased1.00 HzstanALIASING

Sygnał 3 Hz przekracza granicę Nyquista 2.0 Hz. Próbki pasują RÓWNIE DOBRZE do fałszywej sinusoidy 1.0 Hz (czerwona linia). To samo zjawisko: koła samochodu w filmie wyglądające na obracające się wstecz.

0.00.51.01.52.0ciągły 3 Hzpróbki @ 4 Hzfałszywy alias 1.0 Hzt [s]

Twierdzenie Shannona-Nyquista: aby sygnał o częstotliwości fsigf_{sig} można było jednoznacznie odzyskać z próbek, częstotliwość próbkowania fsf_s musi spełnić:

fs>2fsig.f_s > 2 f_{sig}.

Granica fs/2f_s/2 nazywa się częstotliwością Nyquista. Sygnały powyżej niej zostają „złożone" — aliasing:

falias=fsigkfs,k=round(fsig/fs).f_{alias} = |f_{sig} - k \cdot f_s|,\quad k = \mathrm{round}(f_{sig}/f_s).

Aliased sygnał 3 Hz przy próbkowaniu 4 Hz to 1.0 Hz — i NIE DA SIĘ ich rozróżnić tylko z próbek. Próbki czerwonej i niebieskiej krzywej są identyczne. To samo zjawisko obserwujemy w:

  • Koła samochodu w filmie — wydają się obracać wstecz lub stać; klatki filmu są próbkami obrazu.
  • Moire w obrazach z ekranu rejestrowanych kamerą — kratka sensora i kratka pikseli interferują.
  • Strobe effect — światło stroboskopu „zatrzymuje" obracający się wentylator.

Konsekwencje w sterowaniu:

  • Wysokie częstotliwości szumu pomiarowego (np. EMI 50 Hz) przy zbyt niskim T_s składa się do pasma roboczego regulatora — wygląda jak realne zaburzenie.
  • Anti-aliasing filter: filtr dolnoprzepustowy przed próbkowaniem (analogowy, sprzętowy) tłumi częstotliwości powyżej f_s/2 zanim trafią do AD converter.
  • Reguła kciuka: f_s ≥ 10× pasmo planta dla wystarczającej dokładności sterowania (dużo powyżej minimum Nyquista, które jest tylko dla wiernej rekonstrukcji sygnału).

3. Transformata Z — narzędzie analizy dyskretnej

Transformata Z jest dla układów dyskretnych tym, czym transformata Laplace'a dla ciągłych. Mapuje sekwencję czasową{xk}k0\{x_k\}_{k \geq 0} w funkcję zmiennej zespolonej:

X(z)=Z{xk}=k=0xkzk.X(z) = \mathcal{Z}\{x_k\} = \sum_{k=0}^\infty x_k\, z^{-k}.

Kluczowa własność: opóźnienie staje się dzieleniem przez z:

Z{xk1}=z1X(z).\mathcal{Z}\{x_{k-1}\} = z^{-1} X(z).

Konsekwencja: równania różnicowe stają się algebraiczne, tak jak ODE staje się algebra po Laplace'ie. Plant dyskretny:

yk+1=ayk+buk    G(z)=bzay_{k+1} = a\, y_k + b\, u_k \;\Longleftrightarrow\; G(z) = \frac{b}{z - a}

Stabilność w domenie Z

W domenie Laplace'a stabilność = bieguny w lewej półpłaszczyźnie (Re(s)<0\mathrm{Re}(s) < 0). W domenie Z stabilność = bieguny wewnątrz koła jednostkowego (z<1|z| < 1).

Mapa z=esTsz = e^{sT_s} łączy obie domeny. Lewa półpłaszczyzna s mapuje się na wnętrze koła jednostkowego z — granice stabilności są zgodne.

Częstotliwość w Z

Odpowiedź częstotliwościowa układu dyskretnego: G(ejωTs)G(e^{j\omega T_s}). Ze względu na okresowośćejωTse^{j\omega T_s} ma okres ω=2π/Ts\omega = 2\pi/T_s, czyli pasmo Bode jest ograniczone do [0,π/Ts][0, \pi/T_s] = pasmo Nyquista. Powyżej tej granicy odpowiedź się zwija i powtarza — to algebraiczna manifestacja aliasingu.

4. Dyskretyzacja kontrolerów — Euler, Tustin, ZOH

Analogia. Mając ciągłą formułę całki I=edtI = \int e\,dt, musisz zaaproksymować ją w komputerze. Trzy klasyczne metody: prostokąty lewe (Euler forward), prostokąty prawe (Euler backward), trapezy (Tustin/bilinearna). Trapezy są dokładniejsze. Ten sam wybór dotyczy całego regulatora.

Trzy klasyczne metody

Euler forward:sz1Tsz=1+sTs\textbf{Euler forward:}\quad s \leftrightarrow \frac{z - 1}{T_s} \quad\Leftrightarrow\quad z = 1 + sT_s

Najprostsza, ale nie zachowuje stabilności: stabilny biegun w lewej s-półpłaszczyźnie może mapować się POZA koło jednostkowe w z. Bezpieczna tylko dla małych T_s.

Euler backward:sz1Tszz=11sTs\textbf{Euler backward:}\quad s \leftrightarrow \frac{z - 1}{T_s\, z} \quad\Leftrightarrow\quad z = \frac{1}{1 - sT_s}

Stabilna zawsze (mapa lewa półpłaszczyzna → wnętrze koła), ale wprowadza dodatkowe opóźnienie fazy.

Tustin (bilinear):s2Tsz1z+1\textbf{Tustin (bilinear):}\quad s \leftrightarrow \frac{2}{T_s} \cdot \frac{z - 1}{z + 1}

Zachowuje stabilność, dokładniejszy O(T_s²), najczęściej stosowana w przemyśle. Z drobnym efektem zwanym frequency warping: częstotliwości w pobliżu Nyquista są nieliniowo skompresowane.

ZOH:Gd(z)=(1z1)Z ⁣{G(s)s}\textbf{ZOH:}\quad G_d(z) = (1 - z^{-1})\,\mathcal{Z}\!\left\{\frac{G(s)}{s}\right\}

Dokładny ekwiwalent gdy plant rzeczywiście jest sterowany przez ZOH (typowo w embedded — sygnał u trzymany między próbkami). Wymaga obliczania transformaty Z planta.

T_s — okres próbkowania

T_s [s]0.050
błąd RMS względem ciągłego
Euler forward0.0058Tustin (bilinear)0.0071

Plant: MSD (m=1, c=2, k=4). PID: Kp=8, Ki=4, Kd=2. Skok r=1, czas T=5s. Błąd liczony jako odchylenie od ciągłej implementacji (T_s = 1 ms).

-0.20.250.71.151.6012345ciągły (T_s = 1 ms)Euler @ T_s = 0.050sTustin @ T_s = 0.050st [s]y-52.51017.525012345u — Euleru — Tustint [s]u

Trzy klasyczne sposoby dyskretyzacji członów PID:

Euler forward:Ik+1=Ik+ekTs,Dk=ekek1Ts\textbf{Euler forward:}\quad I_{k+1} = I_k + e_k\cdot T_s, \quad D_k = \frac{e_k - e_{k-1}}{T_s}
Tustin (bilinear):Ik+1=Ik+ek+ek12Ts\textbf{Tustin (bilinear):}\quad I_{k+1} = I_k + \tfrac{e_k + e_{k-1}}{2}\cdot T_s
ZOH (Zero-Order Hold):    Gd(z)=(1z1)Z ⁣{G(s)s}\textbf{ZOH (Zero-Order Hold):}\;\; G_d(z) = (1 - z^{-1})\,\mathcal{Z}\!\left\{\frac{G(s)}{s}\right\}

Euler jest najprostszy ale niedokładny — jego mapa s-plane → z-plane to z=1+sTsz = 1 + s T_s, która nie zachowuje stabilności (bieguny stabilne ciągłe mogą wpaść na zewnątrz koła jednostkowego dla dużych TsT_s).

Tustin (bilinear/trapezoidal) używa mapy z=(1+sTs/2)/(1sTs/2)z = (1 + sT_s/2)/(1 - sT_s/2) — zachowuje stabilność i jest dokładniejszy 2. rzędu w T_s. Najczęściej stosowany w praktyce.

ZOH jest dokładnym ekwiwalentem dla planta sterowanego ZOH-em (czyli „typowego" embedded). Dla regulatora obliczeniowo droższy bo wymaga transformaty Z całego planta.

Spróbuj: T_s = 0.005 s — wszystkie 3 metody praktycznie identyczne. T_s = 0.1 s — Euler już widocznie odbiega. T_s = 0.2 s — Euler może wręcz destabilizować pętlę. Tustin trzyma się znacznie lepiej.

5. Kwantyzacja — wpływ rozdzielczości

Analogia. Mierzysz temperaturę termometrem z dokładnością do 0.5°C. Twoje pomiary nigdy nie są dokładne — zawsze zaokrąglone do najbliższej kreski. Sterowanie oparte na takich pomiarach też ma swoje granice precyzji. To samo dla rozdzielczości DAC sterowania.

Komputer pracuje na liczbach skończonej precyzji:

  • ADC (analog-to-digital, na pomiarze) — np. 12-bit → 4096 poziomów. Najczęstsze rozdzielczości: 10, 12, 16, 24 bity.
  • DAC (digital-to-analog, na sterowaniu) — podobne wartości. Kwantyzacja sterowania bezpośrednio wpływa na trajektorię.
  • Wewnętrzna arytmetyka — float32, float64, fixed-point. Wpływa na akumulację błędów w integratorze.

Efekty kwantyzacji

  1. Limit cycles — drobne oscylacje wokół punktu pracy, bo regulator nie umie zaproponować idealnej wartości sterowania. Dla układu LTI z kwantyzacją w pętli może powstać self-oscylacja.
  2. Steady-state offset — gdy idealne sterowanie ustalone jest między dwoma poziomami DAC.
  3. Numerical drift — integrator akumulujący drobne błędy float może odjechać po wielu godzinach.

Reguły kciuka: ADC powinien mieć rozdzielczość co najmniej 10× większą niż wymagana precyzja regulacji. DAC podobnie. Sygnały krytyczne (np. moment silnika) — fixed-point 32-bit lub float64.

6. Wybór częstotliwości próbkowania w praktyce

Wytyczne projektowe:

Reguła z domeny czasu

T_s powinno być znacznie mniejsze od dominującej stałej czasowej planta:

Tsτplant/10(minimum)   do   τplant/100(komfort).T_s \lesssim \tau_{plant}/10 \quad (\text{minimum}) \;\text{ do }\; \tau_{plant}/100 \quad (\text{komfort}).

Dla planta z τ = 1 s (np. silnik DC z bezwładnością) ⇒ T_s ≈ 10–100 ms. Dla planta z τ = 10 ms (szybki silnik) ⇒ T_s ≈ 0.1–1 ms.

Reguła z domeny częstotliwości

T_s wyznaczone przez pożądane pasmo regulatora:

fs10fbandwidth.f_s \gtrsim 10 \cdot f_{bandwidth}.

Regulator z pasmem 10 Hz ⇒ f_s ≈ 100 Hz, T_s ≈ 10 ms.

Reguła z punktu widzenia szumu

Jeśli szum pomiarowy ma znaczące widmo do f_n, wymagane próbkowanie f_s ≥ 2·f_n (Nyquist). Inaczej szum będzie aliasingowany do pasma roboczego.Anti-aliasing filter analogowyjest często koniecznością — odcina pasma > f_s/2 przed próbkowaniem.

Tradeoff szybkość vs koszt

Zwiększenie f_s → szybszy procesor wymagany, więcej przerwań, większy pobór mocy w embedded. Bardzo wysokie f_s (1 MHz dla power electronics) wymagają dedykowanego sprzętu (FPGA, DSP).

Typowe częstotliwości w przemyśle

  • Procesowe (temperatura, ciśnienie): f_s = 0.1–10 Hz (sekundy do dziesiątek minut). Plant bardzo wolny.
  • Sterowanie silnikami (prędkość): f_s = 100–1000 Hz.
  • Pozycjonowanie precyzyjne (CNC, druk 3D): f_s = 1–10 kHz.
  • Power electronics (PWM, inwertery): f_s = 10–100 kHz.
  • Audio i wibroakustyka: f_s = 44.1–192 kHz.

7. Specyfika implementacji embedded

Praktyczne pułapki dyskretnej implementacji, na które warto uważać:

Determinizm czasowy

Każdy krok regulatora musi zakończyć się przed kolejnym próbkowaniem. Algorytmy o niedeterministycznym czasie (alokacja pamięci, GC, dynamic dispatching) są wykluczone w real-time. Embedded code: statyczna alokacja, brak wskaźników, deterministyczne pętle.

Float vs fixed-point

MCU bez FPU (np. Cortex-M0) wykonuje float bardzo wolno. Dla szybkich pętli (PWM 100 kHz) stosuje się Q15 lub Q31 fixed-point. Trzeba uważać na overflow przy akumulacji całek.

Wind-up integratora przy zmianie trybu

Gdy regulator przełącza się między trybami (manual ↔ automatyczny, różne setpointy), integrator musi być bumpless — żadnych skoków u. Klasyczna technika: bumpless transfer z back-calculation albo resetowanie integratora do wartości aktualnego u.

Watchdogi i fail-safe

Gdy regulator zawiesza się (bug, freeze procesora), plant musi przejść w stan bezpieczny. Sprzętowy watchdog timer resetuje sterowanie do u = 0 (lub innej bezpiecznej wartości) gdy regulator nie odświeży go w terminie.

Skalowanie i przemienność

Algorytm zaprojektowany w SI musi działać też w jednostkach urządzenia: pozycja w „krokach enkodera", a nie metrach; moment w „PWM duty cycle %", a nie N·m. Stałe konwersji powinny być w jednym miejscu kodu, łatwo wymienne.

Logging dla debugu

Embedded debugging jest trudny: log bufor cykliczny, transmitancja przez UART, semihosting. Logowanie wszystkich istotnych sygnałów (e, u, I, D, y_meas, y_filtered) jest warte początkowej inwestycji.

Pełne traktowanie: Åström & Wittenmark „Computer-Controlled Systems" (3rd ed., 1997) — kanon dyskretnej automatyki. Embedded-specific: Tilbury & Brogan „Adaptive Control for Real-Time Industrial Applications".

Co świadomie pomijam

  • Bezpośrednia synteza w domenie Z — projekt regulatora bezpośrednio z dyskretnego modelu plant, bez przechodzenia przez ciągłą domenę. Klasyczna metoda dla specyficznych zastosowań (kontrola wibracji, dead-beat control).
  • Multi-rate systems — pętle wewnętrzne (prąd silnika 10 kHz) i zewnętrzne (pozycja 1 kHz) z różnymi T_s. Standardowe w industrial drives.
  • Networked control — pomiary i sterowanie przez sieć z opóźnieniami i zgubionymi pakietami. Aktywne obszar badawczy.
  • Event-triggered control — zamiast okresowego T_s, regulator aktualizuje się tylko gdy stan wyjdzie poza zadane progi. Oszczędne dla rozproszonych systemów.