abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 04:55 | Zajímavý software

    Microsoft zveřejnil na GitHubu zdrojové kódy MS-DOSu 4.0 pod licencí MIT. Ve stejném repozitáři se nacházejí i před lety zveřejněné zdrojové k kódy MS-DOSu 1.25 a 2.0.

    Ladislav Hagara | Komentářů: 0
    včera 17:33 | Nová verze

    Canonical vydal (email, blog, YouTube) Ubuntu 24.04 LTS Noble Numbat. Přehled novinek v poznámkách k vydání a také příspěvcích na blogu: novinky v desktopu a novinky v bezpečnosti. Vydány byly také oficiální deriváty Edubuntu, Kubuntu, Lubuntu, Ubuntu Budgie, Ubuntu Cinnamon, Ubuntu Kylin, Ubuntu MATE, Ubuntu Studio, Ubuntu Unity a Xubuntu. Jedná se o 10. LTS verzi.

    Ladislav Hagara | Komentářů: 8
    včera 14:22 | Komunita

    Na YouTube je k dispozici videozáznam z včerejšího Czech Open Source Policy Forum 2024.

    Ladislav Hagara | Komentářů: 1
    včera 13:22 | Nová verze

    Fossil (Wikipedie) byl vydán ve verzi 2.24. Jedná se o distribuovaný systém správy verzí propojený se správou chyb, wiki stránek a blogů s integrovaným webovým rozhraním. Vše běží z jednoho jediného spustitelného souboru a uloženo je v SQLite databázi.

    Ladislav Hagara | Komentářů: 0
    včera 12:44 | Nová verze

    Byla vydána nová stabilní verze 6.7 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 124. Přehled novinek i s náhledy v příspěvku na blogu. Vypíchnout lze Spořič paměti (Memory Saver) automaticky hibernující karty, které nebyly nějakou dobu používány nebo vylepšené Odběry (Feed Reader).

    Ladislav Hagara | Komentářů: 0
    včera 04:55 | Nová verze

    OpenJS Foundation, oficiální projekt konsorcia Linux Foundation, oznámila vydání verze 22 otevřeného multiplatformního prostředí pro vývoj a běh síťových aplikací napsaných v JavaScriptu Node.js (Wikipedie). V říjnu se verze 22 stane novou aktivní LTS verzí. Podpora je plánována do dubna 2027.

    Ladislav Hagara | Komentářů: 0
    včera 04:22 | Nová verze

    Byla vydána verze 8.2 open source virtualizační platformy Proxmox VE (Proxmox Virtual Environment, Wikipedie) založené na Debianu. Přehled novinek v poznámkách k vydání a v informačním videu. Zdůrazněn je průvodce migrací hostů z VMware ESXi do Proxmoxu.

    Ladislav Hagara | Komentářů: 0
    včera 04:11 | Nová verze

    R (Wikipedie), programovací jazyk a prostředí určené pro statistickou analýzu dat a jejich grafické zobrazení, bylo vydáno ve verzi 4.4.0. Její kódové jméno je Puppy Cup.

    Ladislav Hagara | Komentářů: 0
    24.4. 22:44 | IT novinky

    IBM kupuje společnost HashiCorp (Terraform, Packer, Vault, Boundary, Consul, Nomad, Waypoint, Vagrant, …) za 6,4 miliardy dolarů, tj. 35 dolarů za akcii.

    Ladislav Hagara | Komentářů: 12
    24.4. 15:55 | Nová verze

    Byl vydán TrueNAS SCALE 24.04 “Dragonfish”. Přehled novinek této open source storage platformy postavené na Debianu v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    KDE Plasma 6
     (73%)
     (9%)
     (2%)
     (16%)
    Celkem 771 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

    DSP kuchařka: změna frekvence, filtrace, podvzorkování

    15.8.2021 02:36 | Přečteno: 3466× | Meteopress | Výběrový blog | poslední úprava: 15.8.2021 02:36

    V druhém díle DSP kuchařky se podíváme na posunutí signálu na jinou frekvenci a filtrování lowpass/bandpass filtrem.

    Rotátor a jeho numerický výpočet

    V předchozím příspěvku jsme viděli, že vzorečkem e-i*postupně_se_zvětšující_číslo vytvoříme bod rotující po jednotkové kružnici v komplexní rovině, čili signál na nějaké frekvenci. Počítat to ovšem z definice, tj. funkcí exp, není moc dobré:

    Jenom pro představu v jakých délkách sekvence se pohybujeme, tak pokud samplujete 10 MS/s (standardní hodnota u trošku lepších rádií) a běží to celý den, tak potřebujete bilion vzorků.

    Vyřešíme to tím, že zvoleným bodem budeme rotovat pomocí matice rotace, kterou si na začátku předpočítáme a pak už na ni nesáhneme. Případ pro matici 2x2 je na Wikipedii přímo rozepsán a vyžaduje 4 floatová násobení, 1 sčítání a 1 odčítání.

    Problém s opakovaným násobením nějakou maticí, přičemž výsledek má být vždycky jednotkový vektor (a mění se jenom jeho směr), je, že se vlivem nepřesností může tento vektor časem prodlužovat nebo zkracovat - spočítaná matice rotace může mít vlivem nepřesností třeba normu 0.99999 nebo 1.00001, takže vektor s každou iterací nepatrně natáhne nebo smrskne, a po výše zmíněném bilionu vzorků to naprosto ustřelí. Proto je potřeba vektor rotátoru občas normalizovat, tj. spočítat jeho skutečnou velikost a tou ho vydělit, čímž se z něj zase stane vektor jednotkový. V praxi se normalizuje každých 512 nebo 1024 vzorků.

    Ukážeme si výrobu rotároru pro frekvenci 0.95 radiánů na vzorek (tu jsem si vycucal z prstu a nechtěl jsem aby to bylo přesně 1, protože se třeba může zjistit, že sin(1) mají knihovny předpočítaný). Kód úmyslně nepoužívá komplexní aritmetiku, aby bylo vidět, co se skutečně počítá. A napsal jsem to v C, protože neumím Python/NumPy přesvědčit, aby počítalo v jednoduché přesnosti (ano, polím se dá nastavit dtype=float32, ale skalární operace se furt dělají v doublech). Nejdříve samotný kód v C:

    #include <stdio.h>
    #include <complex.h>
    #include <math.h>
    int main() {
      const int nsamples = 110000;
      const float freq = 0.95;
    
      // naivní implementace s exp
      FILE * ef = fopen("/fs/ef.cfile", "wb");
      for(int i = 0; i<nsamples; i++) {
        complex float result = cexpf(I * freq * i);
        fwrite_unlocked(&result, 8, 1, ef);
      }
      fclose(ef);
    
    
      // implementace s rotací pomocí předpočítaných hodnot
      FILE * mf = fopen("/fs/mf.cfile", "wb");
    
      float rot_cos = cosf(freq);
      float rot_sin = sinf(freq);
    
      float re = 1;
      float im = 0;
      for(int i = 0; i<nsamples; i++) {
        fwrite_unlocked(&re, 4, 1, mf);
        fwrite_unlocked(&im, 4, 1, mf);
    
        float re_new = re * rot_cos - im * rot_sin;
        float im_new = re * rot_sin + im * rot_cos;
    
        re = re_new;
        im = im_new;
    
        if(i % 10240 == 0 && i > 0) { // úmyslně hodně, aby bylo vidět, jak to diverguje
          float abs = hypotf(re, im);
          re = re/abs;
          im = im/abs;
        }
      }
      fclose(mf);
    }
    

    A vyhodnocení:

    #!/usr/bin/env python3
    
    import numpy as np
    import matplotlib.pyplot as plt
    
    rotator_from_exp = np.fromfile("/fs/ef.cfile", dtype=np.complex64)
    rotator_matmul = np.fromfile("/fs/mf.cfile", dtype=np.complex64)
    
    ax = plt.subplot(211)
    plt.title("Rozdíl fáze po sobě jdoucích vzorků")
    plt.plot(np.fmod(np.angle(rotator_from_exp[:-1]) - np.angle(rotator_from_exp[1:]) + np.pi, 2*np.pi) - np.pi, label="exp")
    plt.plot(np.fmod(np.angle(rotator_matmul[:-1]) - np.angle(rotator_matmul[1:]) + np.pi, 2*np.pi) - np.pi, label="matmul")
    plt.legend()
    
    plt.subplot(212, sharex = ax)
    plt.title("Absolutní hodnota (měla by být 1)")
    plt.plot(np.abs(rotator_from_exp))
    plt.plot(np.abs(rotator_matmul))
    
    plt.show()
    

    Vidíme, že fáze u naivního počítání začne být velmi brzy nepřesná. Oproti tomu rotátor s použitím matice diverguje v absolutní hodnotě - ale zde je schválně nastavená normalizace málo často, aby to bylo vidět. Zde ještě detail, na kterém je vidět, jak cexpf šumí:

    Chirp - vzorový signál

    Jako ukázkový signál si vygenerujeme chirp. Jde o signál s postupně rostoucí frekvencí a používá se jako nejjednodušší varianta rozprostřeného spektra. Jak na to? Výše jsme měli e-i*lineárně_se_zvětšující_číslo a byla to konstantní frekvence. Pokud budeme zvětšovat zvětšování toho čísla, bude se zvětšovat i frekvence. Nejjednodušší je i toto zvětšování dělat lineárně, čili to bude e-i*kvadraticky_se_zvětšující_číslo. Proto se tomu taky někdy říká signál s kvadratickou fází. Vyrobíme to takto:

    nsamples = 10240
    dphase = 15
    
    quadratic_ramp = np.linspace(-dphase, dphase, nsamples)**2
    
    df = quadratic_ramp[0] - quadratic_ramp[1]
    hbin = 256 - df * 512
    print("Frekvenční výchylka jednostranná: %f Hz; pro FFT velikosti 512 očekáváme %i. bin"%(df, hbin))
    
    chirp = np.exp(2*np.pi*1j*quadratic_ramp)
    

    Nakreslíme si waterfall jako minule (vyznačil jsem do něj středové osy a 211. bin, aby šlo porovnat, na jaké frekvenci to začíná a jakou jsme spočítali):

    Mimochodem zde by signál měl být dokonale čistý a tedy ty artefakty jsou asi artefakty vzniklé použitím okýnka.

    Změna fáze

    Fázi signálu posuneme vynásobením e-i*konstanta. Normálně bych to sem nedával, ale zrovna jsem to nedávno použil (poprvé) - debugoval jsem radar tak, že jsem koukal na odraz od vzdáleného kopce, a porovnával jsem ho s tím, co si myslím, že vysílám. Pokud to souhlasí, tak se tím ověří, že celá ta cesta (od vymyšlení signálu, přes jeho vygenerování, zesílení, odvysílání, putování atmosférou, odraz, přijetí, ofiltrování a analýzu) funguje. Ale signál samozřejmě přijde náhodně fázově posunutý - a aby to šlo porovnat, tak se musí posunout zpátky.

    otocenej = chirp * np.exp(-1j*0.95)

    Posunutí frekvence

    Další běžná operace je posunutí (změna) frekvence signálu. Provede se vynásobením (po složkách) s rotátorem. Já tady použiju adhoc vyrobený z definice, ale jak jsme psali výše, pro delší signály se to musí vygenerovat chytřeji. Takhle ho posuneme ve frekvenci o 0.95 radiánů na sample:

    freq=0.95
    posunutej = chirp * np.exp(1j*np.linspace(0, nsamples*freq, nsamples))

    Zkuste si, co se stane, když ho posunete o -1, o PI (wrapne se to), o 1000, o 100000000000 (zaokrouhlovací chyby se projeví i při počítání v doublech).

    Pokud chcete tohle dělat s delšími signály, doporučuji použít příslušnou funkci z Volku, jejich implementace je ručně vektorizována pomocí SSE a AVX instrukcí.

    Filtrace pomocí lowpass filtru

    Často je potřeba vybrat ze signálu oblast (ve frekvencích) od-do a zbytek potlačit. K tomu budeme potřebovat lowpass FIR filtr. To je pole koeficientů, se kterými se signál zkonvolvuje. Vyrobit se dá GNU Radiem, jak jsme řešili v článku o GNU Radiu, ale SciPy na to má taky funkci. První parametr říká délku filtru (čím delší, tím ostřejší bude mít filtr hrany, ale asi bude mít horší nějaké parametry co rozmazávají v čase a bude náročnější na vyhodnocení, zejména pokud se to nebude vyhodnocovat FFT jak je popsáno níže), druhý říká, kolik pásma se má propustit. Někdy je potřeba filtr speciálního tvaru (např. raised cosine), to pak záleží na konkrétní aplikaci.

    coeffs = scipy.signal.firwin(64, 0.1)

    Zkonvolvujeme ho se signálem:

    filtered = np.convolve(chirp, coeffs, "same")

    Protože možná není na první pohled vidět, jak funguje konvoluce komplexního a reálného filtru, tak to rozepíšu:

    filtered2 = np.convolve(np.real(chirp), coeffs, "same") + 1j * np.convolve(np.imag(chirp), coeffs, "same")
    print(np.allclose(filtered, filtered2))  # True

    tj. reálnou a imaginární složku natahujeme zcela nezávisle.

    Mód konvoluce (zde same) říká, co se má dělat na krajích, kde se signál a filtr plně nepřekrývají. same vrátí stejně dlouhý výstup jako je vstup, tj. jakoby tam vždycky nechá půlku té nevalidní oblasti. Pak ještě existuje valid (vrací kratší výstup, a to pouze data, kde došlo k plnému překryvu) a full (delší výstup, všude kde byl překryv nenulový).

    Někdy je potřeba nemít lowpass, ale vybrat si signál, který není na nulové frekvenci / není symetrický podle středu. Naštěstí filtr lze posouvat úplně stejně jako signál, a tak můžeme posunutím z lowpassu udělat bandpass. Takový filtr bude komplexní, filtry, které nejsou symetrické kolem nuly, musí být komplexní.

    coeffs_shifted = coeffs * np.exp(1j*np.linspace(0, len(coeffs)*0.95, len(coeffs)))
    filtered_shifted = np.convolve(chirp, coeffs_shifted, "same")

    Konvoluce pomocí FFT s využitím věty o konvoluci

    Konvoluce může být poměrně pomalá: v každém bodě výstupního signálu musíte provést tolik násobení, kolik je délka filtru. Pokud je navíc filtr komplexní (bandpass z předchozí kapitoly), tak jsou i tato násobení komplexní. Pro dlouhé filtry, které mohou mít třeba 1500 tapů, je to tak obtížně použitelné. Nyní se dostáváme k tomu, co jsem zmínil v předchozím díle: problém přeformulujeme tak, aby šlo aplikovat FFT, provést nějaký rychlý výpočet, a aplikovat zpětnou FFT. A takové přeformulování konvoluce právě nabízí Věta o konvoluci. Říká, že konvoluci lze provést následujícím algoritmem:

    FFT má složitost NlogN a násobení po složkách má složitost N, zatímco konvoluce počítaná přímo ze vstupních dat měla složitost N*M (pro M=délka filtru). Pro dlouhé filtry a husté [ve smyslu dense = opak sparse] výstupy se to tak nejspíš vyplatí. Tady je implementace:

    # right-pad numpy array to size with zeros
    def padto(a, size):
      return np.pad(a, (0, size - len(a)), mode="constant")
    
    # velikost FFT, kterou budeme používat
    fftsize = 16*1024
    
    # FIR doplníme nulami na velikost FFT a ztransformujeme
    coeffs_shifted_padded = padto(coeffs_shifted, fftsize)
    coeffs_shifted_padded_fft = np.fft.fft(coeffs_shifted_padded)
    
    # signál doplníme nulami na velikost FFT a ztransformujeme
    chirp_padded = padto(chirp, fftsize)
    chirp_padded_fft = np.fft.fft(chirp_padded)
    
    # vynásobíme po složkách ztransformované
    convolved_fft = coeffs_shifted_padded_fft * chirp_padded_fft
    
    # ztransformujeme zpět
    convolved = np.fft.ifft(convolved_fft)
    
    # nyní máme výsledek dlouhý fftsize, ale jenom část z něj je "same" (resp. "valid"). Vybereme tuto část.
    convolved = convolved[len(coeffs)//2-1:len(chirp)+len(coeffs)//2-1]
    
    print(np.allclose(convolved, filtered_shifted)) # True
    

    Za povšimnutí stojí, že pokud aplikujeme stále stejný filtr na velké množství dat, tak nám ho stačí ztransformovat jen jednou na začátku a pak stále používat.

    Co dělat, když data zpracováváme proudově, případně jsou tak dlouhá, že nemůžeme udělat jednu velkou FFT? K tomu se používá metoda overlap add, která umožňuje zpracovávat pomocí malých transformací postupně. Bohužel jsem ji nikdy osobně neimplementoval, tak se neodvažuji ji předvádět.

    Decimace, podvzorkování (undersampling)

    Nyní nejspíš máme signál, který je ofiltrovaný, a v části jeho spektra tak nic není. Decimací, tedy vyházením některých vzorků, tak můžeme snížit jeho vzorkovací rychlost.

    Teď to asi bude trochu mlhavé, protože úplně nevím jak to vysvětlit textem (na tabuli to jde líp), ale pokusím se. Pointa je, že spektrum signálu je jakoby periodické, nekonečně se opakující, a těmto věcem mimo „hlavní“ interval od -fs/2 do fs/2 se někdy říká spektrální repliky. Je to vidět na této ilustraci z již odkazovaného článku:

    Nastavením vzorkovací frekvence jsme umístili značky na B/2, 3B/2, 5B/2 atd., kolem kterých se to neustále opakuje. Pokud vzorkovací frekvenci zvýšíme - tím, že mezi původní vzorky vložíme nuly - tak se nám jakoby zviditelní větší část tohoto myšleného spektra.

    Pokud naopak vzorkovací frekvenci snížíme - například výše jsem ponechal jenom 1 z každých 10 vzorků (decim = chirp[::10]) - tak se nám značky B/2, 3B/2 atd. přeskupí a spektrální repliky se přeskupí podle nich - a vše, co tam bylo původně, se zamíchá do sebe. V případě výše je to v pořádku, protože signál byl pásmově omezený (bandlimited) a nově vzniklý signál tak neobsahuje žádný nežádoucí zamíchaný bordel, ale třeba na obrázku níže je příklad, který téměř určitě nechcete, případně je to hezky ilustrované tady.

    Vybrání kanálu - možnosti

    Vše uvedené by se hodilo nějak shrnout, uvést typický příklad, k čemu to použít. Typicky tedy řešíte, že máte nějaký signál, a teď z něj chcete vybrat kanál, zbytek zahodit a zdecimovat to na rozumnou vzorkovací frekvenci. Jaké tedy máte možnosti?

           

    Hodnocení: 91 %

            špatnédobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    JiK avatar 15.8.2021 03:13 JiK | skóre: 13 | blog: Jirkoviny | Virginia
    Rozbalit Rozbalit vše Re: DSP kuchařka: změna frekvence, filtrace, podvzorkování
    jak ti houstne matematika, tak ti budou ridnout posluchaci a ctenari.
    Gréta avatar 15.8.2021 09:37 Gréta | skóre: 36 | blog: Grétin blogísek | 🇮🇱==❤️ , 🇵🇸==💩 , 🇪🇺==☭
    Rozbalit Rozbalit vše Re: DSP kuchařka: změna frekvence, filtrace, podvzorkování

    eště to +- de :D

    spíš víc by se hodilo mit ty skriptíky jakoby nějak rychle ke stažení git/zip/něco by se to nemuselo kopírovat :D ;D

    15.8.2021 11:42 Miriam | blog: RychlovarnaKonvice
    Rozbalit Rozbalit vše Re: DSP kuchařka: změna frekvence, filtrace, podvzorkování
    já tomu nerozumím a to je škoda :-( asi si to budu muset víc nastudovat
    15.8.2021 10:38 gsnak | skóre: 22 | blog: gsnak
    Rozbalit Rozbalit vše Re: DSP kuchařka: změna frekvence, filtrace, podvzorkování
    Toto je síce pekné ale ako vyrobím lacnú krabičku s jedným vstupom, jedným výstupom a 9V baterkou vnútri, zaujíma ma audio spektrum, tam asi python nepôjde.
    Čo Rys, to vrah!
    15.8.2021 13:40 trekker.dk | skóre: 72
    Rozbalit Rozbalit vše Re: DSP kuchařka: změna frekvence, filtrace, podvzorkování
    Máte pravdu. A dál?
    Quando omni flunkus moritati
    15.8.2021 13:59 ~
    Rozbalit Rozbalit vše Re: DSP kuchařka: změna frekvence, filtrace, podvzorkování
    co ti brani prepsat si to do rustu? neverim, ze bys o nem neslysel vzhledem k tomu ze to je nova odnoz vegansky sekty
    JiK avatar 15.8.2021 15:04 JiK | skóre: 13 | blog: Jirkoviny | Virginia
    Rozbalit Rozbalit vše Re: DSP kuchařka: změna frekvence, filtrace, podvzorkování
    Říká se, ze když se to přepíše do rustu tak prý už pak není potřeba ani ta 9V baterka do té jeho krabičky. :-)
    Jendа avatar 15.8.2021 17:32 Jendа | skóre: 78 | blog: Jenda | JO70FB
    Rozbalit Rozbalit vše Re: DSP kuchařka: změna frekvence, filtrace, podvzorkování
    Najdeš si implementaci FFT v jednom céčkovém souboru a budeš doufat, že to upočítáš na STM32 (ideálně ve fixed-point aritmetice, pokud to bude STM bez FPU). Zrovna jsem řešil, jestli takovou krabičku nepostavit, ale nechce se mi pálit čas kvůli neschopnosti státu.
    16.8.2021 10:13 trekker.dk | skóre: 72
    Rozbalit Rozbalit vše Re: DSP kuchařka: změna frekvence, filtrace, podvzorkování
    Odpověď "Chtělo by to opravdu kov.", když se mluví o hliníku, je lehce úsměvná...
    ale nechce se mi pálit čas kvůli neschopnosti státu
    Tak hlavně při té jízdě na červenou dejte pozor, abyste nevyhrál bouchalův pohár. Potichu jedoucí elektroauto je svině.
    Quando omni flunkus moritati
    JiK avatar 16.8.2021 14:39 JiK | skóre: 13 | blog: Jirkoviny | Virginia
    Rozbalit Rozbalit vše Re: DSP kuchařka: změna frekvence, filtrace, podvzorkování
    mam reseni. dej si za kolo vozik a na nej stary litinovy radiator. postaci prazdny, bez vody v nem. To bude jako blok motoru a smycka te detekuje :-)
    Gréta avatar 16.8.2021 18:10 Gréta | skóre: 36 | blog: Grétin blogísek | 🇮🇱==❤️ , 🇵🇸==💩 , 🇪🇺==☭
    Rozbalit Rozbalit vše Re: DSP kuchařka: změna frekvence, filtrace, podvzorkování
    20.8.2021 17:10 j
    Rozbalit Rozbalit vše Re: DSP kuchařka: změna frekvence, filtrace, podvzorkování
    Ehm, jenze ten semafor neni spatne nastavenej, ten je proste nefunkcni, protoze ten snimac muze fungovat maximalne jako doplnek, nikoli jako primarni zdroj informace. Takze ten smer by se mel v kazdym pripade rozsvecet v nejakym intervalu, bez ohledu na to jestli tam neco detekuje nebo ne.

    A to nemluvim o odbocovaci sipce, ta specielne v praglu snad nefunguje spravne nikde. Oni totiz soudruzi nevedi, ze se nemuze a NESMI zhasinat samostatne. Protoze pak zakonite projedes na cervenou, protoze nemas sanci zastavit (natoz bezpecne).

    ---

    Dete s tim guuglem dopice!
    16.8.2021 17:58 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: DSP kuchařka: změna frekvence, filtrace, podvzorkování
    Problém s opakovaným násobením nějakou maticí, přičemž výsledek má být vždycky jednotkový vektor (a mění se jenom jeho směr), je, že se vlivem nepřesností může tento vektor časem prodlužovat nebo zkracovat - spočítaná matice rotace může mít vlivem nepřesností třeba normu 0.99999 nebo 1.00001, takže vektor s každou iterací nepatrně natáhne nebo smrskne, a po výše zmíněném bilionu vzorků to naprosto ustřelí. Proto je potřeba vektor rotátoru občas normalizovat, tj. spočítat jeho skutečnou velikost a tou ho vydělit, čímž se z něj zase stane vektor jednotkový.

    Nemáme ale úplně stejný problém i s fází? Tak jako se mi norma nepřenásobí úplně přesně jedničkou, nebude ani úhel otočení úplně přesně takový, jaký jsem chtěl, a při opakovaném násobení se ty chyby budou taky kumulovat. Nebo to u fáze nevadí?

    Jendа avatar 16.8.2021 21:34 Jendа | skóre: 78 | blog: Jenda | JO70FB
    Rozbalit Rozbalit vše Re: DSP kuchařka: změna frekvence, filtrace, podvzorkování
    Alespoň já jsem zatím nikdy nepotřeboval, aby po X vzorcích bylo napočítáno ve fázi X*otočení_jednoho_vzorku.
    18.8.2021 08:00 ampersand
    Rozbalit Rozbalit vše Re: DSP kuchařka: změna frekvence, filtrace, podvzorkování
    Proč lžeš?
    Gréta avatar 18.8.2021 11:09 Gréta | skóre: 36 | blog: Grétin blogísek | 🇮🇱==❤️ , 🇵🇸==💩 , 🇪🇺==☭
    Rozbalit Rozbalit vše Re: DSP kuchařka: změna frekvence, filtrace, podvzorkování
    vencour avatar 19.8.2021 07:57 vencour | skóre: 56 | blog: Tady je Vencourovo | Praha+západní Čechy
    Rozbalit Rozbalit vše Re: DSP kuchařka: změna frekvence, filtrace, podvzorkování
    Aha. Teď mi došlo, že se píše o úpravě rozlišení (tj. převzorkování) za chodu. A že vlastně nevím, jaká citlivost na vstupu.
    Ok, jsme uprostřed děje, něco z toho vyleze a bude zřejmě vysvětleno.
    (A na DSP se ve volném čase taky podívám, co říkají nějaké podklady ...)
    Ty nejhlubší objevy nečekají nutně za příští hvězdou. Jsou uvnitř nás utkány do vláken, která nás spojují, nás všechny.
    Jendа avatar 21.8.2021 02:32 Jendа | skóre: 78 | blog: Jenda | JO70FB
    Rozbalit Rozbalit vše Re: DSP kuchařka: změna frekvence, filtrace, podvzorkování
    No… spíš nebude. Teda můžu pak dát nějaký díl s příklady, ale tohle jsou obecné postupy co aplikuješ na svůj specifický případ.
    A že vlastně nevím, jaká citlivost na vstupu.
    Může tam být šmejdské rtl-sdr nebo frontend magnetické rezonance za několik mega.
    19.8.2021 19:23 X
    Rozbalit Rozbalit vše Re: DSP kuchařka: změna frekvence, filtrace, podvzorkování
    Dalsi pecka. ale chtelo by to doplnit o prakticke pouziti, obrazky z HW, aby to nebyla jen teorie bez realneho ramce.
    20.12.2022 02:23 안전놀이터추천
    Rozbalit Rozbalit vše Re: DSP kuchařka: změna frekvence, filtrace, podvzorkování
    I came here after searching for 안전놀이터 to spend my time more efficiently after work. The content is not burdensome and the writing is easy to understand. Thank you so much for being able to spend meaningful time after work.

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.