PHP a formuláre. Rádio typu PHP a Forms Input získajú hodnotu php

  • 03.11.2019

Ako správne hľadať s google.com

Každý asi vie, ako používať vyhľadávač ako Google =) Nie každý však vie, že ak správne zostavíte vyhľadávací dopyt pomocou špeciálnych konštrukcií, môžete dosiahnuť výsledky, ktoré hľadáte, oveľa efektívnejšie a rýchlejšie =) V tomto článku som sa pokúsi ukázať, že a ako musíte urobiť správne vyhľadávanie

Google podporuje niekoľko pokročilých operátorov vyhľadávania, ktoré majú špeciálny význam pri vyhľadávaní na google.com. Tieto operátory zvyčajne upravia vyhľadávanie alebo dokonca prikážu Googlu, aby vykonal úplne iné typy vyhľadávania. Napríklad konštrukcia odkaz: je špeciálny operátor, a žiadosť odkaz: www.google.com vám neposkytne normálne vyhľadávanie, ale namiesto toho nájde všetky webové stránky, ktoré majú odkazy na google.com.
alternatívne typy žiadostí

vyrovnávacia pamäť: Ak do svojho dopytu zahrniete ďalšie slová, Google tieto zahrnuté slová zvýrazní v dokumente uloženom vo vyrovnávacej pamäti.
Napríklad, cache: www.webová stránka zobrazí obsah uložený vo vyrovnávacej pamäti so zvýrazneným slovom „web“.

odkaz: vyhľadávací dopyt uvedený vyššie zobrazí webové stránky, ktoré obsahujú odkazy na zadaný dopyt.
Napríklad: odkaz: www.stránka zobrazí všetky stránky, ktoré majú odkaz na http: //www.site

súvisiace: Zobrazuje webové stránky, ktoré „súvisia“ so zadanou webovou stránkou.
Napríklad, súvisiace: www.google.com zobrazí zoznam webových stránok, ktoré sú podobné domovskej stránke Google.

Info: Vyžiadať informácie: Poskytuje niektoré informácie, ktoré má Google o požadovanej webovej stránke.
Napríklad, info: webstránka zobrazí informácie o našom fóre =) (Armada - Fórum dospelých webmasterov).

Ďalšie žiadosti o informácie

definovať: Dotaz define: poskytne definíciu slov, ktoré zadáte potom, zostavenú z rôznych online zdrojov. Definícia bude pre celú zadanú frázu (to znamená, že bude zahŕňať všetky slová v presnom dopyte).

zásoby: Ak svoju požiadavku začnete akciami: Google bude so zvyškom podmienok požiadavky zaobchádzať ako so symbolmi burzy a bude odkazovať na stránku zobrazujúcu pripravené informácie pre tieto symboly.
Napríklad, akcie: Intel yahoo zobrazí informácie o Intel a Yahoo. (Upozorňujeme, že musíte zadať znaky najnovších správ, nie názov spoločnosti)

Modifikátory požiadaviek

lokalita: Ak do dopytu zahrniete site:, Google obmedzí výsledky na webové stránky, ktoré nájde v danej doméne.
Môžete tiež vyhľadávať jednotlivé zóny, ako napríklad ru, org, com atď ( stránka: com miesto: ru)

allintitle: Ak spustíte dopyt s allintitle :, Google obmedzí výsledky so všetkými slovami dopytu v hlavičke.
Napríklad, allintitle: vyhľadávanie google vráti všetky stránky vyhľadávania Google, ako sú obrázky, blog atď

názov: Ak vo svojej žiadosti uvediete intitle:, Google obmedzí výsledky na dokumenty obsahujúce toto slovo v názve.
Napríklad, názov: Obchod

allinurl: Ak spustíte dopyt s allinurl: Google obmedzí výsledky so všetkými slovami dopytu v adrese URL.
Napríklad, allinurl: vyhľadávanie Google vráti dokumenty pomocou google a vyhľadávania v hlavičke. Prípadne môžete slová oddeliť lomkou (/), potom sa slová na oboch stranách lomky budú hľadať na tej istej stránke: Príklad allinurl: foo / bar

inurl: Ak vo svojom dopyte zahrniete inurl:, Google obmedzí výsledky na dokumenty obsahujúce toto slovo v adrese URL.
Napríklad, Inurl animácie: webová stránka

