Op een dag realiseerde ik me dat software alleen mechanisch werd. Ik ontwikkelde een voorliefde voor eenvoud en problemen werden minder leerervaringen en meer mechanische oefeningen die meer op druk werk leken dan op echte verkenning. Ik realiseerde me dat ik altijd in het abstracte werkte. Ik nam omwegen, zeker. Ik behaalde meerdere certificeringen in cyberbeveiliging/pentesting, en het was interessant. Maar uiteindelijk kietelde het de jeuk niet. Ik realiseerde me dat ik de fysieke wereld moest gaan aanraken. Interactie met fysieke verschijnselen. Dus begon ik met het bouwen van ELI (elektromagnetische opzoekinterface). Begin met RF, DSP, vergelijkingen, ruis, Raspberry Pi's met SDR's. Het is een steile heuvel aan de top en ik sta onderaan een diep gat. Deze artikelen dienen als een manier voor mij om de concepten die ik leer op mijn reis te metaboliseren en te proberen uit te leggen. Want als ik kan uitleggen wat ik leer, is de kans groter dat het blijft hangen. Het boek waaruit ik momenteel werk, is "Understand Digital Signal Processing" van Richard Lyons. Het is een goed boek en ik geniet ervan. Ik zal proberen hoofdstuk per hoofdstuk concepten uit te leggen en wat ik leer. Dit bestaat meer als een medium om mezelf te dwingen mijn kruisjes op de 'i's te zetten en puntjes op de 'i's in mijn leerproces. Met deze serie zal ik de benodigde code schrijven met inline codeblokken of, indien geavanceerd, een repo verstrekken. Ik codeer in Rust. Daarmee, laten we beginnen. Discrete reeksen en notatie : een onafhankelijke tijdsveranderlijke die zo gekwantiseerd is dat een signaalwaarde alleen in discrete instanties bekend is. discreet tijdsignaal Dus, wat is ? Welnu, we kunnen eenvoudigweg zeggen dat het iets is dat in afzonderlijke stukken is verdeeld in plaats van continu te zijn. discreet Een is dus gewoon een continu signaal dat op een specifiek moment wordt gedefinieerd. discreet tijdsignaal Hoe zit het met ? Vrijwel het afronden van een meting op de dichtstbijzijnde waarde die uw systeem kan meten. gekwantiseerd Dus samengevat is een gewoon het passen van stukken van een continu signaal in plaatsen waar uw systeem het kan meten. Zoals veel academische terminologie, is het een erg chique klinkende term voor een vrij eenvoudig idee. discreet tijdsignaal Laten we het visualiseren: De continue lijn is analoog, is vloeiend, heeft geen stop of einde. De stippen en lijnen vertegenwoordigen discrete delen van die lijn die een systeem kan meten en begrijpen. Waarom moeten we dit doen? Welnu, computers moeten met regelmatige tussenpozen samplen, ts seconden (de s staat voor sampling en t vertegenwoordigt de bemonsterde periode). Hoe ziet zo'n vergelijking er op papier uit? Laten we dit opsplitsen: - de waarde van het continue signaal gemeten op tijdstip ( zijnde het bemonsterde getal) x[n] n n - de frequentie f0 - bemonsteringsfrequentie fs Het is heel eenvoudig. Laten we dit omzetten naar code (rust) om het punt te benadrukken: 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); } Notatie is echt de barrière. Frequentiedomein Boven leefden de continue analoge lijn en de discrete punten in het tijdsdomein. Laten we nu het verkennen. frequentiedomein Laten we naar een weergave kijken: Laten we deze domeinen duidelijk scheiden: tijdsdomein: ? wat doet een signaal over tijd frequentiedomein: welke frequenties bestaan er binnen een signaal en hoe sterk zijn ze? Op dit punt moeten we amplitude en magnitude onderscheiden: amplitude: hoe ver en in welke richting een variabele van nul verwijderd is magnitude hoe ver een variabele van nul verwijderd is Het onderscheid zit in het feit dat amplitude negatief of positief kan zijn en magnitude altijd positief is. Grafieken van het frequentiedomein zijn uiterst nuttig omdat ze duidelijk vertellen wat er bestaat en hoe het is. krachtig Blokdiagrammen Een blokdiagram is een eenvoudige visuele manier om te beschrijven hoe een signaal door een systeem beweegt. Elk blok vertegenwoordigt een bewerking die op het signaal wordt uitgevoerd en de pijlen laten zien hoe het signaal van de ene stap naar de volgende stroomt. Een DSP-blok bevat doorgaans drie dingen: signalen (data die erdoorheen bewegen) blokken (toegepaste bewerkingen) pijlen (richting waarin het signaal beweegt) Representatie Ik wil opmerken dat u het volgende zult zien in het typische sommatieblok: Dat Σ-symbool (sigma) betekent 'som' in wiskundige notatie. Het ziet er intimiderender uit dan het is, dus laten we dit in code weergeven: 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); } Heel eenvoudig. Nogmaals, de barrière zijn de symbolen. Eenmaal in code, is het eigenlijk heel eenvoudig. Discrete lineaire tijdsinvariante systemen We hebben hierboven discreet gedefinieerd, dus laten we ons verdiepen in lineair: Schaalvergroting werkt zoals u zou verwachten het schalen van de invoer schaalt de uitvoer in dezelfde mate. Het optellen van inputs telt outputs op gecombineerde inputs = gecombineerde outputs op dezelfde manier. Laten we een discreet lineair signaal visualiseren Tijdsinvariante systemen Een tijdsinvariant systeem is een systeem waarbij een vertraging/verschuiving op de invoer een equivalente vertraging op de uitvoer veroorzaakt. Om het concept te tonen, volgt hieronder een visuele weergave van wat een discreet lineair tijdsinvariant systeem is Discrete lineaire tijdsinvariante systemen zijn belangrijk omdat ze voorspelbaar gedragen. Omdat ze lineair zijn, kunnen signalen worden geschaald/gecombineerd zonder de manier waarop het systeem ze verwerkt te veranderen. De tijdsinvariantie betekent dat een systeem op dezelfde manier kan reageren, ongeacht het tijdstip waarop het signaal verschijnt. Deze eigenschappen maken het mogelijk om complexe signalen te begrijpen als een combinatie van eenvoudigere signalen. Dit maakt analyse en manipulatie met tools zoals filtering en frequentieanalyse gemakkelijker. Daarmee vertonen signaalverwerkingssystemen vaak de . Dit betekent dat de volgorde van bepaalde bewerkingen het resultaat niet verandert. commutatieve eigenschap : het optellen van twee signalen produceert hetzelfde resultaat, ongeacht welk signaal eerst wordt opgeteld. Hoewel het heel eenvoudig lijkt, stelt het ingenieurs in staat om delen van het signaalverwerkingssysteem te herschikken zonder de uitkomst te veranderen. Naarmate een systeem complexer wordt, wordt het vermogen om bewerkingen te herschikken nuttig voor het vereenvoudigen van de analyse en het maken van efficiënte implementaties. Voorbeeld Impulsrespons Een zeer krachtig idee in DSP is dat een LTI (lineair tijdinvariant) systeem volledig kan worden beschreven door een respons. Om het beter te definiëren, is een impuls een zeer korte piek die wordt gebruikt om te onderzoeken hoe een systeem zich gedraagt. impuls Als we een impuls in een systeem voeren en de uitvoer ervan zien, krijgen we een . Eenmaal verkregen, kunnen we bepalen hoe een systeem zal reageren op elk ingangssignaal. De reacties van het systeem op individuele impulsen kunnen worden opgeteld om een uiteindelijke uitvoer te produceren. De wiskundige bewerking die dit proces uitvoert, is . impulsrespons convolutie Voorbeelden van echte convolutie 1. Kamerakoestiek Wanneer een geluidstechnicus wil begrijpen hoe een bepaalde kamer geluid beïnvloedt, genereert hij een scherpe impuls (denk aan een ballonknap, handklap, startpistool als ze de durf hebben). Die afgifte of impuls bevat energie over een breed scala aan frequenties. Microfoons in de kamer nemen op en de scherpe impuls onthult nagalm-, echo-patronen en frequentiecorrelatie. Moderne software voor akoestiek gebruikt deze impuls vaak om kamergeluid te simuleren. 2. Werktuigbouwkundigen Werktuigbouwkundigen hebben een proces genaamd . Als ze informatie willen over hoe een machine of structuur trilt, slaan ze erop met een instrumentele hamer om een scherpe impuls te leveren. Bevestigde sensoren aan de machine of structuur meten de impuls trillingen. De impuls trillingen onthullen de natuurlijke frequentie en dempingseigenschappen van een systeem, die een ingenieur vertellen hoe een systeem zich zal gedragen onder tal van bedrijfsomstandigheden. modale analyse 3. Elektrotechnici Elektrotechnici voeren ook een impulstest uit. Met analoge circuits worden zeer korte spanningspieken toegepast op een filter of versterker, waarbij de uitvoer over tijd wordt gemeten. De resulterende golfvorm van deze impuls, EE's kunnen bepalen hoe een systeem impulsen verwerkt en welke frequenties het versterkt. Dit sluit het eerste hoofdstuk van leren en uitleggen af. Het is veel, maar wordt langzaam gemakkelijker. Bij het doen hiervan realiseerde ik me dat ik echt de kleine overwinningen moest waarderen. De kleine klikjes van begrip. Er zijn geen snelle overwinningen bij het leren hiervan, en het vereist echt geduld. Hoewel het veel inspanning kost, is het maken van deze artikelen een geweldige manier voor mij om de kennis van het hoofdstuk te metaboliseren en het misschien te delen voor mensen die nieuwsgierig zijn. Samenvatting Dit was niet het hele eerste hoofdstuk, alleen de concepten die ik belangrijk vond. Ik ben hier een enorme beginner in, dus als je correcties hebt, mag je die 100% aanbrengen en zal ik de correcties aan het artikel aanbrengen. Veel hiervan is om te proberen mijn eigen begrip te verstevigen door publiekelijk te schrijven, zodat ik de motivatie heb om niet te dwaas te lijken. Slechts een beetje dwaas. Ik zal door de hoofdstukken van het boek blijven schrijven omdat ik het nuttig vind voor mezelf. Het zou cool zijn als iemand dit ook nuttig vindt. Ik zal zeggen dat in dit proces kleine overwinningen de sleutel zijn. Het proces is langzaam, maar die kleine klikjes van begrip zijn de kleine beloning terwijl ik bergopwaarts trek. Dit alles is gewoon een intrinsieke motivatie voor toegepaste kennis, om meer vaardigheden te verwerven, om de wereld beter te begrijpen. Uiteindelijk is dat soms de meest duurzame motivatie.