logo
Welcome, Guest. Please Login or Register.
02. May 2024, 23:26:11


Home Help Search Login RegisterWIKIUHSDR Download

Amateurfunk Sulingen
Diskussions- und Newsboard des DARC-Ortsverbandes I40  |  allgemeine Kategorie  |  mcHF Projekt Deutsch / English (here you can discuss everything related to mcHF) (Moderators: DF8OE, DL1PQ)  |  Topic: Firmware-Modifikation Audio-Filter <- zurück vorwärts ->
Pages: 1 [2] 3 4 Go Down Print
   Author  Topic: Firmware-Modifikation Audio-Filter  (Read 5999 times)
DB4PLE
positron
Urgestein
*****

Offline

Posts: 1278





View Profile
Re:Firmware-Modifikation Audio-Filter
« Reply #15 on: 04. February 2016, 16:19:30 »

Hallo,

---
Ich habe mir kurz den vorherigen Beitrag angeschaut, ja im Prinzip geht es so auch genauso gut. Bei meiner Vorgehensweise muss man beim push nichts eingeben, geht gleich ins eigene Repository.

Git ist halt flexibel. Wichtig ist die richtige Nutzung von git rebase, denn sonst ist der Pull für den Empfänger sehr aufwendig, wenn andere schon was geändert.
---


Auf der Basis meines üblichen Workflows folgende Anleitung [Vermutlich geht es auch ganz anders, aber so funktioniert es bei mir gut]

Also los gehts:

Ich will mitarbeiten bei einem GitHub-Projekt und nutze Windows, was brauche ich:

- Tools

Git für Windows: https://git-scm.com/download/win 

Putty ist ein SSH Client und ermöglicht einfaches Bereitstellen der eigenen Entwicklungen.
Git für Windows enthält allerlei nützliches (Eine Kommandzeile mit Bash, Git-Gui für bequemes Bereitstellen der eigenen Entwicklungen).


- Was noch:

Github Account


Vorgehensweise:

- Installiere Putty mit allen Tools.
- Installiere Git für Windows mit allen Tools. Wenn man gefragt wird, ob man Plink verwenden will, sagt man ja.

- Jetzt sollten im Explorer zusätzliche Menüeinträge  sein, wenn man auf Ordner klickt mit der rechten Maustaste klickt (Git Init Here, Git Bash, usw. )

1. Schritt SSH Schlüssel für Git anlegen:

- Jetzt Git Bash aus dem Kontextmenü starten. Eine Kommandozeile erscheint.
- Folgendes Kommando ausführen:

ssh-keygen

Die Standardeinstellungen abnicken und sinnvollerweise ein Password vergeben für die erzeugten Schlüssel.

- Der öffentliche Teil des Schlüssel muss im eigenen Github Account hinterlegt werden. Er findet sich in c:/Users/<anwendername>/.ssh/id_rsa.pub , das ist eine Textdatei.
Bei den persönlichen Einstellungen findet sich der Eintrag SSH Keys. Dort den Key ablegen. Da gibt es auch Tips, wie man sich den
Key erzeugt.