intext: vyhľadáva zadané slovo iba v texte stránky, pričom ignoruje nadpis a text odkazov a ďalšie veci, ktoré s tým nesúvisia. Existuje aj derivát tohto modifikátora - allintext: tie. ďalej sa všetky slová v dopyte budú hľadať iba v texte, čo je tiež dôležité, ignorujúc často používané slová v odkazoch
Napríklad, intext: fórum

rozsah dátumov: vyhľadáva v časových rámcoch (daterange: 2452389-2452389), dátumy pre časy sú v juliánskom formáte.

No a všetky druhy zaujímavých príkladov žiadostí

Príklady písania dopytov pre Google. Pre spamerov

Inurl: control.guest? A = znamenie

Web: books.dreambook.com “Adresa URL domovskej stránky” “Podpísať” inurl: sign

Stránka: www.freegb.net Domovská stránka

Inurl: sign.asp “Počet znakov”

"Správa:" inurl: sign.cfm "Odosielateľ:"

Inurl: register.php “Registrácia užívateľa” “Webová stránka”

Inurl: edu / kniha návštev “Zapíšte sa do knihy návštev”

Inurl: príspevok „Uverejniť komentár“ „URL“

Inurl: / archívy / “Komentáre:” “Pamätať si info?”

“Scenár a knihu návštev vytvoril:” “URL:” “Komentáre:”

Inurl:? Action = pridať “phpBook” “URL”

Názov: „Odoslať nový príbeh“

Časopisy

Inurl: www.livejournal.com/users/ mode = odpoveď

Inurl greatjournal.com/ mode = odpoveď

Inurl: fastbb.ru/re.pl?

Inurl: fastbb.ru /re.pl? "Kniha návštev"

Blogy

Inurl: blogger.com/comment.g? „PostID“ „anonymný“

Inurl: typepad.com/ “Pridať komentár” “Pamätať si osobné informácie?”

Inurl: greatjournal.com/community/ “Uverejniť komentár” “adresy anonymných plagátov”

"Uverejniť komentár" "adresy anonymných plagátov" -

Intitle: "Uverejniť komentár"

Inurl: pirillo.com “Pridať komentár”

fóra

Inurl: gate.html? “Názov = Fórum” “režim = odpoveď”

Inurl: "forum / posting.php? Režim = odpoveď"

Inurl: "mes.php?"

Inurl: "members.html"

Inurl: forum / memberlist.php?

(PHP 4> = 4.3.0, PHP 5, PHP 7)

msg_receive - Prijať správu z frontu správ

Popis

msg_receive (zdroj $ front , int $ požadovanýmsgtype , int & $ msgtype , int $ maxsize , zmiešané& $ správa [, bool $ unserialize = PRAVDA [, int $ príznaky = 0 [, int & $ kód chyby]]]): bool

msg_receive () dostane prvú správu zo zadaného frontu typu určeného požadovaným typom správy.

Parametre

Popisovač prostriedku frontu správ

Desiredmsgtype

Ak je požadovanýmsgtype 0, vráti sa správa z prednej časti frontu. Ak je požadovanýmsgtype väčší ako 0, vráti sa prvá správa tohto typu. Ak je požadovanýmsgtype menší ako 0, prečíta sa prvá správa vo fronte s typom menším alebo rovným absolútnej hodnote požadovanéhomsgtype. Ak kritériám nevyhovujú žiadne správy, váš skript počká, kým do frontu nepríde vhodná správa. Blokovaniu skriptu môžete zabrániť zadaním MSG_IPC_NOWAIT v parametri flags.

Typ správy

V tomto parametri bude uložený typ prijatej správy.

Maximálna veľkosť

Maximálna veľkosť správy, ktorá sa má prijať, je určená hodnotou maxsize; ak je správa vo fronte väčšia ako táto veľkosť, funkcia zlyhá (pokiaľ nenastavíte príznaky, ako je popísané nižšie).

Správa

Prijatá správa bude uložená v správe, pokiaľ sa pri prijímaní správy nevyskytli chyby.

Zrušiť serializáciu

Ak je nastavené na PRAVDA správa sa spracováva tak, ako keby bola serializovaná pomocou rovnakého mechanizmu ako modul relácie. Správa bude zrušená zo serializácie a potom sa vráti do vášho skriptu. To vám umožňuje jednoducho prijímať polia alebo zložité štruktúry objektov z iných skriptov PHP, alebo ak používate serializátor WDDX, z akéhokoľvek zdroja kompatibilného s WDDX.

