Једног дана сам схватио да је само софтвер постао механички. Развио сам укус за једноставност и проблеми су почели да постају мање попут искустава учења, а претворили су се у механичке вежбе које су више личиле на посао него на право истраживање. Схватио сам да увек радим апстрактно. Скренуо сам, наравно. Добио сам више сертификата за сајбер безбедност/пентестинг, и наравно да је то било интересантно. Али, на крају није задовољило ту потребу. Схватио сам да морам да почнем да додирујем физички свет. Интеракција са физичким феноменима. Тако сам почео да градим ЕЛИ (интерфејс за електромагнетно тражење). Почевши са РФ, ДСП, једначинама, шумом, Распберри Пи са СДР-овима. То је стрмо брдо на врху, а ја сам на дну дубоке рупе. Ови чланци служе као начин да метаболишем и покушам да објасним концепте које научим на свом путовању. Јер, ако могу да објасним оно што научим, већа је шанса да ће остати. Књига коју тренутно користим је "Understand Digital Signal Processing" Ричарда Лајонса. Добра је књига и уживам у њој. Покушаћу да идем поглавље по поглавље да објасним концепте и оно што научим. Ово више постоји као медијум да принудим себе да пређем своје т-ове и тачкам своје и-је на свом путу учења. Са овом серијом, кодираћу оно што је потребно у уграђеним блоковима кода или када је напредно, обезбедити репо. Кодирам у Русту. С тим, хајде да почнемо. Дискретни низови и нотација : независна временска променљива која је квантована тако да је вредност сигнала позната само у дискретним тренуцима. дискретни временски сигнал Дакле, шта је ? Па, јасно можемо рећи да је то нешто што је одвојено на појединачне делове уместо да буде континуирано. дискретно Дакле, је само континуирани сигнал који се дефинише у одређеном тренутку. дискретни временски сигнал Шта је са ? Прилично заокруживање мерења на најближу вредност коју ваш систем може да измери. квантованим Дакле, састављен је само уклапање делова континуираног сигнала у места где ваш систем може да га измери. Као и многи академски термини, то је заиста фини термин за прилично једноставну идеју. дискретни временски сигнал Да видимо како то изгледа: Континуирана линија је аналогна, течна је, нема крај ни почетак. Тачке и линије представљају дискретне делове те линије које систем може да измери и разуме. Зашто нам је ово потребно? Па, рачунари морају да узимају узорке у редовним интервалима, тс секунди (с означава амплитуду, а т представља узорак). Како овакав тип једначине изгледа на папиру? Хајде да ово разбијемо: - вредност континуираног сигнала измерена у тренутку ( је број узорака) x[n] н н - фреквенција f0 - фреквенција узорковања fs Веома је једноставно. Дакле, да преведемо ово у код (rust) да бисмо у потпуности разумели: 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); } Нотација је заиста препрека. Фреквенцијски домен Изнад, континуирана аналогна линија и дискретне тачке су живеле у временском домену. Сада би требало да истражимо . фреквенцијски домен Погледајмо репрезентацију: Одвојимо ове доме дефинитивно: временски домен: ? шта сигнал ради током времена фреквенцијски домен: које фреквенције постоје у сигналу и колико су јаке? У овом тренутку требало би да разликујемо амплитуду и величину: амплитуда: колико је променљива далеко и у ком смеру од нуле величина колико је променљива далеко од нуле Разлика је у томе што амплитуда може бити негативна или позитивна, а величина увек позитивна. Графикони фреквенцијског домена су изузетно корисни јер нам јасно говоре шта постоји и колико је . моћно Блок дијаграми Блок дијаграм је једноставан визуелни начин за описивање како сигнал пролази кроз систем. Сваки блок представља операцију изведену на сигналу, а стрелице показују како сигнал тече од једног корака до другог. ДСП блок обично укључује три ствари: сигнали (подаци који пролазе) блокови (примењене операције) стрелице (смер којим се сигнал креће) Репрезентација Желим да напоменем да ћете у типичном блоку сумирања видети следеће: Симбол Σ (сигма) означава 'сума' у математичкој нотацији. Изгледа застрашујуће него што јесте, па да ово представимо у коду: 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); } Веома је једноставно. Опет, препрека су симболи. Када се преведе у код, заправо је веома једноставно. Дискретни линеарни системи непроменљиви у времену Дефинисали смо дискретно горе, па хајде да се позабавимо линеарношћу: Скаiliraње ради како очекујете скалирање улаза скалира излаз у истом износу. Сабирање улаза сабира излазе комбиновани улази = комбиновани излази на исти начин. Визуализујмо дискретни линеарни сигнал Системи непроменљиви у времену Систем непроменљив у времену је онај где одлагање/померање улаза изазива одговарајуће одлагање на излазу. Да бисмо приказали концепт, испод је визуелна репрезентација дискретног линеарног система непроменљивог у времену Дискретни линеарни системи непроменљиви у времену су важни јер се понашају предвидљиво. Будући да су линеарни, сигнали се могу скалирати/комбиновати без промене начина на који их систем обрађује. Непроменљивост у времену значи да систем може да реагује на исти начин, без обзира на време када се сигнал појави. Ове особине омогућавају да се комплексни сигнали разумеју као комбинација једноставнијих сигнала. Ово чини анализу и манипулацију алатима попут филтрирања и анализе фреквенција лакшим. С тим у вези, системи за обраду сигнала често показују . То значи да редослед одређених операција не мења резултат. комутативну особину : сабирање два сигнала даје исти излаз без обзира на то који је сигнал прво сабран. Иако се чини веома једноставним, омогућава инжењерима да преуреде делове система за обраду сигнала без промене исхода. Како систем расте у сложености, способност преуређивања операција постаје корисна за поједностављење анализе и ефикасну имплементацију. Пример Импулсни одзив Веома моћна идеја у ДСП-у је да се ЛТИ (линеарни систем непроменљив у времену) може у потпуности описати одзивом. Да бисмо га боље дефинисали, импулс је веома кратак скок који се користи за испитивање понашања система. импулсним Ако унесемо импулс у систем и видимо његов излаз, добијамо . Када се стекне, можемо утврдити како ће систем реаговати на сваки улазни сигнал. Одзиви система на појединачне импулсе могу се сабрати да би се добио коначни излаз. Математичка операција која обавља овај процес је . импулсни одзив конволуција Примери конволуције у стварном свету 1. Акустика собе Када инжењер звука жели да разуме како одређена соба утиче на звук, генерише оштар импулс (замислите пуцање балона, плеск шаком, стартер пиштољ ако имају дрскости). Тај ослобађање или импулс садржи енергију кроз широк спектар фреквенција. Микрофони широм собе снимају, а оштар импулс открива реверберацију, обрасце еха и фреквенцијску корелацију. Савремени софтвер за акустику често користи овај импулс за симулацију звука собе. 2. Машински инжењери Машински инжењери имају процес који се назива . Ако желе информације о томе како машина или структура вибрира, ударају је инструментираним чекићем да би испоручили оштар импулс. Причвршћени сензори на машини или структури мере импулсне вибрације. Импулсне вибрације откривају природну фреквенцију и карактеристике пригушења система, што инжењеру говори како ће систем деловати под бројним радним условима. модално тестирање 3. Електротехничари Електротехничари такође врше импулсни тест. Са аналогним колима, веома кратки напонски таласи се примењују на филтер или појачало где се излаз мери током времена. Резултатујући талас из овог импулса, ЕЕ могу да одреде како систем обрађује импулсе и које фреквенције појачава. Ово закључује прво поглавље учења и објашњавања. Много је, али полако постаје лакше. Када сам ово радио, схватио сам да заиста треба да ценим мале победе. Мали кликови разумевања. Нема брзих победа у учењу овога, и заиста захтева стрпљење. Иако захтева много труда, прављење ових чланака је одличан начин да метаболишем знање из поглавља и можда га поделим за људе који су радознали. Сумирање Ово није било све из првог поглавља, само концепти које сам сматрао важним. Ја сам огроман нооб у овоме, тако да ако имате исправке, апсолутно сте слободни да коментаришете и направићу исправке у чланку. Много овога је да покушам да учврстим своје разумевање пишући јавно, тако да имам мотивацију да не изгледам превише глупо. Само мало глупо. Наставићу да пишем кроз поглавља књиге јер ми је то од користи. Било би кул ако некоме ово буде корисно. Рећи ћу да је у овом процесу, мале победе су кључне. Процес је спор, али ти мали кликови разумевања су мала награда док се пењем узбрдо. Све ово је само интринзична мотивација за примењено знање, да стекнем више вештина, да боље разумем свет. На крају крајева, понекад је то најодржавија мотивација.