Forum: Digitale Signalverarbeitung / DSP / Machine Learning DSP Filterentwurfsprogramm


von H05 (Gast)


Lesenswert?

Hallo  Forum,

ich möchte mich ūber die Sommerpause mal mit Signalverarbeitung auf 
einem Microcontroller beschäftigen. Als Board habe ich ein Nuclueo mit 
STM32H7 Prozessor, das soll das Zielsystem sein. Bevor ich auf dem Board 
anfange, habe ich mir erstmal die grundlegenden Komponenten in C/C++ auf 
einem PC zusammengestrickt. Als erstes ein Programm was ein 
Signalgenerator ist, der einen Sinus beliebiger Frequenz, Abtastrate, 
Amplitude, .... in eine Datei schreibt. Dann ein Mischerprogramm das 
eine WAV einliest und damit den Sinus aus der Datei AM moduliert. Der 
nächste Prozess ist dann ein simuliertes ADC, der das AM Signal 
einliest, wieder mit einem Localoscilator (cos/-sin) ins Basisband 
mischt und dabei die I/Q Daten schreibt. Bis hierher alles i.O.. Als 
nächstes soll ein DDC, also Tiefpassfilterung und Dezimierung vor der 
Demodulation geschrieben werden. Mit der Auswahl des Filtertyps und der 
Bestimmung der Filterkoeffizienten tue ich mich reichlich schwer. 
Nachdem ich jetzt einige Tage diverse Bücher und Scripte zur 
Signalverarbeitung gelesen habe, sehe ich den Wald vor lauter Bäumen 
nicht mehr.

Gibt es vielleicht noch irgendein Buch "digitale Filter für Blöde" in 
dem der Filterentwurf und die Berechnungen der passenden Koeffizienten 
auf "Kindergartenniveau" beschrieben wird? Hilfreich ist vielleicht auch 
ein Programm mit dem man grafisch eine Filterkurve zeichnen kann und was 
als Output C-Code samt Filterkoeffizienten ausspuckt. Gibt es dort etwas 
simples für den Hobbybedarf  ?

Gruß und allen, trotz der Tropenhitze, eine gute und erholsame Nacht!

: Verschoben durch Moderator
von Christian Uckold (Gast)


Lesenswert?

H05 schrieb:
> Hilfreich ist vielleicht auch
> ein Programm mit dem man grafisch eine Filterkurve zeichnen kann und was
> als Output C-Code samt Filterkoeffizienten ausspuckt. Gibt es dort etwas
> simples für den Hobbybedarf  ?

MATLAB mit entsprechender Toolbox kann das.

von Dergute W. (derguteweka)


Lesenswert?

H05 schrieb:
> Gibt es dort etwas
> simples für den Hobbybedarf  ?

Matlab in simpel und ohne Lizenzgedoens gibts als GNU Octave.
So Funktionen wie: fir2, firls, remez, freqz, grpdelay koennten dir da 
weiterhelfen.
Buecher ueber digitale Filter gibt's natuerlich zum Saufuettern, sind 
aber preislich oft dem Umfang des Themas angemessen ;-)

Bei www.dsprelated.com gibts oft interessante Artikel.

Gruss
WK

von H05 (Gast)


Lesenswert?

Erstmal vielen Dank für die Antworten.
Ein Tool hatte ich gestern Nacht noch gefunden:
http://t-filter.engineerjs.com/

Gibt es ähnlich komfortables in einer Offline-Version?

von Ludger (Gast)


Lesenswert?


von Gustl B. (-gb-)


Lesenswert?


von H05 (Gast)


Lesenswert?

Gustl B. schrieb:
> Pyfda http://www.pyfda.org

Oh das sieht sehr gut und vielversprechend aus! Vielen herzlichen Dank, 
damit werde ich sicher ein Schritt weiter kommen.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

In der Literatur zur IQ-Demodulation wird immer unter den Teppich 
gekehrt, dass die beiden Tiefpassfilter im Blockschaltbild ein 
Hilbert-Filter sein müssen, also ein Breitband-90Grad-Phasenschieber.
https://de.wikipedia.org/wiki/Hilbert-Transformation#Berechnung_mit_FIR-Filter
Zwei FIR-Filter, das eine ist nur eine Zeitverzögerung um die halbe 
Filterlänge des anderen.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Christoph db1uq K. schrieb:
> In der Literatur zur IQ-Demodulation wird immer unter den Teppich
> gekehrt, dass die beiden Tiefpassfilter im Blockschaltbild ein
> Hilbert-Filter sein müssen, also ein Breitband-90Grad-Phasenschieber.
> https://de.wikipedia.org/wiki/Hilbert-Transformation#Berechnung_mit_FIR-Filter
> Zwei FIR-Filter, das eine ist nur eine Zeitverzögerung um die halbe
> Filterlänge des anderen.