Ak je unserialize FALSE, správa sa vráti ako binárne bezpečný reťazec.

Voliteľné príznaky vám umožňujú odovzdať príznaky nízkoúrovňovému systémovému volaniu msgrcv. Predvolená hodnota je 0, ale môžete zadať jednu alebo viacero z nasledujúcich hodnôt (sčítaním alebo OR).

Označte hodnoty pre msg_receive
MSG_IPC_NOWAIT Ak neexistujú žiadne správy požadovaného typu správy, okamžite sa vráťte a nečakajte. Funkcia zlyhá a vráti celočíselné hodnoty zodpovedajúce MSG_ENOMSG.
MSG_EXCEPT Použitie tohto príznaku v kombinácii s požadovaným typom správy väčším ako 0 spôsobí, že funkcia prijme prvú správu, ktorá sa nerovná požadovanému typu správy.
MSG_NOERROR Ak je správa dlhšia ako maxsize, nastavením tohto príznaku sa správa skráti na maxsize a nebude signalizovať chybu.
kód chyby

Ak funkcia zlyhá, voliteľný kód chyby sa nastaví na hodnotu systémovej premennej errno.

Návratové hodnoty

Návraty PRAVDA na úspech resp FALSE pri neúspechu.

Po úspešnom dokončení sa štruktúra údajov frontu správ aktualizuje takto: msg_lrpid je nastavený na ID procesu volajúceho procesu, msg_qnum sa znižuje o 1 a msg_rtime je nastavený na aktuálny čas.

(PHP 4> = 4.3.0, PHP 5, PHP 7)

msg_receive - Načítanie správy z frontu správ

Popis

Bool msg_receive (zdroj $ front , int $ požadovanýmsgtype , int & $ msgtype , int $ maxsize , zmiešané& $ správa [, bool $ unserialize = PRAVDA [, int $ príznaky = 0 [, int & $ kód chyby ]]])

msg_receive () získa prvú správu z frontu správ s typom špecifikovaným v požadovanejmsgtype.

Zoznam parametrov

Desiredmsgtype

Ak je požadovanýmsgtype 0, vráti sa prvá správa vo fronte. Ak je požadovanýmsgtype väčší ako 0, vráti sa prvá správa so zadaným typom. Ak je požadovanýmsgtype menší ako 0, vráti sa prvá správa s typom menším alebo rovným modulom ako požadovanýmsgtype. Ak kritériám nezodpovedajú žiadne správy, váš skript počká, kým sa objavia vo fronte. Toto správanie môžete zmeniť zadaním MSG_IPC_NOWAIT v parametri flags.

Typ správy

Tento parameter ukladá typ prijatej správy.

Maximálna veľkosť

Maximálna veľkosť prijatej správy je špecifikovaná v maxsize; ak je správa vo fronte väčšia ako táto veľkosť, funkcia zlyhá (pokiaľ nenastavíte príznaky, ako je popísané nižšie).

Správa

Prijatá správa sa uloží do správy, ak sa pri prijatí nevyskytli žiadne chyby.

Zrušiť serializáciu

Ak je nainštalovaný v PRAVDA, správa sa považuje za serializovanú pomocou rovnakého mechanizmu ako v module relácií. Správa sa deserializuje a potom sa vráti do vášho skriptu. To vám umožňuje ľahko získať polia a zložité objekty z iných skriptov PHP alebo, ak používate serializátor WDDX, z akýchkoľvek zdrojov kompatibilných s WDDX.

Ak unserialize hovorí FALSE, správa sa vráti ako binárny bezpečný reťazec.

Voliteľný parameter flags vám umožňuje odovzdať príznaky nízkoúrovňovému systémovému volaniu msgrcv. V predvolenom nastavení je jeho hodnota 0, môžete však zadať jednu alebo viacero z nasledujúcich hodnôt (ich pridaním alebo vykonaním binárnej operácie OR).

kód chyby

Ak sa funkcia ukončí abnormálne, voliteľný parameter errorcode obsahuje hodnotu systémovej premennej errno.

Návratové hodnoty

