GNU-Radio mit einem Mikrofon lernen



Ein früherer Artikel über SDR und GNU Radio hat gezeigt, dass das Thema für die Community interessant ist. Da es fast keine Informationen über das GNU Radio-Paket auf Russisch gibt und nicht alles auf Englisch klar ist, habe ich beschlossen, meine Erfahrungen mit GNU Radio zu beschreiben.

Über SDR und GNU Radio habe ich bereits in einem früheren Artikel geschrieben . Ich möchte Sie daran erinnern, dass mein Ziel darin besteht, zu zeigen, wie ein Funksignal abgefangen und sogar abgestrahlt werden kann, um Smart-Home-Geräte (und tatsächlich das Internet der Dinge) zu steuern. Ich halte es für wichtig, auf die Sicherheit im Internet der Dinge aufmerksam zu machen. Aber das ist noch ein langer Weg ... Zunächst müsste ich mich um GNU Radio kümmern!

Nicht jeder hat einen SDR-Empfänger, und es schien mir nützlich zu sein, zu zeigen, was mit GNU Radio mit dem gemacht werden kann, was jeder hat - nämlich mit dem Mikrofon und den Kopfhörern Ihres PCs.

Unter dem Schnitt einige interessante Übungen mit Klang.

Klingt herum


Beginnen wir also mit einem einfachen: Studieren des Klangspektrums. Wir gehen davon aus, dass Sie das GNU Radio-Paket installiert oder das vorbereitete Ubuntu / Windows-Image mit GNU Radio gestartet haben. Wenn nicht, laden Sie ein Ubuntu-basiertes Bild von der GNU Radio-Website herunter .

Beginnen wir mit der Erstellung eines einfachen Mikrofonaufnahmeprojekts. Fügen Sie dazu den Audio Source-Block hinzu und setzen Sie samp_rate 48000 (viele Karten arbeiten mit 44100 Hz und nicht mit 48000 Hz).

Informationen zum Limit Ihrer Karte unter Linux finden Sie unter:
$ pactl list short sinks
0	alsa_output.pci-0000_00_03.0.hdmi-stereo	module-alsa-card.c	s16le 2ch 44100Hz	SUSPENDED
1	alsa_output.pci-0000_00_1b.0.analog-stereo	module-alsa-card.c	s16le 2ch 44100Hz	SUSPENDED

Es stellt sich sofort die Frage: Warum 48 kHz? Immerhin hören sie bis zu 20 kHz Details, und das ist noch nicht alles.
--, , 2 . , 24 — . .

48 44.1 — . , CD. .

Zurück zu unserem GNU Radio-Programm. Schließen Sie die Audioquelle WX FFT an. Vergessen Sie nicht, die QT-GUI in top_block durch die WX-GUI zu ersetzen und den Eingabetyp in Float zu ändern. Und jetzt rennen wir durch die Wohnung und machen verschiedene Geräusche. Die Schulphysik hat uns viel darüber erzählt, was wir sehen werden, aber all dies ist vergessen, und es ist immer interessanter, mit eigenen Augen zu sehen, als in einem Lehrbuch zu lesen.

Das erste was wir sehen werden ist, dass nichts sichtbar ist! Der gesamte signifikante Teil des Spektrums konzentriert sich auf die ersten 2 oder 3 kHz. Nun, ok, fügen wir einen neuen Block zwischen der Quelle und WX FFT hinzu: Rational Resampler - damit können Sie die Abtastrate ändern und nur den richtigen Teil des Spektrums belassen. Der Einfachheit halber erstellen wir einen neuen Variablenblock (Variable), rufen resamp auf und setzen den Wert, z. B. 15. Geben Sie im Resampler-Block im Feld Dezimierung den Namen dieser Variablen ein. Nun wird ein Signal mit einer Abtastrate gleich samp_rate / resamp, d.h. In diesem Block müssen Sie im Feld Abtastrate diesen Ausdruck einfügen. Jetzt wird unser Signal auf 1,5 kHz erweitert, was bereits besser ist. Nun ist alles sichtbar!

Beginnen Sie also mit einer Note für 440 Hz. Überprüfen Sie Ihre Stimme auf FrequenzSauberkeit. Sofort ein interessanter Fund (ich erinnere Sie, wir müssen das aus der Schule wissen): Wir veröffentlichen nicht eine Frequenz, sondern eine Reihe mehrerer Frequenzen - Ton und Obertöne. Wer zu Hause ein Klavier oder ein anderes Instrument hat, kann es ausprobieren. So sieht die Note für die erste Oktave aus wie ein Klavier.