Das glaube ich (in dieser Allgemeinheit) nicht, Tim.
Ueblicherweise gib's vorher eine Mischstufe, in der mit einem cos und 
einem sin "runter"gemischt wird, danach sind die Tiefpaesse auch unter 
dem Teppich identisch.

Gruss
WK

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Sin und cos haben nur 90 Grad Unterschied, zur Auslöschung der einen 
Seite müssen sie aber gegenphasig sein, also 180 Grad. Deshalb ist 
irgendwo noch eine 90Grad-Verschiebung nötig.

von Lukas (Gast)


Angehängte Dateien:

Lesenswert?

Christoph db1uq K. schrieb:
> In der Literatur zur IQ-Demodulation wird immer unter den Teppich
> gekehrt, dass die beiden Tiefpassfilter im Blockschaltbild ein
> Hilbert-Filter sein müssen, also ein Breitband-90Grad-Phasenschieber.
> https://de.wikipedia.org/wiki/Hilbert-Transformation#Berechnung_mit_FIR-Filter
> Zwei FIR-Filter, das eine ist nur eine Zeitverzögerung um die halbe
> Filterlänge des anderen.

Nö, um zum äquivalenten Basisbandsignal zu kommen, muss man das 
analytische Bandpasssignal nicht explizit bilden wenn die Mischstufe 
vorgezogen wird. Hier sind die beiden Tiefpassfilter dann identisch

von Lukas (Gast)


Lesenswert?

Christoph db1uq K. schrieb:
> Sin und cos haben nur 90 Grad Unterschied, zur Auslöschung der einen
> Seite müssen sie aber gegenphasig sein, also 180 Grad. Deshalb ist
> irgendwo noch eine 90Grad-Verschiebung nötig.

Nö, hier ist der Rechenweg ganz gut dargestellt:
https://de.wikipedia.org/wiki/Quadraturamplitudenmodulation#Mathematischer_Hintergrund

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Und wie bekomme ich die beiden Signale I und Q? Ich habe ein einziges 
Datensignal, das in diese beiden Zweige aufgespalten werden muss, genau 
das entspricht der Phasenschiebung bei einem analogen Signal, z.B. aus 
einem Mikrofon.

Es hilft nichts, zweimal 90 Grad ergibt erst die 180. Wo das stattfindet 
kann man aussuchen, zwei Mischer mit Anschlüssen RF LO und IF müssen an 
je zwei dieser Anschlüsse phasenverschobene Signale bekommen (oder 
ausgeben, dann folgt der Phasenschieber danach). Üblich ist es, den LO 
zu schieben, da das nur für eine Frequenz statt ein ganzes Band 
passiert, den anderen Port kann man wählen. Zur digitalen Verarbeitung 
ist das zweckmäßiger die niederfrequentere Seite, also Eingang beim 
Sender und Ausgang beim Empfänger.

von Lukas (Gast)


Lesenswert?

Christoph db1uq K. schrieb:
> Und wie bekomme ich die beiden Signale I und Q?

genau das steht in dem Link über deinem Beitrag.
Kurze Zusammenfassung:
Am Sender wird ein Signal gesendet, dass in der Form
 darstellbar ist.

Dieses Signal wird dann am Empfänger mit cos und -sin multipliziert.
Für I:

und der hintere Term mit der doppelten Frequenz wird durch den Tiefpass 
eliminiert. Damit bleibt bei dem cos-Zweig nur I übrig.

Dasselbe für Q:

auch hier wir der hintere Term durch den Tiefpass eliminiert und es 
bleibt Q übrig.

Christoph db1uq K. schrieb:
> Es hilft nichts, zweimal 90 Grad ergibt erst die 180.