Návraty PRAVDA pri úspešnom ukončení, príp FALSE v prípade chyby.

Po úspechu sa štruktúra údajov frontu správ aktualizuje takto: msg_lrpid obsahuje identifikátor volajúceho procesu, msg_qnum klesá o 1 a msg_rtime sa nastavuje podľa aktuálneho času.

24,6 tis

Pre nikoho nie je tajomstvom, že najbežnejším spôsobom interakcie html stránky s webom je formulár. Formulár (teda prvok html tvorený značkou formulára) využívajú aj bezplatné poštové služby, e-shopy a mnohé iné typy stránok.

Spracovanie jednoduchých formulárov pomocou PHP je jednoduché. Z času na čas však vzniká potreba spracovať formulár obsahujúci viacero polí rovnakého typu, navyše ich počet sa môže meniť v širokom rozmedzí a ich počet nie je vopred známy. PHP poskytuje pre takéto prípady spracovanie rovnakého typu polí ako pole hodnôt.


Pozrime sa podrobnejšie na možnosti pre rôzne typy polí.

Textové polia

Textové polia v tomto článku odkazujú na prvky vytvorené vstupnými značkami s parametrom typu text a značkou textarea. Najjednoduchšie je zorganizovať spracovanie formulára pozostávajúceho z niekoľkých takýchto polí. Nižšie uvedený zoznam zobrazuje zoznam s html označením pre takýto formulár.






Ako môžete vidieť z výpisu, názvy prvkov formulára sú z pohľadu PHP prvkami poľa. Preto PHP skript, ktorý spracuje tento formulár, bude považovať celú množinu textových polí v tomto formulári za jedno pole. Na jednotlivé prvky možno odkazovať pomocou indexu alebo ich vymenovať pomocou zoznamu a jednotlivých príkazov, ako v nasledujúcom príklade.

n ";?>

Prepínače

Začiarkavacie políčka v tomto článku sú prvky vytvorené vstupnými značkami s parametrom typu rovným checkboxu. Formulár na používanie premenlivého počtu „prepínačov“ je zostavený úplne rovnako. Upozorňujeme, že výber konkrétnej hodnoty prepínača (teda hodnoty vlastnosti value) nie je dôležitý. Príklad je uvedený v zozname nižšie:






Spracovanie takéhoto formulára sa však líši od spracovania opísaného pre textové polia. V tomto prípade je potrebné zistiť, či návštevník stránky zapol alebo nezapol ten či onen prepínač. Ak je povolené, potom zodpovedajúci prvok poľa existuje, ak nie, potom chýba. Nasledujúci zoznam zobrazuje príklad PHP skriptu, ktorý vytlačí povolené prepínače:

Prepínače

Pred popisom spracovania prepínačov si musíte pamätať, ako fungujú. Podstatou prepínačov (prvkov vytvorených vstupnými tagmi s hodnotou parametra typu rovnajúcu sa rádiu) je, že výberom jedného tlačidla používateľ automaticky odznačí ďalšie tlačidlo z rovnakej množiny. Je veľmi jednoduché kombinovať tlačidlá do sady: všetky tlačidlá v súprave majú rovnaký názov.

Ale hodnoty (to znamená parametre hodnôt) tlačidiel v súprave sú odlišné. A hodnota vybraného tlačidla s názvom sady bude odoslaná na stránku. Rovnako ako v prípade textových polí a prepínačov musia byť názvy sád prepínačov v PHP naformátované ako názvy prvkov poľa. Príklad takéhoto formulára je uvedený v nasledujúcom zozname:

// prvá skupina tlačidiel
// druhá sada tlačidiel
// tretia sada tlačidiel

Spracovanie prepínačov kombinuje nápady pomocou textových polí aj prepínačov pri spracovaní. Ak autor html stránky nenastavil predvolenú hodnotu a používateľ nevybral konkrétne tlačidlo v skupine prepínačov, potom tento prvok nebude prítomný v poli (ako v prípade prepínačov).

Experimenty s kľúčenkou od auta a analyzátorom signálu baudline boli celkom zábavné (viac o tom v predchádzajúcom článku). Teraz sa pokúsime urobiť niečo vážnejšie, keď výstupný signál má pre nás veľkú hodnotu (signál z kľúčenky od auta nie je veľmi cenný, keďže po dekódovaní v skutočnosti dostaneme veľké náhodné číslo).