Aber für die kleine Oktave. Alles ist wie im Lehrbuch - es gibt 2-mal mehr Peaks, der niedrigste Peak ist 2-mal niedriger geworden (220 Hz).



Mehrere Frequenzen sind nicht zufällig vorhanden. In der Tat wird im Fall eines Klaviers / einer Gitarre / ... (Saiten) der Klang durch die Vibration der Saite extrahiert. Und die Saite hat zwei feste Enden, d.h. Es können nur Moden mit einer langen Wellenlänge λ / 2 = L * n emittiert werden, wobei n = 1,2,3 ...

Ähnliches gilt für die Stimme. Mit Bändern können Sie die Eigenschaften des Kehlkopfes ändern, der als Resonator fungiert (verzeihen Sie mir Anatomieliebhabern ungenaue Namen). Wiederum sind die Wände fixiert, es gibt Knotenpunkte bei den Schwingungen, d.h. wieder die gleiche Formel für angeregte Modi.

Und jetzt klatschen wir:


(blau - das Spektrum der "Stille", grün - das Spektrum der Baumwolle)

Oh, genau hier sind alle Frequenzen sichtbar (achten Sie auf die Frequenzskala und den Signalpegel im Vergleich zu den obigen Grafiken!). Es ist logisch, weil Baumwolle einen kurzfristigen Druckanstieg darstellt (sehr scharf), d.h. fast δ-Funktion, und sein Spektrum enthält alle Frequenzen.

Es kann übrigens verwendet werden. Wer erinnert sich an solche Schlüsselringe aus den 90er Jahren, um Schlüssel zu finden, die beim Pfeifen Geräusche machten? Es war eine bequeme Sache. Also reagierten sie auch auf Baumwolle, weil im Klang von Baumwolle gibt es auch eine Frequenz, die der Pfeife entspricht.

Alphabet-Spektrum


Jetzt hören wir uns selbst zu. Sagen Sie verschiedene Buchstaben des Alphabets und betrachten Sie das Spektrum (vorzugsweise ohne Resampling, um festzustellen, welche Frequenzen im Bereich von 0 bis 20 kHz verwendet werden). Eine Person verwendet verschiedene Arten der Klangerzeugung: labial (beginnend mit dem Öffnen der Lippen, wodurch viele Frequenzen gleichzeitig erzeugt werden), Kehlkopf, Zahn, Lingual und Nase. Besonders interessant sind die zischenden und pfeifenden Geräusche (dies sind der Kehlkopf und der Zahn) - ihr Spektrum ist sehr breit und liegt hauptsächlich im Spektrum> 2,5 kHz (für Schall "c" sogar> 5 kHz). Dies erklärt, warum Wörter mit diesem Ton auf dem Telefon schwer zu hören sind (früher lag die Bandbreite bei 3 kHz oder sogar darunter - fügen Sie einen Tiefpassfilter hinzu und senden Sie das Ergebnis mit Kopfhörern an Audio Sink - das Ergebnis ähnelt einem guten alten kabelgebundenen Telefon).

Wer Kinder hat, hört ihnen zu - sie sind viel lauter, ihre Stimme enthält viele hohe Frequenzen. Deshalb ist ihre Stimme über das Telefon immer seltsam und es ist oft einfach unmöglich, sie zu verstehen (Sprachverzerrung ist viel größer als die eines Erwachsenen).

Übrigens habe ich versucht, die höchste Note aus mir herauszupressen. Nun, ich habe es nicht über 700 Hz gebracht. Der Sohn nahm 1200 Hz! Ich habe von mir selbst keine solche Einschränkung erwartet - das sind weniger als 5% des Spektrums, das ich höre. Ich fühlte mich fehlerhaft ...

Sprich mit den Delfinen


Okay, wir können nicht so hoch klingen, also benutze diese Band für eine andere. Versuchen wir nun, die Sprachübertragung durch Ultraschall durchzuführen. Wir setzen nach dem Audio Source-Block einen Tiefpassfilter (Tiefpassfilter), der mit dem Kosinus von 15 kHz multipliziert wird (wodurch unser Signal 15 kHz höher übertragen wird) und an den Lautsprecher senden (er kommt damit zurecht). Eine solche Datei kann jedoch mit File Sink geschrieben werden. Wenn ein solcher Listener eine solche Datei verloren hat, kann er nicht analysieren, was dort gesagt wird. Spionagespiel der Stufe 2.