Man brauch keine 180° sonder 90° da dann orthogonal zueinander.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Den Wiki-Artikel zur QAM habe ich jetzt mal genauer durchgelesen. Diese 
Demodulation nur mit einer Phasenschiebung funktioniert demnach nur im 
Fall der kohärenten Demdulation, also mit einer Phasenlage des 
Empfangsmischers, der irgendwie durch zusätzlichen Aufwand mit der 
Phasenlage des Senders synchronisiert ist.
Dann wirken die beiden Tiefpässe wie die Bandpassfilter in einem 
SSB-Empfänger nach der Filtermethode, nur dass wir hier direkt ins 
Basisband heruntermischen. Wie bei jedem Direktmischer werden aus 
Bandpässen Tiefpassfilter um das unerwünschte Seitenband zu 
unterdrücken.
Wenn man nur ein Seitenband braucht kann man den anderen Tiefpass und 
Mischer einfach weglassen und hat damit einen gewöhnlichen 
Direktmischempfänger, allerdings mit Synchrondemodulator.

von Lukas (Gast)


Lesenswert?

Christoph db1uq K. schrieb:
> Diese
> Demodulation nur mit einer Phasenschiebung funktioniert demnach nur im
> Fall der kohärenten Demdulation

Bei QAM ist i.A. immer eine Synchronisation nötig, unabhängig von 
Empfängerstruktur. Die beiden oben gezeigten IQ-Empfänger (ob mit oder 
ohne Hilbert) sind 100% äquivalent zu einander. Es kommt auf die 
Modulation an, ob inkohärente Empfänger möglich sind.

von W.S. (Gast)


Lesenswert?

H05 schrieb:
> ich möchte mich ūber die Sommerpause mal mit Signalverarbeitung auf
> einem Microcontroller beschäftigen. Als Board habe ich ein Nuclueo mit
> STM32H7

H05 schrieb:
> Gibt es vielleicht noch irgendein Buch "digitale Filter für Blöde"

Ach herrje. Also wenn überhaupt, dann wird das kein Thema für die 
Sommerpause, sondern für viel länger. Und so ein Buch gibt es nicht 
wirklich. Allenfalls lade dir das von http://www.dspguide.com/ herunter.

Ansonsten hast du erstmal ziemlich verkehrt angefangen. Deine 
Soft-Signalgeneratoren etc. brauchst du garnicht - stattdessen solltest 
du dich um genau 2 Dinge kümmern, die ich dir mal versuche zu erläutern:

1. Die Lowlevel-Seite des Problems.
Du brauchst auf alle Fälle 2 Signale I und Q und selbige sind 
schlichtweg um 90° phasenversetzt.
Erster Weg dazu: Du erzeugst I und Q vor dem ADC mit einem dazu 
passenden Mischer. Für sowas gibt es Schaltkreise, die das erledigen. Du 
kannst auch den berüchtigten Tayloe-Mischer dir aufbauen, der 
funktioniert auch. Mit so einer Konstellation kannst du nen gewöhnlichen 
Stereo-Audio-ADC benutzen und ihn per I2S an deinen µC anbinden.
Zweiter Weg dazu: Du erzeugst I und Q nach dem ADC. Das heißt aber, daß 
du einen schnellen ADC brauchst und dahinter ein FPGA. Dort den NCO 
rein, die Multiplikation mit sin und cos und anschließend Dezimation. 
Dann kann es weitergehen mit I2S in deinen µC. Ist teurer und macht sich 
auch nicht von selbst.

Bei der Wahl des passenden µC würde ich an deiner Stelle zuerst schauen, 
wie dort die I2S-Peripherie gemacht ist. Da gibt es gravierende 
Unterschiede. Bei den STM32 hat es oft nur poplige 
Universal-I2S+SPI-Cores, die obendrein nur 16 bittig arbeiten. Schau 
deshalb nach einem "SAI"-Core und lies gründlichst, wie dieser Core zu 
benutzen ist. Oftmals braucht man dringend DMA, um nicht in Interrupts 
zu ersticken und dann ist es Glückssache, ob man einen sicheren Modus 
findet, der also auch bei Störungen immer wieder sauber die richtige 
Zuordnung L zu R (bzw. I zu Q) findet. Hast du Pech, vergaloppiert sich 
das und du kriegst entweder ne Vertauschung I zu Q oder einen Versatz 
Q(0) und I(-1) oder so. Also lesen und aufpassen. Da ist nicht jeder 
SAI-Core so wie ein anderer.