Experimenty s príveskom na kľúče od auta a analyzátorom signálu baudline boli celkom zábavné (viac o tom nájdete v). Teraz sa pokúsime urobiť niečo vážnejšie, keď výstupný signál má pre nás veľkú hodnotu (signál z kľúčenky od auta nie je veľmi cenný, keďže po dekódovaní v skutočnosti dostaneme veľké náhodné číslo).

V tomto experimente experimentálny vysielač pracuje na frekvencii 433 MHz na platforme Arduino, ktorá môže byť použitá na vytváranie interaktívnych elektronických objektov.

Obrázok 1: Experimentálny vysielač

Vieme, že signál sa prenáša na 433 MHz, takže signál zachytíme (pomocou HackRF) na 435 MHz:

$ hackrf_transfer -r 435MHz-ASK-HACKRF-CW-8M.iq -f 435000000 -s 8000000

Po načítaní výsledkov HackRF do analyzátora signálu Baudline (ako to urobiť, pozri predchádzajúci článok), dostaneme nasledovné:

Obrázok 2: Signál v analyzátore Baudline

Prijali sme prijateľný signál a teraz načítame tieto údaje do GNU Radio Companion (GRC).

GRC vám umožňuje vytvárať vývojové diagramy pomocou grafického rozhrania. Tieto bloky sa potom skompilujú do kódu pythonu a možno ich použiť nezávisle od GRC. To isté môžete dosiahnuť písaním kódu pomocou blokov GNU Radio, ale GRC obsahuje veľa užitočných funkcií a je jednoduchší pre nováčikov, s ktorými tiež počítam. Grafický shell GRC má však nevýhodu: niekedy môže byť ťažké nájsť požadovaný blok. V takom prípade ho skúste vyhľadať podľa názvu.

Prvým krokom je previesť súbor denníka HackRF do formátu čitateľného v GNU Radio. Protokoly HackRF sú údaje predstavujúce páry IQ, ktoré sú uložené ako 8-bitové celé čísla bez znamienka (viac informácií o IQ alebo kvadratúrnom vzorkovaní nájdete). Komponenty GNU Radio zvyčajne potrebujú komplexné údaje IQ, a preto musíme náš súbor previesť do tohto formátu (algoritmus je znázornený na obrázku nižšie):

Obrázok 3: Bloková schéma algoritmu konverzie signálu na formát pre GNU Radio