Lassen Sie uns nun das Gegenteil tun - wir werden das codierte Signal wiederherstellen. Ein gewöhnliches Laptop-Mikrofon akzeptiert hohe Frequenzen nicht gut, aber aus einer Datei ist es einfach (für unsere Tests ist es genug). Die Stimme nach der Genesung wird sehr gut aufgenommen.



Auf diese Weise können Sie sogar Daten übertragen: hierEin Beispiel für eine Netzwerkschnittstelle basierend auf Ultraschallübertragung .

Dieses Beispiel zeigt, dass Sie mit GNU Radio und einer Soundkarte viel machen können!

Übersicht der GNU Radio Units


GNU Radio hat viele verschiedene Blöcke, und das Aussortieren ist nicht einfach. Und das Schwierigste ist zu verstehen, was überhaupt da ist. Im Folgenden werde ich nur die beliebtesten Blöcke nennen, die "im Alltag" verwendet werden.

Mathematische Operationen:

Add - Addition von zwei Signalen
Mehrfach - Multiplikation von zwei Signalen (zum Beispiel für AM)
Add Const - Addiere (subtrahiere) eine Konstante (zum Beispiel beim Demodulieren von AM entferne die DC-Komponente)
Multipliziere Const - Multipliziere ein Signal mit einer Konstanten (zum Beispiel zur Verstärkung)
Char / Integer / Float / Complex in Char / Integer / Float / Complex - Datentypkonvertierung

Quellen:

Konstante Quelle - eine Quelle, die immer den gleichen Wert
erzeugt Signalquelle - eine Quelle, die ein sinusförmiges Signal erzeugt (für ein synthetisches Signal)
Audioquelle / Senke - Aufnahme von einer Soundkarte oder Ausgabe an diese
Datei Quelle / Senke - Lesen aus einer Datei (verwenden Sie Throttle to Einschränkungen der Lesegeschwindigkeit auf die gewünschte Abtastrate) und Schreiben in die
WAV-Datei Quell- / Sink- Datei - Lesen / Schreiben der
TCP / UDP- WAV-Datei ; Quelle / Senke - die Möglichkeit, das Projekt mit der Netzwerksoftware über TCP- oder UDP-
Osmocom-Quell- / Senken- Sockets zu verbinden - Daten von empfangen RTL-SDR oder HackRF One oder Übertragungsvektorquelle (für HackRF One)
- Quelle einer Folge von Zahlen

Filter und Modulation:

Tief- / Hoch- / Bandpassfilter - Niederfrequenz- / Hochfrequenz- / Bandpassfilter
Frequenz-Xlating-FIR-Filter - kombiniert Frequenzverschiebung und Tiefpassfilter zur Auswahl des gewünschten Frequenzbandes
AM / FM / GFSK / ... Mod / Demod - verschiedene Modulatoren und Demodulatoren

Probenahme:

Rational Resampler - kann ankommende Folge von Zählungen von einer Abtastrate voneinander durch Dezimierung und Interpolation (verwendet für „Anpassen“ unter dem gewünschten Abtastrate) umwandeln
Tempolimit Versorgungs Zählungen zu der gewünschten Sample - Rate (wenn Entwurf Wochen Einzeleinheit, um die Geschwindigkeit zu begrenzen - Drosselklappen Verarbeitung)
Verzögerung - verzögert den Fluss um die gewünschte Anzahl von Proben

Benutzeroberfläche:

WX GUI FFT Sink - grafische Ausgabe des Signalspektrums
WX GUI Waterfall Sink - Ausgabe der spektralen Leistung im "Wasserfall" -Modus (entlang der X-Achse - Frequenz, entlang der Y - Zeit, Z (Farbe) - Amplitude). Nützlich zum Ermitteln der Strahlungsfrequenz einer selten sendenden Quelle in einem bestimmten Bereich.
WX GUI Constellation Sink - Zeigt das Phasendiagramm des Signals (Phasendifferenz zwischen den Schwingungen des Real- und Imaginärteils des Signals) an.
WX GUI Scope Sink - Oszilloskop

Verschiedenes:

Variable - eine Variable, mit der Sie Variablen anstelle von Zahlen in einer Vielzahl von
Auswahlblöcken verwenden können - ein Multiplexer in Kombination mit WX Slider ermöglicht das Ein- und
Ausschalten von Ein- und Ausgängen von K-Bits - Konvertieren von 0/1 Bytes in eine Folge von K Bits und umgekehrt von Bytes in einer Folge von Bytes 0/1, die Bits entsprechen (praktisch zum Codieren / Decodieren von Paketen - Bytes 0/1 können beispielsweise vom Träger multipliziert werden)

