Skrypt demonstruje zachowanie sygnałów sinusoidalnych w różnych scenariuszach częstotliwościowych — stałej częstotliwości, liniowej modulacji częstotliwości (chirp), skoków częstotliwości z i bez artefaktów cyfrowych. Celem jest pokazanie problemów stabilności i jakości dźwięku w cyfrowych oscylatorach oraz przedstawienie rozwiązania opatentowanego stabilizującego amplitudę podczas nagłych zmian częstotliwości.
Co jest pokazane:
Klasyczna sinusoidalna fala o częstotliwości $f = 440 \,\mathrm{Hz}$ (ton a’ z muzyki) generowana na cztery pełne okresy.
Matematyka:
\[x(t) = \sin(2\pi f t), \quad f = 440\,\mathrm{Hz}, \quad t \in \left[0, \frac{4}{f}\right]\]Cel:
Pokazanie idealnej, stabilnej sinusoidy bez modulacji.
Co jest pokazane:
Sinusoida o częstotliwości zmieniającej się liniowo w czasie od $f_0 = 200\, \mathrm{Hz}$ do $f_1 = 1000\, \mathrm{Hz}$ w czasie $T = 0.015\, \mathrm{s}$.
Matematyka:
\[f(t) = f_0 + k t, \quad k = \frac{f_1 - f_0}{T}\] \[\varphi(t) = 2\pi \int_0^t f(\tau)\,d\tau = 2\pi \left(f_0 t + \frac{1}{2} k t^2\right)\] \[x(t) = \sin(\varphi(t))\]Cel:
Pokazanie efektu modulacji częstotliwości (FM) w czasie rzeczywistym.
Co jest pokazane:
Sygnał sinusoidalny, w którym częstotliwość skacze nagle z 330 Hz do 550 Hz, co powoduje niestabilność amplitudy.
Opis problemu:
Klasyczne oscylatory cyfrowe nie kompensują zmiany fazy, przez co pojawiają się zakłócenia.
Opis algorytmu:
Stabilizacja amplitudy podczas zmiany częstotliwości za pomocą wzmacniania zmiennej stanu i ograniczania amplitudy.
Algorytm:
\[\begin{aligned} \mathrm{VAR1}_{n} &= \mathrm{VAR1}_{n-1} - F^2 \cdot \mathrm{VAR2}_{n-1} \\ \mathrm{VAR2}_{n} &= \mathrm{VAR2}_{n-1} \cdot (1 + \varepsilon) + \mathrm{VAR1}_{n} \end{aligned}\] \[\mathrm{VAR1} = \mathrm{clip}(\mathrm{VAR1}, -1, 1)\] \[F = 2 \sin\left(\frac{\pi f}{f_s}\right)\]Oscylator generuje sinusoidy poprzez dwie zmienne stanu i iteracyjne aktualizacje. Zapewnia stabilność amplitudy nawet przy skokowych zmianach częstotliwości.