- Nun aus dem Putty  Menü unter Windows Programmen Puttygen starten. Dort den eben erzeugten Key laden (Load), dazu diesmal id_rsa ohne die Endung .pub nutzen.
  Hier wird nach dem Password von oben gefragt. Dann auf "Save Private Key" klicken und selbigen speichern (Ort beliebig, Endung ist ppk, hier kann man gerne das gleiche Passwort verwenden.
- Jetzt diese Datei irgendwo ablegen, wo man sie wiederfindet. Vor der Kommunikation mit Github muss man diese ppk doppelklicken und sein Password eingeben.
  Dann läuft ein Dienst, der sich automatisch gegenüber Github ausweisen kann (d.h. es muss kein Password mehr eingegeben werden bei den üblichen Git-Operationen auf dem entfernten Repository).
  Ich packe diese Datei in den Autostart-Ordner, dann fragt Windows einmal beim Start und dann kann ich loslegen.
 
- Damit ist die Tooleinrichtung soweit abgeschlossen.

2. Eigenes Git Repository in github.com aus DF8OE forken (dazu braucht es nur einen Klick in der Weboberfläche).

3. Eigenes lokales Git Repository aus dem Fork clonen, nicht das von DF8OE:
- Im eigenen Account die URL zum Klonen kopieren
- In einem leeren Ordner über das Kontextmenü die Git Bash starten. Nun folgendes machen:
git clone <url> eintippen/reinkopieren aber nicht Enter drücken. In der URL  "https://github.com/" durch "git@github.com:" ersetzen.
- Falls man das nicht am Anfang gemacht, nicht schlimm, kann auch später ändern.
- Jetzt sollte sich bei Ausführung des Kommandos das Repository manifestieren.

4. Das Repository von DF8OE mit "anmelden". Dazu muss die Datei config im Verzeichnis.git erweitert werden:

[remote "df8oe"]
        url = https://github.com/df8oe/mchf-github.git
        fetch = +refs/heads/*:refs/remotes/df8oe/*

oder mit dem Kommando

git remove add df8oe https://github.com/df8oe/mchf-github.git

den gleichen Effekt erzielen

5. In der Git Kommandozeile

git fetch df8oe

eingeben. Jetzt sollte was passieren. BTW, in der Kommandozeile kann man TAB drücken, dann werden viele Sachen automatisch ergänzt.

6. Git-GUI das Deutschsprechen abgewöhnen: http://www.werisworld.ch/blog/git-gui-von-deutsch-auf-englisch-umstellen

Basis-Setup abgeschlossen :-)

Zum Workflow:

Im Prinzip ganz einfach, aber mit Tücken. Man checkt sich den Branch aus, auf dem man arbeiten will:

Der Branch devel-DF8OE wäre ein sinnvoller Branch für den Anfang.

"git checkout devel-DF8OE" ausführen oder im Git-GUi entsprechenden Branch auswählen.

Diese Auswahl wählt den LOKALEN Branch "devel-DF8OE", das hat nichts mit dem Repository von df8oe oder dem eigenen bei github zu tun.

Jetzt besorgt man sich den aktuellen Inhalt von df8oe und appliziert die Änderungen auf den eigenen lokalen Branch:
Hat man eigene Änderungen gemacht, vorher diese "sichern"

git stash

Dann

git fetch df8oe; git rebase df8oe/devel-DF8OE

Hier gibt es 2 Szenarien, es klappt ohne Problem (auch wenn man schon eigene Änderungen gemacht hat, die wendet git dann automatisch an)
oder eben nicht. Dann muss man manuell mit mergen ran, das ist nicht so trivial, dazu ggfs. später mehr. git zeigt auf der Konsole viele Hinweise, dann googlen oder mal fragen.

Hat man vorher git stash gemacht, ist das Gegenstück

git stash pop

Damit sind die eigenen Änderungen (z.B. neue Dateien) wieder da.


Jetzt entwickelt man fleißig, macht so oft wie möglich git rebase wie oben beschrieben, damit man auf dem aktuellen Stand bleibt.
Sonst kommt der Ärger hinterher. Dazu gleich.


Jetzt will man seine Arbeiten der Öffentlichkeit präsentieren:

Entweder einen commit mit der Kommandozeile machen, oder (so mache ich es) mit git-gui.
Das zeigt alle Änderungen an. Dann muss man die gewünschten Dateien markieren und mit Stage to Commit (CTRL-T) fürs "einchecken" bereitstellen.
Dann noch eine aussagekräftige Message geschrieben und Commit drücken.

Jetzt ist der Commit lokal bekannt, aber noch nicht in GitHub. Auf das DF8OE Repository darf man normal nicht direkt schreiben, also
erstmal ab ins eigene Repository, dazu einfach

git push

eingeben oder den Knopf drücken. Hat das funktioniert, steht nur noch
der Pull-Request an. Denn muss man im Web-Interface machen, github schlägt das sogar direkt vor. Wichtig ist dabei, das man die richtigen Branches auswählt.

Das wars.

Ist aus der Erinnerung geschrieben, d.h. manche Sachen sind vielleicht nicht ganz exakt dargestellt. Bei Gelegenheit könnte man den Text noch schöner formatieren. Nicht heute.
Logged
DD4WH
positron
alter Hase
****

Offline

Posts: 462



Ich liebe dieses Forum!

View Profile
Re:Firmware-Modifikation Audio-Filter
« Reply #16 on: 05. February 2016, 14:19:37 »

Hallo Danilo,

vielen Dank! Ist sehr hilfreich! Am meisten Probleme macht bei mir das Synchronisieren meines remote-repository mit dem von Andreas. Dazu verwende ich wie von Dir geschrieben:

git fetch df8oe
git rebase df8oe/devel-DF8OE

Wie geht man denn dann damit um, wenn das nicht funktioniert? Die Fehlermeldungen finde ich höchst mysteriös, da dort auf Dateien und patches hingewiesen wird, die ich gar nicht lesen kann/aufbekomme. Und mergen ist mir auch nicht geläufig.

Eine weitere Frage wäre, wie ich denn Änderungen, die ich in meinem devel-DF8OE lokal gemacht habe, wieder zurücksetzen kann, auch wenn ich dafür keinen eigenen branch gemacht habe. Geht das überhaupt?

73 de Frank

Logged

-----------------------------------------
Teensy Convolution SDR
https://github.com/DD4WH/Teensy-ConvolutionSDR
DB4PLE
positron
Urgestein
*****

Offline

Posts: 1278





View Profile
Re:Firmware-Modifikation Audio-Filter
« Reply #17 on: 05. February 2016, 18:07:07 »

Hallo Frank,

Quote from: DD4WH on 05. February 2016, 14:19:37
Hallo Danilo,

vielen Dank! Ist sehr hilfreich! Am meisten Probleme macht bei mir das Synchronisieren meines remote-repository mit dem von Andreas. Dazu verwende ich wie von Dir geschrieben:

git fetch df8oe
git rebase df8oe/devel-DF8OE

Wie geht man denn dann damit um, wenn das nicht funktioniert? Die Fehlermeldungen finde ich höchst mysteriös, da dort auf Dateien und patches hingewiesen wird, die ich gar nicht lesen kann/aufbekomme. Und mergen ist mir auch nicht geläufig.
Das ist nicht so einfach zu erklären, die Patches sind schon da, nur ordentlich versteckt, da muss man genau die Pfad-Angaben lesen.

Wenn man vor den eigenen Änderungen rebase macht, ist das oft unproblematisch. Wenn das Kind in den Brunnen gefallen ist,
dann kann man sich da Schritt für Schritt durcharbeiten, d.h. die Konflikte identifizieren, dazu in den betroffenen Dateien mal nach
den 3 Zeichenfolgen >>>>> / ====== / <<<<<< suchen, das sind die nicht automatisch gemergten Änderungen.
Diese Stellen bearbeiten (d.h. alle Marker entfernen und die richtigen Änderungen übriglassen, oder ganz was neues schreiben, und dann rebase --continue aufrufen).
Solange bis git zufrieden ist. Das kann mühselig sein und ist natürlich auch ein bißchen gefährlich, wenn nicht aufpasst, was man jetzt beim Zusammenführen (Mergen) so macht.

Nicht ohne Grund ist diese Dokument recht umfangreich:

https://git-scm.com/book/en/v2/Distributed-Git-Contributing-to-a-Project



Quote from: DD4WH on 05. February 2016, 14:19:37
Eine weitere Frage wäre, wie ich denn Änderungen, die ich in meinem devel-DF8OE lokal gemacht habe, wieder zurücksetzen kann, auch wenn ich dafür keinen eigenen branch gemacht habe. Geht das überhaupt?
Alle Änderungen sind erstmal lokal und nicht im Branch.

Geänderte Dateien, nicht "commited"

- Alles auf Anfang (Zustand des lokalen Branches wie beim checkout):
Code:
git reset --hard


- Einzelne Dateien (siehe auch "git status" output)

Code:
git checkout -- <pfad/dateiname>

Oder in git-gui (mache ich immer): Dateien selektieren dann im Menü Commit/Revert Changes

Weiterführendes zu den Fragen von Dir: https://git-scm.com/book/be/v2/Git-Basics-Undoing-Things

Diese Quelle ist in jedem Fall ein Tip wert: https://git-scm.com/book/en/v2  (wenn auch nicht immer einfach zu verstehen).

73
Danilo
« Last Edit: 05. February 2016, 18:08:00 by DB4PLE » Logged
DD4WH
positron
alter Hase
****

Offline

Posts: 462



Ich liebe dieses Forum!

View Profile
Re:Firmware-Modifikation Audio-Filter
« Reply #18 on: 05. February 2016, 18:17:11 »

Ach so, damit hatte ich nicht gerechnet, dass in meine Dateien direkt hinein geschrieben wird!

Der Artikel, zu dem Du verlinkst, sieht so aus, als könnte er meine Probleme lösen, vielen Dank! Ich habe offensichtlich noch viel zu tun und zu lernen . . . ;-)

Jetzt sollte ich erstmal eine sehr gute Infobasis haben, wäre schön, wenn ich mich bei Fragen nochmal melden könnte!

73 de Frank DD4WH
Logged

-----------------------------------------
Teensy Convolution SDR
https://github.com/DD4WH/Teensy-ConvolutionSDR
DB4PLE
positron
Urgestein
*****

Offline

Posts: 1278





View Profile
Re:Firmware-Modifikation Audio-Filter
« Reply #19 on: 05. February 2016, 19:24:44 »

Hallo Frank,

das mit dem direkt reinschreiben machen viele Versionkontrollsysteme so oder so ähnlich.

Übrigens kann man mit git rebase --abort auch wieder den Ursprungszustand herstellen.
Das erzählt git einem übrigens auch, wenn man einen rebase macht.

Frage: klar, warum nicht.

73
Danilo
Logged
DD4WH
positron
alter Hase
****

Offline

Posts: 462



Ich liebe dieses Forum!

View Profile
Re:Firmware-Modifikation Audio-Filter
« Reply #20 on: 27. February 2016, 14:10:58 »


Gibt es in der community noch spezielle Wünsche für Filter-Breiten/-charakteristika, die derzeit nicht implementiert sind?

Plan ist, als einen ersten Versuch folgende Filter zuzufügen / zu modifizieren (nur receive! und alle auch abschaltbar im menu):

2k7 - als 150Hz - 2700Hz bandpass und 2700Hz lowpass (für HiFi-SSB)
2k9 - als 150Hz - 2900Hz bandpass und 2900Hz lowpass (für HiFi-SSB)
3k6 - Option lowpass hinzufügen
WIDE-Filter durchschaltbar wie normale Filter (alle einzeln im Menu abschaltbar) und nicht mehr nur EIN Wide-Filter wählbar und Bandbreite im Menu verstellbar

73 de Frank DD4WH

Logged

-----------------------------------------
Teensy Convolution SDR
https://github.com/DD4WH/Teensy-ConvolutionSDR
DF8OE
Administrator
*****

Offline

Posts: 6268



Stellvertr. OVV I40, Jugend / Nachwuchsreferent

View Profile WWW
Re:Firmware-Modifikation Audio-Filter
« Reply #21 on: 27. February 2016, 15:02:28 »

Hallo Frank,

ich würde die Version mit dem per Drehencoder veränderbaren Filter bevorzugen. Es erspart zusätzliche Filereinträge und löst jeden Wunsch...

vy 73
Andreas
Logged

Wenn der Wind des Wandels weht, nageln die einen Fenster und Türen zu und verbarrikadieren sich. Die anderen gehen nach draußen und bauen Windmühlen...
qrz.com-Seite von DF8OE
-----------------------------------------------------
>>>> Die Inhalte meiner Beiträge dürfen ohne meine explizite Erlaubnis in jedwedem Medium weiterverbreitet werden! <<<<
DD4WH
positron
alter Hase
****

Offline

Posts: 462



Ich liebe dieses Forum!

View Profile
Re:Firmware-Modifikation Audio-Filter
« Reply #22 on: 27. February 2016, 15:59:56 »


Nicht so schnell, Andreas ;-), per Drehencoder wäre dann erst die zweite Version ;-)

So hatte ich mir das gedacht:

- mit Encoder 3 wird die Bandbreite des filters eingestellt
- bei der jeweils eingestellten Bandbreite wird automatisch und sofort das filter geschaltet, das man in den menu-Einträgen als ON fixiert hat (z.B. also bei 2k3 das filter mit der gewünschten Mittenfrequenz)
- Einstelloptionen (Mittenfrequenzen wählbar) für die Filter 300Hz, 500Hz, 1k8, 2k3 so wie zur Zeit von Clint implementiert
- Einstelloptionen für Filter ab 2k3: wahlweise als bandpass (ab 150Hz) oder als lowpass oder OFF einstellbar
- ab 4k0 nur noch als lowpass (bandpass ergibt dann m.E. keinen Sinn mehr)
- man müsste dann nochmal im unteren Bereich überlegen: die CW-Fans sollten ohne viel Aufhebens ihre 300Hz/500Hz-Filter wählen können mit dem Drehencoder. Das könnte man so lösen, dass dann ein reiner CW-Benutzer alle anderen filter auf off stellt, so dass der encoder nur noch 300Hz/500Hz auswählen kann (Mittenfrequenz dann wie gehabt genauso wie im menu eingestellt).

Aufgrund der sehr komplexen Berechnung und der damit manchmal verbundenen Instabilität der IIR-Filter (daher berechne ich diese Koeffizienten zur Zeit in MATLAB, wie von Clint vorgeschlagen) glaube ich nicht, dass wir die Filterkoeffizienten im mcHF selbst berechnen können (das schreibt auch Clint in seinem manual zur firmware, wer da aber eine schöne Formel hat, her damit ;-), aber bitte eine Version für die steilflankigen, aber dann auch bitte stabilen elliptischen Filter, Linkwitz-Riley ist relativ einfach on-the-fly zu berechnen, aber hat auch nur 48db/oct --> elliptic hat als lowpass 2,5 mal so steile Flanken).

Die Wahl mit dem encoder würde also "nur" eine stufenweise Auswahl der Filter ermöglichen, für die die Koeffizienten schon vorberechnet sind. Zur Zeit habe ich das für folgende Filter schon vorbereitet (bzw. sind einige der Filter ja schon von unserem genialen Clint berechnet worden):

300Hz, 500Hz, 1k4, 1k6, 1k8, 2k1, 2k3, 2k5, 2k7, 2k9, 3k0, 3k1, 3k2, 3k4, 3k6, 3k8, 4k0, 4k2, 4k4, 4k6, 4k8, 5k0, 5k5, 6k0, 6k5, 7k0, 7k5, 8k0, 8k5, 9k0, 9k5, 10k0

Benötigen wir im unteren Bereich noch Zwischenstufen? Falls ja, würde ich aber darauf verzichten, für diese dann auch noch alle Mittenfrequenzen zu berechnen wie bei 300Hz/500Hz. Das hielte ich für ein bisschen overkill, braucht ja auch Speicher, also für diese nur 150Hz- Bandpass und lowpass-Version . . .

Kommentare erwünscht, aber bitte keine zu hohen Erwartungen an die Geschwindigkeit der Implementierung, ich bin git- und Eclipse-Anfänger.

73 de Frank
Logged

-----------------------------------------
Teensy Convolution SDR
https://github.com/DD4WH/Teensy-ConvolutionSDR
DF8OE
Administrator
*****

Offline

Posts: 6268



Stellvertr. OVV I40, Jugend / Nachwuchsreferent

View Profile WWW
Re:Firmware-Modifikation Audio-Filter
« Reply #23 on: 27. February 2016, 16:29:02 »

Hallo Frank,

eine in-time Berechnung hatte ich auch schon ausgeschlossen. Aber die Filter nehmen als Array auch nicht so viel Platz weg, dass das ein Problem wäre. Vorberechnete Filter sind also die Wahl!

Die Vorschläge deiner Abstufung halte ich auch für sinnvoll.

Wie die Filer dann anzuwählen sind (mit Bedingungen zu welchem Mode welchses Filteranwählbar sein sollte) wäre der nächst Schritt, der aber NACH diesem ersten stattfinden kann und sollte.

vy 73
Andreas
Logged

Wenn der Wind des Wandels weht, nageln die einen Fenster und Türen zu und verbarrikadieren sich. Die anderen gehen nach draußen und bauen Windmühlen...
qrz.com-Seite von DF8OE
-----------------------------------------------------
>>>> Die Inhalte meiner Beiträge dürfen ohne meine explizite Erlaubnis in jedwedem Medium weiterverbreitet werden! <<<<
DB4PLE
positron
Urgestein
*****

Offline

Posts: 1278





View Profile
Re:Firmware-Modifikation Audio-Filter
« Reply #24 on: 27. February 2016, 16:32:57 »

Hallo,

ich habe ja nicht so viel Ahnung von dem ganzen Filtergeschäft, aber eine Frage:

Ich nehme an, jeder Filter ist vollständig durch seine Koeffzienten beschrieben, d.h.
im Grund  ist jeder Satz Filterkoeffizienten für genau eine Kombination aus Mittenfrequenz und Bandbreite gerechnet. Richtig?

Hintergrund der Frage ist der Aufbau einer vernünftigen Datenstruktur zur Verwaltung der Filter. Das ist im aktuellen Code, sagen wir mal, verbesserungswürdig. Und wenn da noch ordentlich Filter dazukommen (oder wieder raussollen), sollte man sich darüber auch Gedanken machen.

Meine aktuelle Idee wäre ein Filter Descriptor für jeden verfügbaren Filter, der einen Verweis auf die Koeffizienten und den Namen des Filters für die Anzeige enthält, seine Mittenfrequenz, und Bandbreite. (Oder welche Angabe ihr da als wichtig erachtet).


Diese würden dann wiederum entsprechend der jeweiligen "Filtersatz"  zugeordnet werden (und in einem Array pro Filtersatz gespeichert werden).

Auch die Auswahl der gewünschten Filter sollte in einer ordentlichen Datenstruktur abgelegt werden und dem Nutzer angezeigt werden. Da programmiert man sich zur Zeit schon ein bißchen den Wolf.

Wenn man das ordentlich macht, sind neue Filter rein und raus "A piece o cake". Wenn nicht, probiert es selber aus :-)

73
Danilo
Logged
DF8OE
Administrator
*****

Offline

Posts: 6268



Stellvertr. OVV I40, Jugend / Nachwuchsreferent

View Profile WWW
Re:Firmware-Modifikation Audio-Filter
« Reply #25 on: 27. February 2016, 17:19:58 »

Ja Danilo, Du brauchst zwei Arrays, um ein Filter mathematisch zu beschreiben (pkCoeffs und pvCoeffs). Und wenn Du es als LPF anstelle von BPF auslegst, brauchst Du diese beiden für jede Mittenfrequenz nochmal. Die Datenmenge ist überschaubar.

Wenn wir die von Dir anvisierte Struktur zur Filerauswahl anlegen, kann man Filter mit "einer Funktion" komplett verarbeiten: also Daten, Name etc.

Wenn allerdings die Filter, die Frank da aufgezählt hat, berechnet und drin sind, wird es keine Wünsche mehr nach weiteren Filterbandbreiten geben, denke ich 

vy 73
Andreas

PS:
Das warme Bad hat die Erkältung ein paar Zentimeter absacken lassen so dass Teile des Gehirns wieder "frei liegen"
« Last Edit: 27. February 2016, 17:20:46 by DF8OE » Logged

Wenn der Wind des Wandels weht, nageln die einen Fenster und Türen zu und verbarrikadieren sich. Die anderen gehen nach draußen und bauen Windmühlen...
qrz.com-Seite von DF8OE
-----------------------------------------------------
>>>> Die Inhalte meiner Beiträge dürfen ohne meine explizite Erlaubnis in jedwedem Medium weiterverbreitet werden! <<<<
DD4WH
positron
alter Hase
****

Offline

Posts: 462



Ich liebe dieses Forum!

View Profile
Re:Firmware-Modifikation Audio-Filter
« Reply #26 on: 27. February 2016, 17:52:01 »

ja, die beiden arrays braucht man für ein IIR-Filter (die im mcHF sind in einer besonderen Form, der lattice ARMA - Form und beschreiben vollständig das Filter, unabhängig davon, ob es lowpass, bandpass, highpass, oder notch ist), das ist aber nur das post-Filter. Wir brauchen auch noch in SSB die beiden Hilbert-FIRs als pre-filter und nach der decimation und dem DSP & AGC noch das interpolationsfilter. (In AM sind die beiden pre-Filter normale FIR-Filter) --> siehe meine Excel-Tabelle am Anfang dieses threads. (FM habe ich noch nicht ganz durchschaut, aber da geht das wieder etwas anders). Ich habe noch nicht genau festgelegt, welche Bandbreiten die prefilter haben sollten für jede einzelne post-filter-Bandbreite, aber sicherlich wird es nicht für jede post- eine genau entsprechend pre-filter-Bandbreite geben, das ist bei den excellenten IIR-Filtern ("brickwall") nicht nötig. --> siehe dazu auch das Manual von Clint ("Filter-related items" und "AM mode reception")

D.h. so einfach ist das für uns dann doch nicht, man könnte höchstens ein array erstellen, das alle diese Dinge für die gesamte Filterkette enthält. Aber wie Andreas schon andeutet, ob das den Aufwand lohnt . . . ich könnte das z.B. nicht programmieren, ich bin froh, dass ich den momentanen Zustand ungefähr durchschaue und ungefähr weiß, welche gefühlt 10-12 Orte ich für eine Filterergänzung verändern muss. Aber ich ahne, dass hier auch der Wunsch nach Eleganz in der Programmierung und nicht nur der Eleganz der Funktion zugrunde liegt ;-)

Ich versuche mal in der nächsten Woche einen ersten pull request zum  Thema zu machen.

73 de Frank DD4WH

P.S.: siehe Anhang: So sehen die IIR-Filter im mcHF aus: einmal als Tiefpass 2700Hz, dann die Bandpass-Version 150 - 2700Hz. Die haben sich die Bezeichnung "brickwall" verdient . . .

[img][/img]
 LPF_2k7.jpg
« Last Edit: 27. February 2016, 17:54:46 by DD4WH »
Logged

-----------------------------------------
Teensy Convolution SDR
https://github.com/DD4WH/Teensy-ConvolutionSDR

DD4WH
positron
alter Hase
****

Offline

Posts: 462



Ich liebe dieses Forum!

View Profile
Re:Firmware-Modifikation Audio-Filter
« Reply #27 on: 27. February 2016, 17:52:24 »

[img][/img]
 BPF_150_2k7.jpg
Logged

-----------------------------------------
Teensy Convolution SDR
https://github.com/DD4WH/Teensy-ConvolutionSDR

DF8OE
Administrator
*****

Offline

Posts: 6268



Stellvertr. OVV I40, Jugend / Nachwuchsreferent

View Profile WWW
Re:Firmware-Modifikation Audio-Filter
« Reply #28 on: 27. February 2016, 19:07:43 »

Hallo Frank,

was  "Eleganz"und "Funktion" angeht brauchst Du nicht beides in einem zu servieren. Es reicht, wenn Du die Funktion erstellst Die Eleganz macht dann halt ein anderer - das ist ein Community-Projekt und wir haben nicht alle den gleichen Stand sowohl in der Programmierung als auch in den sonstigen Kenntnissen. Aber wenn wir von jedem das Beste in den Topf werfen - dann sind wir ganz weit vorne

vy 73
Andreas
Logged

Wenn der Wind des Wandels weht, nageln die einen Fenster und Türen zu und verbarrikadieren sich. Die anderen gehen nach draußen und bauen Windmühlen...
qrz.com-Seite von DF8OE
-----------------------------------------------------
>>>> Die Inhalte meiner Beiträge dürfen ohne meine explizite Erlaubnis in jedwedem Medium weiterverbreitet werden! <<<<
DD4WH
positron
alter Hase
****

Offline

Posts: 462



Ich liebe dieses Forum!

View Profile
Re:Firmware-Modifikation Audio-Filter
« Reply #29 on: 02. March 2016, 20:52:44 »

Habe nun ein bisschen ausprobiert, wie man die vielen geplanten Filter-Optionen am besten implementieren kann.

Clint hat die Filter schon sehr elegant und CPU-rechentechnisch sparsam ausgelegt!

Wenn man die jetzt erweitern will, muss man sehr aufpassen, dass die Filter auch noch klingen, weil das Zusammenspiel der Filter erst den Gesamtklang und die Blockung der alias-frequenzen ergibt. Letztere entstehen ja bei der Decimation und der Interpolation.

Unsere Soundkette sieht im Moment so aus:

FIR (AM) oder phase-added Hilberts (SSB) (jeweils 89 taps) --> FIR Decimation (4 taps) --> IIR (8th/10th order) --> FIR interpolation (16 taps)

und dazwischen noch allerhand DSP und gain-anpassung bzw. AGC.

Je mehr taps oder je höher die order, desto steiler die Filter, aber auch desto rechenintensiver.

Dabei ist mir aufgefallen, dass das Interpolations-Filter, das die Alias-frequenzen nach der Interpolation vermindern soll, ein 16 tap FIR-Filter ist und daher nicht besonders steil sein kann. Es ist für das 3k6-Filter grenzwertig und für die geplanten Filter von 3k8 bis 4k8 ungeeignet, weil dann die entstehenden Alias-Frequenzen bei einer sample rate von 12ksps so ungefähr bei 12kHz - 4k8 = 7.2kHz liegen. Bei 7.2kHz hat das 16 tap FIR anti-alias-Filter aber nur -20dB Dämpfung --> daher hört man diese Frequenzen sehr stark, ungünstig!
Meine Idee war nun, ein zusätzliches anti-alias-Filter direkt danach zu implementieren, und zwar als IIR-Filter 6th order (weil es nach der interpolation kommt, arbeitet es mit 48ksps). Das braucht natürlich zusätzliche Rechenpower, aber dafür kann man das eigentliche anti-alias-FIR-Filter (das ja auch bei 48ksps arbeitet) auf 4 taps verkleinern (durch die eingebaute ARM-Funktion brauchen wir mindestens 4 taps, sonst könnten wir es ja auch einfach ersetzen durch das IIR) und man hat Rechenpower gewonnen. Ich habe versucht, das zu bilanzieren und bin da aber nicht so versiert, vielleicht hat ja jemand einen besseren Überblick über diese Dinge:

IIR 6th order: 13 Multiplikationen
FIR 16 taps: 16 Multiplikation

In der Bilanz sind wir dann also bei FIR 4 taps gefolgt von IIR 6th order --> 17 Multiplikationen, also nur eine mehr als vorher! Wir gewinnen allerdings dadurch eine viel bessere alias-Unterdrückung bei den hohen Bandbreiten, weil das IIR-anti-alias-Filter viel steiler ist ;-).

Die neue soundkette sähe also so aus:

FIR oder phase-added Hilberts (89 taps) --> FIR Decimation (4 taps) --> IIR (8th/10th order) --> FIR interpolation (4 taps) --> IIR (6th order)

Probeweise habe ich das schon implementiert -allerdings nur für Bandbreiten 5 - 10kHz und es läuft damit prima auf meiner Kiste --> test für die niedrigen Bandbreiten stehen allerdings noch aus.

Ich bin mir allerdings nicht sicher, ob ich etwas übersehen habe und bitte daher die Filter / DSP - Freaks unter uns um zahlreiche Kommentare, Hinweise, Kritik!

Gibt es eigentlich eine Möglichkeit, die Belastung der CPU zu messen und irgendwie zu protokollieren? Dann könnte man solche features hinsichtlich ihrer Belastung austesten und vergleichen.

73 de Frank DD4WH

Logged

-----------------------------------------
Teensy Convolution SDR
https://github.com/DD4WH/Teensy-ConvolutionSDR
Pages: 1 [2] 3 4 Go Up Print 
Diskussions- und Newsboard des DARC-Ortsverbandes I40  |  allgemeine Kategorie  |  mcHF Projekt Deutsch / English (here you can discuss everything related to mcHF) (Moderators: DF8OE, DL1PQ)  |  Topic: Firmware-Modifikation Audio-Filter <- zurück vorwärts ->
Jump to: 


Login with username, password and session length

 Es wird die Verwendung von Browsern die auf der "Blink"-Engine basieren und mindestens
1024x768 Pixel Bildschirmauflösung für die beste Darstellung empfohlen
 
Amateurfunk Die Beiträge sind, sofern nicht anders vermerkt, unter der folgenden Lizenz veröffentlicht:
GNU Free Documentation License 1.3 GNU Free Documentation License 1.3
verbindet!
Powered by MySQL Powered by PHP Diskussions- und Newsboard des DARC-Ortsverbandes I40 | Powered by YaBB SE
© 2001-2004, YaBB SE Dev Team. All Rights Reserved.
- modified by Andreas Richter (DF8OE)
Impressum & Disclaimer
Valid XHTML 1.0! Valid CSS!