Und danach solltest du erst entscheiden, welchen konkreten Chip du 
nehmen willst.

2. Die Highlevel-Seite des Problems:
Lernen, wie man den CORDIC vor und zurück möglichst taktsparend 
schreibt. Den brauchst du dringend zum Demodulieren.
Lernen, wie man die Taps für einen FIR-Filter berechnet. Geradeaus per 
sin(x)/x ist leicht, ebenso das Applizieren eines Fensters. Wobei mMn. 
je nach Fall eigentlich nur noch Blackman oder Kaiser in Frage kommen. 
Aber bei Kaiser mußt du verschiedene Betas ausprobieren, was dir am 
ehesten paßt.
Für SSB brauchst du eine weitere Phasenverschiebung, entweder 
asymmetrisch (ein Kanal nur verzögert und der andere per Hilbert 90° 
gedreht) oder symmetrisch (ein Kanal +45°, der andere -45°, die 
Filterkernel dafür sind gleich, lediglich der eine von vorn nach hinten 
und der andere umgekehrt). Sowas kann man machen und das letztere ist 
wohl das elegantste und taktsparendste, weil man zusammen mit dem 
Filtern sogleich auch die Phasendrehungen erledigt. "Ioawa Hills" machen 
es uns vor, aber ich kann dir das zugehörige Rezept zum schreiben der 
Berechnung auch nicht geben, ich bin da selbst auf der Suche.


So. Das alles ist erst mal eine Menge Papierkram OHNE jeglichen Zukauf 
irgendwelcher Hardware. Fang also erstmal DAMIT an, sonst paddelst du 
bloß hilflos im Datenmeer umher ohne festen Grund unter die Füße zu 
kriegen.

W.S.

von H05 (Gast)


Lesenswert?

W.S. schrieb:
> Ach herrje. Also wenn überhaupt, dann wird das kein Thema für die
> Sommerpause, sondern für viel länger.

Nicht wirklich, das Thema ist locker zweimal in Sommerurlaub durch.

> Ansonsten hast du erstmal ziemlich verkehrt angefangen. Deine
> Soft-Signalgeneratoren etc. brauchst du garnicht - stattdessen solltest

Nö auch nicht! Habe die ganze Signalkette Senden und Empfangen komplett 
auf einem leistungsfähigen PC runtercodiert, um zu schauen ob das alles 
so problemlos funktioniert. Und ja das tut es. Ich erzeuge AM, SSB und 
FM-HF und kann diese auch wieder in meinem Empfangszeig einlesen und mit 
einem virtuellen Radio abhören. Das war Ziel 1 - erfüllt! Ziel 2 war mit 
dem "Plain C" auf den STM32 zu gehen und anzupassen. Auch Ziel 2 ist 
erfüllt.

> du dich um genau 2 Dinge kümmern, die ich dir mal versuche zu erläutern:

Gäääh, Herr Oberlehrer! Noch nicht gesehen das das alles schon umgetzt 
ist? Du erzählst werder mit dem Signalverlauf, noch mit der 
Programmierung eines STM32 etwas Neues!

Einzig ein passendes Tool zum Erzeugen der Filterkoef. im DDC und DUC 
hat noch gefehlt, aber dafür wurde oben ja schon eine wunderbare Lösung 
genannt!

von Falco (Gast)


Lesenswert?

H05,

nicht aufregen, manche Leute wie W.S. können zwar lesen aber nicht 
verstehen und müssen immer den Oberlehrer raushängen lassen! Die 
schreiben immer den ganzen Urschleim runter und bekommen nicht mit das 
das Problem praktisch gelöst ist.

@W.S. Deinen ganzen Text hat der T.O. doch schon in Kurzform 
niedergeschrieben. Hast du nicht gerafft das es hier nur noch um 
Filterentwurf ging?

von H05 (Gast)


Lesenswert?

Falco schrieb:
> Hast du nicht gerafft das es hier nur noch um
> Filterentwurf ging?

Sagt schon der Titel des Threads: DSP Filterentwurfsprogramm

von W.S. (Gast)


Angehängte Dateien:

Lesenswert?

H05 schrieb:
> Nicht wirklich, das Thema ist locker zweimal in Sommerurlaub durch.

OK, dann mach mal. Du hast es ja nach deinem letzten Post schon alles 
gelöst - aber warum fragst du dann überhaupt? Da du ja so schlau bist, 
solltest du es doch selber können - gelle?

W.S.

von H05 (Gast)


Lesenswert?

@W.S.

Na ist doch wahr!
Ich frage nach einem Hilfmittel/Buch zum Filterdesign und Du kommst 
kaust mir den Signalweg eines SDR runter. Willst mir erklären wo und wie 
man den ADC hinknallt, das man einen schnellen ADC braucht und willst 
mir was von Interrupts, DMA, NCO und Cordic erzählen. Ist ja alles 
irgendwo auch richtig was Du schreibst, aber danach hatte ich doch gar 
nicht gefragt!

Dann willst Du mir klarmachen, das mein Anfang völlig verkehrt war:

#Ansonsten hast du erstmal ziemlich verkehrt angefangen. Deine
#Soft-Signalgeneratoren etc. brauchst du garnicht -

Wenn ich das alles vorher mal auf dem PC als Proof-of-Concept modular 
runtercodiere, bevor ich dann speziell auf den STM32 gehe, dann war der 
Anfang eben nicht verkehrt, sondern Bestandteil meiner gestellten 
Aufgabe.

Wenn jemand das SDR gleich auf einem STM32 codieren will, so kann er das 
tun.

Ich habe das erstmal auf dem Rechner komplett in Software umgesetzt und 
mir die Ausgangsdaten im virtuellen Oszi und Spektrumanalyzer angesehen 
, ganz einfach weil ich das absichtlich so wollte!

von W.S. (Gast)


Lesenswert?

H05 schrieb:
> Dann willst Du mir klarmachen, das mein Anfang völlig verkehrt war

Ja was muß ich denn deinen eigenen Worten folgend von dir annehmen? 
Siehe "Gibt es vielleicht noch irgendein Buch "digitale Filter für 
Blöde" " und "Kindergartenniveau".

Und dann kommst du mit "Habe die ganze Signalkette Senden und Empfangen 
komplett auf einem leistungsfähigen PC runtercodiert, um zu schauen ob 
das alles so problemlos funktioniert."

Also hast du auch die zum Empfangen benötigten Filter schon im Signalweg 
drinnen - ODER??

Was soll das also, willst du andere Leute wie mich hier an der Nase 
herumführen?

Und welche deiner Aussagen gelten denn nun wirklich?

Ich habe dir nicht ohne Grund die zwei wirklich wichtigen Ansatzpunkte 
genannt und erläutert. Von oben die theoretischen Grundlagen und von 
unten das genaue Angucken und Durchrechnen der schieren Hardware. Ich 
nehme nämlich an, daß all die schicken Algorithmen, die am PC mit float 
in double und Gigahertztakt und Gigabytes an Ram und mehreren 
Prozessorkernen tadellos funktionieren, auf einem Mikrocontroller sich 
sehr schwer tun, weswegen dort das extreme Knausern mit Taktzyklen 
angesagt ist.

Lies ganz einfach die Dspguide, dann siehst du sicherlich auf der 
theoretischen Seite weiter.

Und schau dir diese Seite an: http://www.claysturner.com/
Der Mann ist ein wirklicher Fachmann. Von dem kann man was lernen.

W.S.

von Adam P. (adamap)


Lesenswert?

H05 schrieb:
> Hilfreich ist vielleicht auch
> ein Programm mit dem man grafisch eine Filterkurve zeichnen kann und was
> als Output C-Code samt Filterkoeffizienten ausspuckt. Gibt es dort etwas
> simples für den Hobbybedarf  ?

Ist schon älter, aber funktioniert bei mir.

http://www.winfilter.20m.com/08/WinFilter08.zip

von Bernd K. (prof7bit)


Lesenswert?

http://www.iowahills.com/

Dort gibts auch ein paar nette Tools zum Filterdesign, kostenlos aber 
leider ohne Quelltext.

von Bernd K. (prof7bit)


Lesenswert?

Und noch ein Online-Tool der Vollständigkeit halber:
http://www.micromodeler.com/

der Codegenerator ist leider in der freien Version beschränkt auf 
maximal 21 Koeffizienten bei FIR oder maximal Ordnung 4 bei IIR, aber 
immerhin.

von DL1HWO (Gast)


Lesenswert?

Nicht zu verachten ist auch der Filterdesigner im Toolspaket von Gnu 
Radio Companion.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.