Jedného dňa som si uvedomil, že softvér sám osebe sa stal mechanickým. Získal som záľubu v jednoduchosti a problémy sa pre mňa stali menej o učení a viac o mechanických cvičeniach, ktoré pripomínali skôr zdĺhavú prácu než skutočné objavovanie. Uvedomil som si, že som vždy pracoval v abstraktnom svete. Síce som chodieval občas aj inými cestami, získal som viacero certifikátov z kybernetickej bezpečnosti/pentestingu, a bolo to zaujímavé. Nakoniec to však neuspokojilo moju túžbu. Uvedomil som si, že potrebujem začať sa dotýkať fyzického sveta. Interagovať s fyzikálnymi javmi. Preto som sa rozhodol začať stavať ELI (rozhranie na elektromagnetické vyhľadávanie). Začnem s RF, DSP, rovnicami, šumom, Raspberry Pi s SDR. Je to strmý kopec a ja som na dne hlbokej jamy. Tieto články slúžia ako spôsob, ako metabolizovať a pokúsiť sa vysvetliť koncepty, ktoré sa na svojej ceste učím. Pretože ak dokážem vysvetliť to, čo sa naučím, je väčšia šanca, že si to zapamätám. Kniha, z ktorej práve čerpám, je "Understand Digital Signal Processing" od Richarda Lyonsa. Je to dobrá kniha a baví ma. Pokúsim sa ísť kapitolu po kapitole, aby som vysvetlil koncepty a to, čo sa naučím. Toto slúži skôr ako médium, ktoré ma prinúti preškrtnúť si všetky "i" a prekrížiť všetky "t" na mojej učebnej ceste. V tejto sérii budem kódovať to, čo je potrebné, pomocou inline kódových blokov, alebo keď to bude pokročilé, poskytnem repozitár. Kódujem v jazyku Rust. S tým začnime. Diskrétne postupnosti a notácia : nezávislá časová premenná, ktorá je kvantovaná tak, že hodnota signálu je známa iba v diskrétnych okamihoch. diskrétny časový signál Čo je teda ? Nuž, jasne môžeme povedať, že je to niečo, čo je oddelené na jednotlivé časti namiesto toho, aby bolo spojité. diskrétne Takže je len spojitý signál definovaný v špecifickom okamihu. diskrétny časový signál A čo ? Je to v podstate zaokrúhľovanie merania na najbližšiu hodnotu, ktorú dokáže váš systém zmerať. kvantovaný Keď to spojíme, *diskrétny časový signál* je len prispôsobenie častí spojitého signálu do miest, kde ho váš systém dokáže merať. Ako väčšina akademickej terminológie, je to naozaj honosne znejúci termín pre pomerne jednoduchú myšlienku. Pozrime sa na vizualizáciu: Spojitá čiara je analógová, je plynulá, nemá koniec ani záver. Bodky a čiary predstavujú diskrétne časti tejto čiary, ktoré dokáže systém merať a pochopiť. Prečo to potrebujeme? Počítače potrebujú vzorkovať v pravidelných intervaloch, ts sekúnd (s znamená vzorkovanie a t predstavuje vzorkovaný periódu). Ako vyzerá takáto rovnica na papieri? Rozoberme si to: - hodnota spojitého signálu nameraná v čase ( je číslo vzorky) x[n] n n - frekvencia f0 - vzorkovacia frekvencia fs Je to veľmi priamočiare. Prejdime teda ku kódu (v Rust), aby sme si to poriadne ujasnili: use std::f64::consts::PI; fn main() { let f0 = 2.0; let fs = 12.0; let n_samples = 100; let mut signal = Vec::with_capacity(n_samples); for n in 0..n_samples { let n = n as f64; let sample = (2.0 * PI * f0 * n / fs).sin(); signal.push(sample); } println!("{:?}", signal); } Notácia je naozaj bariéra. Frekvenčná oblasť Vyššie, spojitá analógová čiara a diskrétne body žili v časovej oblasti. Teraz by sme mali preskúmať . frekvenčnú oblasť Pozrime sa na reprezentáciu: Rozdelme si tieto oblasti jasne: časová oblasť: čo robí signál v priebehu času? frekvenčná oblasť: aké frekvencie existujú v signáli a aká je ich sila? V tomto bode by sme mali rozlíšiť amplitúdu a veľkosť: amplitúda: ako ďaleko a akým smerom je premenná od nuly veľkosť ako ďaleko je premenná od nuly Rozdiel spočíva v tom, že amplitúda môže byť záporná alebo kladná, zatiaľ čo veľkosť je vždy kladná. Grafy frekvenčnej oblasti sú mimoriadne užitočné, pretože nám jasne hovoria, čo existuje a aké je to . silné Blokové diagramy Bloková schéma je jednoduchý vizuálny spôsob opisu toho, ako sa signál pohybuje systémom. Každý blok predstavuje operáciu vykonanú na signáli a šípky ukazujú, ako signál prúdi z jedného kroku do druhého. DSP blok zvyčajne obsahuje tri veci: signály (dáta, ktoré sa pohybujú) bloky (aplikované operácie) šípky (smer, ktorým sa signál pohybuje) Reprezentácia Chcem poznamenať, že v typickom bloku sčítania uvidíte: Symbol Σ (sigma) znamená v matematickej notácii "súčet". Vyzerá to desivejšie, než v skutočnosti je, takže si to reprezentujme v kóde: fn main() { let x1 = vec![1.0, 2.0, 3.0, 4.0]; let x2 = vec![0.5, 1.0, 1.5, 2.0]; let x3 = vec![2.0, 2.0, 2.0, 2.0]; let mut y = Vec::with_capacity(x1.len()); for n in 0..x1.len() { let y_n = x1[n] + x2[n] + x3[n]; y.push(y_n); } println!("y = {:?}", y); } Veľmi priamočiare. Opäť platí, že bariérou sú symboly. Keď sa to preloží do kódu, je to v skutočnosti veľmi priamočiare. Diskrétne lineárne časovo invariantné systémy Diskrétne sme už definovali, takže sa ponorme do lineárnosti: Škálovanie funguje tak, ako by ste očakávali škálovanie vstupu škáluje výstup v rovnakej miere. Sčítanie vstupov sčíta výstupy kombinované vstupy = kombinované výstupy rovnakým spôsobom. Vizualizujme si diskrétny lineárny signál Časovo invariantné systémy Časovo invariantný systém je taký, kde oneskorenie/posun na vstupe spôsobuje ekvivalentné oneskorenie na výstupe. Na ilustráciu konceptu nižšie uvádzame vizuálnu reprezentáciu diskrétneho lineárneho časovo invariantného systému Diskrétne lineárne časovo invariantné systémy sú dôležité, pretože sa správajú predvídateľne. Keďže sú lineárne, signály možno škálovať/kombinovať bez zmeny toho, ako ich systém spracováva. Časová invariantnosť znamená, že systém môže reagovať rovnako bez ohľadu na čas, kedy sa signál objaví. Tieto vlastnosti umožňujú pochopiť zložité signály ako kombináciu jednoduchších signálov. Vďaka tomu je analýza a manipulácia pomocou nástrojov ako filtrovanie a frekvenčná analýza jednoduchšia. So, systémy na spracovanie signálov často vykazujú . To znamená, že poradie určitých operácií nemení výsledok. komutatívnu vlastnosť : sčítanie dvoch signálov vedie k rovnakému výstupu bez ohľadu na to, ktorý signál je sčítaný ako prvý. Aj keď sa to zdá byť veľmi jednoduché, umožňuje to inžinierom preusporiadať časti systému spracovania signálov bez zmeny výsledku. Ako rastie zložitosť systému, možnosť preusporiadať operácie sa stáva užitočnou na zjednodušenie analýzy a efektívnu implementáciu. Príklad Impulzná odozva Veľmi silnou myšlienkou v DSP je, že LTI (lineárny časovo invariantný) systém je možné úplne opísať pomocou odzvy. Aby sme to lepšie definovali, impulz je veľmi krátky pík používaný na preskúmanie toho, ako systém funguje. impulznej Ak do systému vložíme impulz a sledujeme jeho výstup, získame . Keď ju získame, môžeme určiť, ako systém zareaguje na každý vstupný signál. Reakcie systému na jednotlivé impulzy možno sčítať, aby sa vytvoril konečný výstup. Matematická operácia, ktorá vykonáva tento proces, je . impulznú odozvu konvolúcia Príklady konvolúcie v reálnom svete 1. Akustika miestnosti Keď chce zvukový technik pochopiť, ako konkrétna miestnosť ovplyvňuje zvuk, generuje ostrý impulz (predstavte si prasknutie balóna, tlesknutie, štartovaciu pištoľ, ak majú tú odvahu). Tento výboj alebo impulz obsahuje energiu v širokom rozsahu frekvencií. Mikrofóny v celej miestnosti zaznamenávajú a ostrý impulz odhaľuje ozvenu, vzory ozvien a frekvenčnú koreláciu. Moderný softvér pre akustiku často používa tento impulz na simuláciu zvuku miestnosti. 2. Strojárski inžinieri Strojárski inžinieri majú proces nazývaný . Ak chcú informácie o tom, ako stroj alebo konštrukcia vibruje, udierajú do nej prístrojovým kladivom, aby dodali ostrý impulz. Pripojené senzory na stroji alebo konštrukcii merajú impulzné vibrácie. Impulzné vibrácie odhaľujú prirodzené frekvenčné a tlmiace charakteristiky systému, ktoré inžinierovi povedia, ako sa systém bude správať za rôznych prevádzkových podmienok. modálne testovanie 3. Elektrotechnici Elektrotechnici tiež vykonávajú impulzný test. Pri analógových obvodoch sa na filter alebo zosilňovač aplikujú veľmi krátke napäťové špičky, kde sa meria výstup v priebehu času. Z výsledného priebehu tohto impulzu môžu EE určiť, ako systém spracováva impulzy a ktoré frekvencie zosilňuje. Týmto sa končí prvá kapitola učenia a vysvetľovania. Je to veľa, ale pomaly sa to stáva ľahším. Pri tom som si uvedomil, že si naozaj musím ceniť malé víťazstvá. Malé kliknutia porozumenia. V tomto učení nie sú žiadne rýchle víťazstvá a naozaj to vyžaduje trpezlivosť. Aj keď je to veľa úsilia, vytváranie týchto článkov je pre mňa skvelý spôsob, ako metabolizovať vedomosti z kapitol a možno ich zdieľať pre ľudí, ktorí sú zvedaví. Zhrnutie Toto nebola celá prvá kapitola, len koncepty, ktoré som považoval za dôležité. Som v tom obrovský začiatočník, takže ak máte nejaké opravy, môžete slobodne komentovať a ja článok opravím. Veľa z toho je pokusom upevniť si vlastné porozumenie písaním verejne, aby som mal motiváciu nevyzerať príliš hlúpo. Len trochu hlúpo. Budem pokračovať v písaní cez kapitoly knihy, pretože mi to pripadá prospešné. Bolo by skvelé, keby to niekomu tiež pomohlo. Poviem, že v tomto procese sú malé víťazstvá kľúčové. Proces je pomalý, ale tieto malé kliknutia porozumenia sú malou odmenou, keď šliapem do kopca. To všetko je len vnútorná motivácia pre aplikované vedomosti, pre získanie väčších zručností, pre lepšie pochopenie sveta. Nakoniec je to niekedy tá najodolnejšia motivácia.