Hi.
Ich beabsichtige, digitale Filter zu entwickeln, die entweder auf dem PC
laufen, oder später bei Bedarf auf einem meiner MC Boards oder, wenn
nötig, auf einem ESP Eval Board.
Die Programme auf eine andere Sprache um zu schreiben, ist vermutlich
weniger problematisch.
Aber was empfiehlt sich zunächst auf dem PC? Ein Matlabclone? Delphi 5
wäre vorhanden und ist recht komfortabel in der Kommunikation mit der
API? C?
Was habt ihr getestet? Was sind die Erfahrungen?
Simulationen kannst du ja erst Mal mit Matlab/Octave machen.
Wenn dann alles passt und so ist wie man es will, den Filter in C/CPP
überführen.
Mit einem Stimuli kann man PC seitig ja nochmal validieren.
Anschließend sollte der Filter auf dem uC eigentlich schon laufen.
Je nach dem kann man natürlich auch 1-2 Schritte weg lassen.
Dergute W. schrieb:> Signal Seeker schrieb:>> Ein Matlabclone?> Yepp (GNU Octave).>> Gruss> WK
Ja, das werd ich mir ansehen. Die Frage ist für mich, in wie fern sich
das von sciLab im beabsichtigten Anwendungsgebiet unterscheidet.
Vielleicht kennt jemand beides und kann vergleichend berichten.
Moin,
Signal Seeker schrieb:> Die Frage ist für mich, in wie fern sich> das von sciLab im beabsichtigten Anwendungsgebiet unterscheidet.
Ich kenne sciLab nicht, aber ich vermute mal, dass es im Endeffekt eher
wurscht ist, welches "Tool" man hernimmt. Gemaess:
"A fool with a tool is still a fool" wird's eher drauf ankommen, dass
man weiss, was man da macht.
Gruss
WK
Dergute W. schrieb:> wurscht
Das ist auch mein Eindruck aus der Recherche. Mit scilab bin ich
vertraut, aber vielleicht ergibt sich mal eine Aufgabe, wo das Andere
eine komfortablere Lösung anbietet. Ich werd es im Blick behalten.
Signal Seeker schrieb:> Ich beabsichtige, digitale Filter zu entwickeln, die entweder auf dem PC> laufen, oder später...
Einem errechneten Filterkernel ist es völlig schnurz, auf was für einer
Plattform er später mal laufen soll. Allenfalls wäre das eine Frage, ob
eine Skalierung für Integer-Rechnung noch nötig ist oder nicht.
Wenn du Delphi 5 hast, dann wäre genau das die m.E. beste Wahl für
sowas. Wie man digitale Filter rechnet, wirst du vermutlich selber
wissen, aber als Kontrolle ist es immer nötig, sich mal die
Filterwirkung anzusehen und für sowas ist Delphi richtig gut. Ich hatte
mir zu solchem Zwecke mein eigenes Filterbastler-Programm geschrieben -
mit Delphi 6. Allerdings bin ich im Laufe der Zeit dazu übergegangen,
die aktuelle Community-Version bei Embarcadero herunterzuladen und es
jetzt damit zu tun. Das Programm kann je nach Bedarf FIR-Filter
berechnen - entweder in double oder single oder echt gebrochen mit
wählbarer Bitbreite und man kann so ein Filter dann an generierten
Samples auch ausprobieren.
Aber es ist eben ein Bastelprogramm, womit ich einige Zeit an der
Verquickung von Filter und Phasendrehung (für SSB) herumprobiert habe.
Man sieht das dem Programm auch an.
Aber: So etwas geht und ist mit Delphi recht leicht zu schreiben und zu
modifizieren, je nach Gusto. Wer allerdings da nicht weiter einsteigen
will, kann auch die Programme von Iowa Hills benutzen, die spucken auch
den berechneten Filterkernel aus. Den muß man dann nur noch in eine Form
bringen, was die jeweilige Toolchain versteht.
W.S.
W.S. schrieb:> Einem errechneten Filterkernel ist es völlig schnurz, auf was für einer> Plattform er später mal laufen soll.
... solange es ein Prozessor ist, auf dem der Algo als single Core
arbeiten soll. Wenn man einen Multi-Core hat und auslasten kann (darf?)
muss man da schon ein wenig Rücksicht nehmen.
Es gibt natürlich Entwickler, die alles als asynchrone Prozessmodule
formulieren (lassen) und es dann auf Systemen mit OS installieren, damit
das dann bitte die Abläufe regelt. Kann man machen. Kommt aber in Sachen
Effizienz der Rechenleistung (und Echzeitfähigkeit!) in etwa das, was
auch hier passiert, wenn man alles MATLAB überlässt:
Beitrag "Re: Ganzzahlprobleme mit MATLAB"
Vielen Dank an WS, Jürgen u.a.
Einerseits scheint meine Denkrichtung schon ungefähr zu passen.
Andrerseits kommen vermutlich wichtige Details zur Sprache, die später
aktuell sein werden, für die man aber besser frühzeitig aufmerksam ist.
Auch wennn ich diese Details jetzt nicht einzeln kommentiere, schätze
ich sie und sie sind notiert.
Holger schrieb:> ESP Eval Board
Sorry, oh wie peinlich, das war ein Typo meinerseits. DSP Eval Board war
gemeint.
Danke für die Hinweise, aber die Grundlagen Literatur habe ich schon
ausreichend gefunden. Mir gings eher um die Praxis Tools und das ist
nun gut geklärt.
OK
ein paar einfache Sachen gehen schon mit dem sci Lab. ZB. ein simples
Korrelationsfilter.
Als Nächstes will ich das auf dem PC umsetzten, so dass ich Audio
durchschleifen kann.
Signal Seeker schrieb:> Was habt ihr getestet? Was sind die Erfahrungen?
Schau dir mal Synthmaker, FlowBotics oder FlowStone an.
Da hast du:
1. Gerade DSP als Programiersprache mit drin.
2. Versteht es auch LUA
3. Kannst du Logische Verschaltungen realisieren (sowohl analog wie
Digital)
4. Unterstützt FlowStone oder FlowBotics auch Videoapplikationen
5. Gibt es grad im Filterbereich zig ApplikationsExample zum download.
6. Kan FlowStone und Synthmaker direkt DLL's oder EXE Produzieren.
Gruß
Patrick L. schrieb:> Schau dir mal Synthmaker, FlowBotics oder FlowStone an.
Danke für die Antwort, das scheint mir nicht das zu sein, was ich zur
Zeit brauche.
Ich arbeite mich grad in die Basics von DSP ein und beschränke mich auf
Audio Anwendungen d.h. für mich Tonfilter, Rauschunterdrückung,
Störaustastung, Weak Signals, Demodulation von OOK, AFSK, BPSK,
Sprachkompression, Bandbreitenbegrenzung, Squelch, selektiver Squelch.
Basics heisst im Moment, dass ich alles zu Fuss programmiere und kein
Elemente aus Libs zusammen hänge.
Murkser schrieb:> das schreit wieder nach einer window funktion
Magst du das näher ausführen, oder war es das schon?
Weiter oben ist der Frequenzgang meines Korrelationsfilters zu sehen und
hier die Impulsantwort. Die Bandbreite ist wie gewünscht 20Hz bei 1kHz
Mittenfrequenz. Die Abschwächung im Sperrbereich ist eher schwach.
Den Kernel kann ich auf die übliche Art nicht fenstern, da ich rein
rekursiv filtere, was zur Folge hat, dass jedes Sample gleich gewichtet
ist, egal wie weit zurück es liegt. Die rein rekursive Filterung hat nun
mal einen recht grossen Geschwindigkeits Vorteil bei einer Filterlänge
von 800 Samples.
Signal Seeker schrieb:> Die Abschwächung im Sperrbereich ist eher schwach.
Genau. Deshalb Windowfunktion. Schau die mal die ganzen threads dazu an.
Die Seiten hier und andere im Netz sind voll davon
Signal Seeker schrieb:> Ich arbeite mich grad in die Basics von DSP ein und beschränke mich auf> Audio Anwendungen d.h. für mich
Da hast du dir ja was vorgenommen. Hast du denn schon das theoretische
Wissen dafür und willst jetzt nur bestimmte DSPs nutzen, oder sollen die
DSPs das Verhikel sein, um sich die SW und Signaltheorie zu erarbeiten?
Weil dann Prost!
Murkser schrieb:> Schau die mal die ganzen threads dazu an.> Die Seiten hier und andere im Netz sind voll davon
Die allgemeinen Vorschläge und Statements nützen wenig. Ersteres mache
ich bereits und gerade diese voll davon sein, macht die allgemeine Suche
sinnlos.
Murkser schrieb:> Signal Seeker schrieb:>> Die Abschwächung im Sperrbereich ist eher schwach.> Genau. Deshalb Windowfunktion.
Aber das war der konkreteHinweis, der weiter geführt hat. Beim Smith
konnte ich auch lesen, dass das Fenstern im Nachhinein equivalent ist
zum Fenstern eines Kernels. Also hab ich auf ein Verfahren zurück
gegriffen, das ich schon mal eingesetzt habe, und nach Gehör eine
Verbesserung bemerkt habe. Jetzt habe ich es abgewandelt und ich sehe
auch in der Durchlasskurve eine Veränderung in die richtige Richtung.
Ich werde eine logarithmische Darstellung brauchen.
Den Verlauf vom Betrag des komplexen Korrelationskoeffizienten habe ich
mit einem gleitenden IIR Mittelwert verknüpft. Das Ergebnis ist im
Anhang zu sehen.
Murkser schrieb:> Da hast du dir ja was vorgenommen.
Sollte machbar sein.
Murkser schrieb:> Hast du denn schon das theoretische> Wissen dafür und willst jetzt nur bestimmte DSPs nutzen, oder sollen die> DSPs das Verhikel sein, um sich die SW und Signaltheorie zu erarbeiten?
Weder - noch.
Die Signaltheorie beherrsche ich keineswegs. Sie ist aber auch nicht
Selbstzweck. Sie mir abstrakt zu erarbeiten, dazu habe ich nicht die
Geduld. Die ST sehe ich mir an, wie ich sie gerade benötige, sie ist
Vehikel um mit anwendbarer Software zu experimentieren. Der erste
Schritt ist nun der angesprochene Tonfilter.
Noch arbeite ich auf dem Algebra Interpreter. Da sehe die Ergebnisse
schnell. Dann portiere ich nach Object Pascal und kann mir echte NF
Signale aus dem KW Empfänger zeitnah gefiltert anhören.
Signal Seeker schrieb:> Murkser schrieb:>> Signal Seeker schrieb:>>> Die Abschwächung im Sperrbereich ist eher schwach.>> Genau. Deshalb Windowfunktion.>> Aber das war der konkreteHinweis, der weiter geführt hat. Beim Smith> konnte ich auch lesen, dass das Fenstern im Nachhinein equivalent ist> zum Fenstern eines Kernels. Also hab ich auf ein Verfahren zurück> gegriffen, das ich schon mal eingesetzt habe, und nach Gehör eine> Verbesserung bemerkt habe. Jetzt habe ich es abgewandelt und ich sehe> auch in der Durchlasskurve eine Veränderung in die richtige Richtung.> Ich werde eine logarithmische Darstellung brauchen.>> Den Verlauf vom Betrag des komplexen Korrelationskoeffizienten habe ich> mit einem gleitenden IIR Mittelwert verknüpft. Das Ergebnis ist im> Anhang zu sehen.
SORRY, da ist viel falsch daran.
Die Kurven zeigen irrtümlicher Weise etwas anderes.
Der gleitende Mittelwert verbessert zwar das Ausgangssignal bei viel
weissem Rauschen, ändert aber am Frequenzgang nichts. Es werden
lediglich kurze Störimpulse unterdrückt.
Nun gut. Eine Erfahrung und eine Erkenntnis. Morgen gehts weiter.
Signal Seeker schrieb:> Die ST sehe ich mir an, wie ich sie gerade benötige, sie ist> Vehikel um mit anwendbarer Software zu experimentieren.
Du weist aber ohne Wissen über ST nicht, wann du etwas benötigst und was
genau. Ohne Wissen, was es gibt, kommt man nicht auf die Idee, es
einzuplanen und zu probieren. So tastest du die Welt der
Signalverarbeitung mit try and error ab und benötigst zum völligen
Verstehen eines Sachverhaltes ein Vielfaches an Zeit.
Signal Seeker schrieb:> Sie mir abstrakt zu erarbeiten, dazu habe ich nicht die Geduld.
Beste Voraussetzungen, sich zu verrennen und alle Räder neu zu erfinden.
Das Lesen eines guten Buches garantiert, dass man richtige Informationen
bekommt und nicht auf Frickelfragerei in Foren angewiesen ist. Darf ich
mal schätzen:
Du bist U30, hast maximal bachel und eine Riesenportion
Selbstbewusstsein, alles zu packen, was du anfässt ... richtig?
Signal Seeker schrieb:> SORRY, da ist viel falsch daran.> Die Kurven zeigen irrtümlicher Weise etwas anderes.
Nö, die zeigen genau das: Die Seitenbanddämpfung ist besser, damit
filtert das Filter genauer. Und natürlich filtert es bis auf seine
Schwächen genau so, wie es gebaut wurde.
Signal Seeker schrieb:> Der gleitende Mittelwert verbessert zwar das Ausgangssignal bei viel> weissem Rauschen, ändert aber am Frequenzgang nichts.
Natürlich ändert der den Frequenzgang. Er ist ja ein Tiefpass. Ein
schlechter, aber ein Tiefpass.
Was man bei deinen verfensterten Kurven übrigens sieht:
Das Fenster ist viel zu eng. Du versuchst einen Tiefpass zu bauen,
dessen Grenzfrequenz viel zu tief ist im Bezug auf die Zahl der Samples.
Damit wirkt das Fenster selber als Tiefpass. Das Fenster und die
Filterkurve vereinigen sich ja. Da kann man den MA-Filter gleich
weglassen.
Blechbieger schrieb:> Mittlerweile gibt es die bezahlbare> Home-Lizenz,
Und warum gibt es die? Weil die open source inzwischen so stark sind,
dass MATHWORKS um seine Position bangt
Was soll jemand mit MATLAB home? Wer es wirklich braucht, hat es im
Job. Und daheim mache ich nichts, was Job ist.
Murkser schrieb:> Signal Seeker schrieb:>> SORRY, da ist viel falsch daran.>> Die Kurven zeigen irrtümlicher Weise etwas anderes.> Nö, die zeigen genau das: Die Seitenbanddämpfung ist besser, damit> filtert das Filter genauer. Und natürlich filtert es bis auf seine> Schwächen genau so, wie es gebaut wurde.
Vielleicht war das von mir nicht deutlich genug geschrieben. Durch einen
Tippfehler zeigt die Kurve keinen TP und keine Fensterung. Es wurde eine
andere, hier irrelevante Variable gezeigt. Es ist sinnlos, da etwas
hinein interpretieren zu wollen. Wie gesagt: "Die Kurven zeigen
irrtümlicher Weise etwas anderes."
Wenn ich den Tippfehler korrigiere, dann sehe ich den Frequenzgang des
Signals nachdem es erst das Korrelationsfilter durchlaufen hat und
anschliessend den TP. Die Nebenmaxima bleiben gleich hoch. Das ist
unabhängig von der Länge des GM.
Nochmals: das hilft etwas gegen weisses Rauschen, aber nicht gegen
starke Störer mit Sinussignal neben der Mittenfrequenz.
Ganz anders sieht es aus, wenn ich das Korrelationsfilter durch Faltung
mit einem Sinus nachbilde. Das ist zunächst das Selbe wie das
Korrelieren. Vor der Faltung kann ich den Kernel überarbeiten und ich
drücke die Nebenmaxima runter. Das kostet etwas Bandbreite. ABER es
kostet immens Rechenzeit. Diese Variante ist ebenfalls nicht
praktikabel.
Da wird es ein Wiener Filter brauchen.
Murkser schrieb:> Signal Seeker schrieb:>> Sie mir abstrakt zu erarbeiten, dazu habe ich nicht die Geduld.> Beste Voraussetzungen, sich zu verrennen und alle Räder neu zu erfinden.
Nun ja, manchmal ist es einfach nur Vergessenhaben. Hast du deine alten
Vorlesungs-Mitschriften noch? Ich hatte vor einiger Zeit meine
Mathe-Mitschriften hervorgekramt, um wegen der Hilbert-Transformation
mal was nachzuschlagen. Ergebnis: Ich hab wie das berüchtigte Schwein
ins Uhrwerk geschaut - in meine eigenhändigen Mitschriften. Damals war
mir das alles derart sonnenklar, daß ich sowas niemals vermutet hätte.
Ich hatte dann einige meiner Kommilitonen gefragt, wie es denen mit
sowas geht. Ergebnis: fast alles vergessen, jedenfalls die Details.
Also: es ist normal, daß man in seinem Leben manche Räder zum zweiten
Mal erfinden muß bzw. daß man einstmaliges Wissen sich neu aneignen muß,
weil man es zwischendurch schlichtweg vergessen hat.
W.S.
W.S. schrieb:> Also: es ist normal, daß man in seinem Leben manche Räder zum zweiten> Mal erfinden muß bzw. daß man einstmaliges Wissen sich neu aneignen muß,> weil man es zwischendurch schlichtweg vergessen hat.
Das kann ich definitiv bestätigen.
Es ist ja auch in Ordnung, bereits erfundene Räder zu entdecken, oder
für sich später wieder zu entdecken. Das Anpassen und Einsetzen für
aktuelle Anwendungen erfordert eh noch ausreichend Beschäftigung und
Arbeit. Aber genug der wohlfeilen allgemein gültigen Weisheiten, zurück
zu den Mühen des technischen Themas. ;)
Jetzt hab ich mal das Korrelationsfilter auf ein "leicht" verrauschtes
Signal angewendet und geschaut, ob sich das Signal rekonstruieren lässt.
OK, es liess sich rekonstruieren.
Ich möchte hier nochmals einklinken, den:
Signal Seeker schrieb:> Patrick L. schrieb:>> Schau dir mal Synthmaker, FlowBotics oder FlowStone an.>> Danke für die Antwort, das scheint mir nicht das zu sein, was ich zur> Zeit brauche.>> Ich arbeite mich grad in die Basics von DSP ein und beschränke mich auf> Audio Anwendungen d.h. für mich Tonfilter, Rauschunterdrückung,> Störaustastung, Weak Signals, Demodulation von OOK, AFSK, BPSK,> Sprachkompression, Bandbreitenbegrenzung, Squelch, selektiver Squelch.> Basics heisst im Moment, dass ich alles zu Fuss programmiere und kein> Elemente aus Libs zusammen hänge.
Weil grad Synthmaker und FlowStone, sind in dem Sektor extrem Stark mit
dem DSP Libs bewandert.
ich habe sehr viele Audiosachen, mit SynthMaker realisiert.
Auch schon einige Mesgeräte Software mit FlowStone umgesetzt.
Im Forum von FlowStone sind Tausende beispiele für Filterschaltungen,
wie ich sie hier im Forum Thread bis jetzt gelesen habe.
Gruß Patrick
Damit man die Stärken des Korrelationsfilters wirklich gut nutzen kann
und dabei nicht all zu viel Rechenzeit braucht, empfiehlt es sich, das
filternde Programm auf das im Zeitraster gesendete Signal zu
synchronisieren.
Ein relativ einfacher synchronisier Algorithmus liess sich im scilab
bequem entwickeln und testen.
Signal Seeker schrieb:> auf das im Zeitraster gesendete Signal zu> synchronisieren.
... das kennt man aber in der Regel nicht. Im Gegenteil - das ist zur
annehmenden domain völlig asynchron.
noch einer schrieb:> ... das [Zeitraster] kennt man aber in der Regel nicht.
jein
Die Zeitpunkte, an denen Zustands Änderungen eintreten können, sind
zunächst meistens nicht bekannt. Selbst wenn wenn zu bekannten
Zeitpunkten gesendet wird, verderben Laufzeiten, Verarbeitungszeiten und
veränderliche Reflexionen (Ionosphäre) die Möglichkeit, ohne Weiteres
synchron zu empfangen.
ABER die Abstände der entscheidenden Zeitpunkte sind mit hinreichender
Genauigkeit bekannt. Das ist bei präzise gegebener Morse Telegrafie so,
beim klassischen Fernschreiben und bei den modernen digitalen
Übertragungstechniken ebenfalls.
Es ist daher nur erforderlich, den Kanal zu beobachten und Korrelationen
aus zu werten. Dass Letztere noch stark Fehler behaftet sind, ist
unerheblich. Es ist ausreichend, Tendenzen zu erkennen, um die abtast
Zeitspannen zu verschieben. Das realisiert man am Besten iterativ.
Sobald die Abtastung eingerastet ist, kann man noch einen eventuell
vorhandenen Fehler der abtast Frequenz ausregeln. Mit diesen
Voaussetzungen kann dann ein Korrelationsfilter oder ähnlich Zeit
aufwändige Techniken verwendet werden, da der Grossteil der Rechnerei
nur jeweils am Ende der Bits nötig ist. Die fortlaufende Decodierung
erfolgt nun synchron im Raster. Der Auswertungs Takt wird natürlich über
Fehler hinweg und über Sendepausen aufrecht erhalten.
In der geposteten Grafik ist der Vorgang zu sehen. Bildunterschrift und
die Legende sollten Näheres erläutern.
Signal Seeker schrieb:> In der geposteten Grafik ist der Vorgang zu sehen. Bildunterschrift und> die Legende sollten Näheres erläutern.
ja genau, völlig eindeutig. Braucht keinen Text. Alles verstanden.
Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
Groß- und Kleinschreibung verwenden
Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang