Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Cyfrowa realizacja funkcji sinus - metody

cackoarek 09 Cze 2009 17:55 2323 3
  • #1 09 Cze 2009 17:55
    cackoarek
    Poziom 25  

    Witam

    Mam następujące pytanie:
    "Metody realizacji cyfrowej funkcji sinus"

    Do głowy przychodzą mi następujące pomysły:

    - tabelaryzacja sinusa za okres i przechowywanie go w pamięci (look-up tables)
    - aproksymacji wielomianem przy użyciu rozwinięcia w szereg Taylora lub McLarena

    Czy istnieją jakieś inne znane wam metody?

    Dodano po 55 [minuty]:

    OK. Sam sobie odpowiem :)
    1) Tablicowanie sinusa za okres i przechowywanie go w pamięci (look-up tables)
    2) Tablicowanie wartości względnych - (wartość kolejnej próbki obliczana na postawie poprzedniej)
    3) Obiekt na granicy stabilności $$G(s)=\frac{w}{s^2+w^2}$$
    4) Aproksymacja wielomianem

    0 3
  • Pomocny post
    #2 09 Cze 2009 18:46
    Quarz
    Poziom 43  

    Witaj,
    najprościej i realizowane w RT - w czasie rzeczywistym - to stablicowanie w pamięci nieulotnej - EPROM, itp. - o wyjściu równoległym (8, lub 16 bitów) poszczególnych reprezentacji binarnych wektorów wartości próbek sinusoidy dla bipolarnego przetwornika C/A i sterowanie równoległych wejść adresowych tej pamięci ze stosownego licznika binarnego.
    Poprzez zmianę wartości częstotliwości zegarowej licznika binarnego otrzymuje się proporcjonalną zmianę wartości częstotliwości wyjściowej.
    Natomiast zmianę amplitudy quasi-sinusoidalnego przebiegu wyjściowego można realizować niezależnie poprzez zmianę wartości napięcia odniesienia dla przetwornika C/A.

    Znany mi - od dawna - opis w literaturze to np. ten:
    Autorzy: Kaźmierkowski Marian, Mieczysław Nowak, Andrzej Wójciak,
    Tytuł: Urządzenia elektroniki przemysłowej
    Wydawnictwo: Warszawa, Wydawnictwa Komunikacji i Łączności, 1982.

    Pozdrawiam

    P.S. Podobny generator trójfazowy zaprojektowałem i wykonałem samodzielnie ok. roku 1973 jako sterownik do trójfazowego tyrystorowego falownika napięciowego z modulacją szerokości impulsu.

    0
  • #3 09 Cze 2009 18:54
    cackoarek
    Poziom 25  

    No tak. Logiczne.

    Quarz napisał:
    Autorzy: Kaźmierkowski Marian, Mieczysław Nowak, Andrzej Wójciak,
    Tytuł: Urządzenia elektroniki przemysłowej
    Wydawnictwo: Warszawa, Wydawnictwa Komunikacji i Łączności, 1982.

    Z dwoma pierwszymi nawet miałem zajęcia... :) Być może nawet zajrzę do tej literatury.

    Dzięki jeszcze raz.

    P.S. Fajnie, że wróciłeś.

    0
  • #4 09 Cze 2009 21:58
    Paweł Es.
    Pomocny dla użytkowników

    Zapis w EPROMIE 1/4 przebiegu sinusa (0 do Pi/2) i wykorzystanie symetrii tej funkcji dla oszczędności miejsca. (wymaga to jednak pewnych obliczeń)

    Generowanie przez odtwarzanie z pamięci ze zmienną prędkością odczytu raczej się nie stosuje, ze względu na konieczność realizacji strojonego filtru za przetwornikiem C/A dla uzyskania małych zniekształceń i usunięcia produktów próbkowania.

    Bardziej praktyczną metodą jest odtwarzanie zawartości pamięci ze stałą częstotliwością próbkowania ale ze zmiennym krokiem, np. odtwarzając co K-tą próbkę otrzymujemy K razy większą częstotliwość.

    $$fwy=K*\frac{fp}{N}$$

    fp - częstotliwość próbkowania
    N - długość tablicy sinusa
    K - poskok odczytu (przyrost fazy) K < N/2

    Wartość K nie musi być całkowita co pozwala uzyskać częstotliwości nie będące całkowitymi wielokrotnościami fp/N

    Po przekroczeniu granic tablicy obliczony jest zawijany do początku przez odjęcie długości tablicy.

    W takim przypadku są trzy wersje odczytu pamięci (jak wiadomo nie można czytać między komórkami).

    we wszystkich przypadkach faza jest liczona zmiennoprzecinkowo (z ułamkiem)

    a) wersja z obcinaniem ułamka fazy

    Wy=Tab_sin[Int(faza)] -------- Int(x) - część całkowita liczby

    b) wersja z zaokrąglaniem

    Wy=Tab_sin[Int(faza+0.5)]

    c) wersja z interpolacją liniową

    Adres=Int(faza)

    wsp=Frac(faza) ; część ułamkowa fazy <0;1)

    Wy=tab_sin[adres]+(tab_sin[adres+1]-tab_sin[adres])*wsp

    Ostatnia metoda daje najlepsze efekty ale wymaga mnożenia, wersje a i b różnią się nieznacznie odstępem sygnał/szum.

    W przypadku konieczności generowania bardzo czystego sygnału sinusoidalnego (np. do pomiaru parametrów torów akustycznych) o zmiennej częstotliwości stosuje się bardzo długie tablice funkcji sinus, np. 8kB lub 16kB co daje dużą czystość sinusoidy przy małym skoku cżestotliwości. Np. przy fp=48000 Hz i długości tablicy 16kB uzyskujemy skok częstotliwości strojenia 48000/16384=2,9296875 Hz

    0