Po prvé, vývojový diagram používa štandardný komponent File Source na stiahnutie súboru. Blok UChar to Float potom konvertuje 8-bitové celé čísla bez znamienka na čísla s pohyblivou rádovou čiarkou. V bloku „Deinterleave“ sa celkový dátový tok (IQIQIQ) rozdelí do dvoch samostatných kanálov (I a Q), po ktorých sa opäť spoja, ale už vo formáte komplexného čísla (na tento účel slúži „Float to Používa sa komplexný" blok). Toto je formát, ktorý používa GNU Radio.

Po prechode blokom Add Const sú údaje vycentrované okolo 0 (keďže HackRF používa celé čísla bez znamienka v rozsahu 0 až 256, údaje sú vycentrované okolo 127). (Mal som to nahlásiť Mikovi Ossmanovi – ďalší veľmi dobrý dôvod na prihlásenie sa do HackRF na Kickstarteri – ak bude cieľ ambicióznejší, dostaneme videá kurzov na GNU Radio)

Najnovší blok „Throttle“ sa používa na kompresiu vzorkovacej frekvencie až na 8 MHz, aby systém využívajúci tento signál fungoval správne. Vo všeobecnosti som zistil, že má zmysel komprimovať vzorkovaciu frekvenciu signálu, pretože v opačnom prípade môže dôjsť k náhodným interakciám medzi vzorkovacou frekvenciou a šírkou pásma signálu (v prípade IQ dát súvisí vzorkovacia frekvencia a šírka pásma signálu).

Stupeň kompresie využíva premennú throttle_rate (úplný vrchol blokovej schémy), ktorá vám umožňuje nastaviť frekvenciu pre rôzne signály. Tu nás čaká jedno prekvapenie: GRC nezobrazuje čísla vo formáte, v akom sa skutočne používajú! GRC akceptuje čísla v normálnom alebo vedeckom formáte (hexadecimálne, osmičkové alebo čokoľvek, čo Python podporuje), ale zobrazuje čísla vo formáte čitateľnom pre človeka (v tomto formáte nemôžete zadávať čísla). V našom prípade sú platné hodnoty 8000000 alebo 8e6, avšak 8M neplatí.

Teraz máme súbor nahraný v správnom formáte. Čo bude ďalej?

Prvým krokom je podrobnejšie študovať náš signál. Ihneď po kompresii signálu ho môžeme poslať do bloku s rýchlou Fourierovou transformáciou:

Obrázok 4: Parametre bloku FFT

Na výstupe prevodníka dostaneme nasledujúci signál:

Obrázok 5: Signál za prevodníkom

Na obrázku vyššie vidíme vrchol na frekvencii zachytávania (435 MHz) a časť prenášaného signálu okolo 433,8 MHz.

Teraz sa pozrime na nastavenia prevodníka. V predvolenom nastavení GNU Radio nevie nič o nosnej frekvencii (ak ju nešpecifikujete, táto frekvencia sa považuje za nulovú). V tomto prípade by samotný signál bol na frekvencii -1,2 MHz. To mi, samozrejme, nevyhovuje a odhalím skutočné hodnoty:

Obrázok 6: Parametre FFT prevodníka

Parametre vzorkovacia frekvencia a frekvencia základného pásma zodpovedajú premenným vzorkovacej frekvencie a zachytávacej frekvencie. Parameter "Sample Rate" sa musí zhodovať so vstupným signálom (v našom prípade je to 8MHz; hodnota, na ktorú sme komprimovali vzorku). V opačnom prípade nebude prevodník fungovať správne.

V GRC používame príslušné variabilné bloky:

Obrázok 7: Bloky s premennými

Keďže vieme, kde je náš signál, zachytenie sa uskutočnilo na offsetovej frekvencii 435 MHz, aby sa predišlo špičke na prevádzkovej frekvencii. Okrem toho sme zachytili oveľa viac údajov, ako potrebujeme (v porovnaní so šírkou spektra). Na vyriešenie oboch týchto problémov jedným ťahom použijeme blok „Frequency XLating FIR Filter“.

Obrázok 8: Použitie stredného filtra FIR

Použitie takéhoto filtra vám umožňuje súčasne vyriešiť tri problémy:

  1. Posuňte nosnú frekvenciu signálu. Akosi „scrollujeme“ na požadovanú časť signálu.
  2. Pomocou pásmového filtra odstránime tie časti signálu, ktoré nepotrebujeme. Ďalej, keď vykonávame merania, budeme merať iba náš signál bez prímesí rádiového šumu.
  3. Rozdelený signál. Tým sa zníži šírka spektra a počet vzoriek signálu, čo zníži výkon spracovania na spracovanie. Keď sa vzorkovacia frekvencia znižuje, musíme to vziať do úvahy pri ladení nasledujúcich blokov.

Obrázok 9: Parametre medziľahlého FIR filtra

Tu opäť používame premenné na nastavenie parametra decimácie (alebo separácie), keďže tento spôsob je oveľa pohodlnejší. Na získanie decimačnej hodnoty je potrebné vydeliť vstupnú hodnotu vzorkovacej frekvencie jej výstupnou hodnotou (v našom prípade je výstupná hodnota 50 kHz, čo je relatívne ľubovoľná hodnota). 50 kHz je dostatočne široké na to, aby pokrylo celý náš signál a nebudeme mať žiadne ďalšie problémy, keďže signál je veľmi silný. V reálnom živote by sme asi mali používať oveľa nižšiu hodnotu. Aby GRC fungoval správne, musíme výsledok previesť na celé číslo (použijeme na to funkciu Python int).

Premennú firdes_tap naviažeme na parameter „Taps“ (viac o tom neskôr). Tento parameter nám umožňuje izolovať náš signál.

A nakoniec, parametrom "Center Frequency" nastavíme posun nosnej frekvencie (opäť pomocou premenných). Musíme posunúť náš signál nadol, preto je posun približne 1,2 MHz (alebo 435 MHz - 433 MHz). Keďže posun smeruje nadol, hodnota musí byť záporná.

Používam GNU Radio 3.6. Najnovšia verzia je však 3.7, ktorá má určité zmeny. Najmä parameter "Centre Frequency" sa považuje za "skutočnú" nosnú frekvenciu. Ak používate GNU Radio 3.7, odstráňte záporné znamienko. S týmito a ďalšími zmenami sa môžete zoznámiť v novej verzii.

[Aktualizácia z 9. februára 2013 – Po aktualizácii rádia GNU mi nie je jasné, o aké zmeny ide, pretože záporný offset funguje dobre a pozitívny nie.]

Obrázok 10: Hodnoty premennej firdes_tap

Premenná firdes_tap definuje náš dolnopriepustný filter. Tu sú kľúčové parametre:

  1. Zosilnenie = 1 – signál nezosilňujeme.
  2. Vzorkovacia frekvencia (samp_rate) - zodpovedá vzorkovacej frekvencii vstupného signálu (v našom prípade 8MHz).
  3. Medzná frekvencia = 2000 - medznú frekvenciu definujeme ako 2KHz.
  4. Deliaca frekvencia filtra = 20 000 - nastavuje šírku pásma prechodu filtra približne na polovicu vzorkovacej frekvencie (v našom prípade je konečná vzorkovacia frekvencia 50 kHz, preto je medzná frekvencia asi 20 kHz).

Parametre WIN_HAMMING a 6.76 hovoria GNU Radio, aby použilo filter okna. Tieto parametre môžete ignorovať.

Po prechode signálu cez filter, decimácii a opätovnom vycentrovaní opäť prejdeme signál cez Fourierovu transformáciu. Výstup je nasledujúci:

Obrázok 11: Signál prechádzajúci cez filter a prevodník

Upozorňujeme, že signál má zníženú šírku spektra a došlo aj k vyhladeniu mimo oblasti, ktorú zvažujeme.

Nastavením rôznych hodnôt pre dolnopriepustný filter môžete získať rôzne výsledky (viac o nastavení dolnopriepustného filtra si môžete prečítať).

Nezabudnite vyladiť svoju Fourierovu transformáciu:

Obrázok 12: Nastavenia meniča

Pozor si treba dať najmä na zmenu vzorkovacej frekvencie nášho signálu (do 50 kHz) a nosnej frekvencie. Takto sme nastavili zodpovedajúce premenné v parametroch "Sample Rate" a "Baseband Freq".

Teraz máme filtrovaný, vycentrovaný, úzkopásmový amplitúdovo modulovaný signál. Čo s tým môžeme urobiť?

Pri amplitúdovej modulácii dochádza k zmene amplitúdy a podobný signál môžeme zistiť meraním tohto parametra:

Obrázok 13: Obvod na meranie signálu

Blok Complex to Mag konvertuje komplexný IQ signál na absolútnu hodnotu. Keďže náš signál je veľmi silný a navyše prešiel cez filter, môžeme sa uchýliť k výpočtu amplitúdy. Ak by bol signál nefiltrovaný a bol by tam šum, nemohli by sme sa uchýliť k použitiu takejto jednoduchej metódy.

Všimnite si farbu kolíka „Out“ bloku „Complex to Mag“ (oranžová namiesto modrej). To znamená, že výstupný signál je hodnota s pohyblivou rádovou čiarkou, a preto vstupné bloky musia akceptovať tento typ signálu.

Obrázok 14: Nastavenie typu prijímaného signálu

Typ signálu môžeme nastaviť v roletovom menu parametra „Typ“.

Teraz, keď sa GRC spustí, výstupom je vypočítaná veľkosť. Ak posúvame časový rozsah kolieskom myši, uvidíme nasledujúci obrázok:

Obrázok 15: Graf vypočítanej veľkosti signálu

Signál na obrázku vyššie vyzerá skvele, rovnako ako signál získaný pri pohľade na analyzátor Baudline. V druhom prípade sme sa uchýlili k izolácii a izolácii užitočného signálu a jeho konverzii na sekvenciu vypočítaných veličín.

Obrázok 16: Porovnanie dvoch signálov

Tu si môžete stiahnuť súbor načítania a odtiaľto súbor GRC.

V ďalšom článku sa pokúsime previesť signál z GRC späť na pôvodnú vzorku.

Ďakujem Mikeovi Ossmanovi, všetkým na kanáli #hackrf na Freenode a všetkým ostatným, ktorí pomohli napísať tento článok a poskytli spätnú väzbu.