Was müssen Sie noch über den GNU Radio Companion (GRC) wissen?


Alle Blöcke in der GRC, die Ein- oder Ausgänge haben, erfordern eine Datentypdefinition. Der Ausgabetyp eines Blocks muss mit dem Eingabetyp des ihm zugeordneten Blocks identisch sein. Die Ausgabe von einem Block kann auf mehrere Blöcke übertragen werden (d. H. Mehrere Verbindungen zeichnen). Es kann jedoch nur ein Stream eine Eingabe eingeben!

Die meisten Blöcke haben eine minimale Dokumentation auf der Registerkarte im Einstellungsfenster sowie in den Fußnoten zu den Parametern. Obwohl dies normalerweise nicht ausreicht. Ein etwas veraltetes Dock ist hier .

Alle Blockparameter können Python-Ausdrücke sein. Das heißt, Anstelle einer Zahl können Sie eine Formel durch die Teilnahme von Variablen ersetzen, die durch Variablenblöcke definiert sind.

Oft möchten Sie Projektparameter durch Ändern der Variablenwerte „verdrehen“. Verwenden Sie dazu den WX-Schieberegler oder eine ähnliche UI-Komponente und verwenden Sie den Namen anstelle der gewünschten Variablen. Nach dem Starten des Projekts wird ein Schieberegler in der Benutzeroberfläche angezeigt. Dies ist praktisch zum Einstellen der Frequenz- oder Filterparameter.

Fehler in der Art der Verknüpfungen oder in den Blockparametern werden rot hervorgehoben. Sie blockieren auch den Start des Projekts (in den rot hervorgehobenen Einstellungen des Blocks können Sie sich über das Problem informieren). Es gibt Laufzeitfehler, die auch beim Start des Projekts auftreten. Das Protokoll am unteren Rand des GRC-Fensters zeigt Ihnen, wo das Problem liegt.

Einige Blöcke erfordern eine Ganzzahl als Parameter. Die Substitution von Formeln kann zu einer Fehlanpassung des Typs führen. Verwenden Sie die Python int () -Funktion, um in eine Ganzzahl zu konvertieren.

Verwenden Sie Deaktivieren / Aktivieren, um den Block zu deaktivieren. Auf diese Weise kann der Block nicht gelöscht, sondern lediglich für eine Weile aus dem Projekt ausgeschlossen werden, wobei alle eingegebenen Parameter gespeichert werden.

Alle Schemata in GRC werden in Python-Skripte konvertiert, sodass Sie sie später ändern und einige Prozesse unter Umgehung von GRC automatisieren können.

Es ist häufig zweckmäßig, ein Ton- / Funksignal zur weiteren Analyse in einer Datei zu speichern. Verwenden Sie dazu den File-Sink-Block. Bitte beachten Sie, dass Sie beim Lesen einer Datei das beim Schreiben verwendete Datenformat (Nummerntyp) sowie die Abtastrate berücksichtigen müssen. Ich empfehle, diese Werte zusätzlich zur Beschreibung des aufgezeichneten Signals selbst in den Dateinamen aufzunehmen. Auf diese Weise können Sie sich daran erinnern, wie Sie es später lesen sollen.

Verwenden Sie beim Abspielen aus einer Datei unbedingt den Gasblock, um die Lesegeschwindigkeit zu begrenzen. Dies ist nicht erforderlich, wenn sich in der Schaltung ein anderer Block befindet, der die Geschwindigkeit des Lesens von Daten physikalisch begrenzt. Beispielsweise begrenzt der Audio Sink-Block die Geschwindigkeit der ihm zugeführten Daten, wie in den Einstellungen für die Abtastrate angegeben.

Verwenden Sie das Lupensymbol in der Symbolleiste, um den gewünschten Block zu finden. Durch Doppelklicken auf den Namen in der Liste der verfügbaren Blöcke wird der Block dem Projekt hinzugefügt. Stattdessen können Sie es aus der Liste an die gewünschte Stelle im Projekt ziehen.

Versuchen Sie, Blöcke bequem im Projekt zu platzieren. Dies hat keine Auswirkungen auf die Lesbarkeit.

Ich hoffe, dieser Artikel ermutigt jemanden, mit Klang zu experimentieren.

Source: https://habr.com/ru/post/de393713/


All Articles