Title: Firmware-Modifikation Audio-Filter
Post by: DD4WH on 03. February 2016, 19:16:35
Im Anhang ein von mir zusammen gestellter detaillierter Überblick über die im Augenblick im mcHF implementierten Audio-Filter mit ihren Optionen. Im Moment sind in der Tabelle lediglich die Bandbreiten ab 1k8 eingepflegt.
Ich möchte nun einige Erweiterungen in die Audiofilter einbauen und möchte aber vorher hier im Forum die geplanten Änderungen kurz zur Diskussion stellen. In der Tabelle ist das konkretisiert.
Folgende Dinge habe ich vor:
1.) Basswiedergabe verbessern für die Filter 1k8, 2k3, 3k6: eine Option mehr anzuwählen im Menu --> low pass filter anstelle der bandpass filter
2.) das interpolate filter ist für alle WIDE filters dasselbe (low pass 10k), das ergibt keinen Sinn, zumal für 3k6 das interpolation filter ein 5k lowpass ist, für das 5k Filter aber ein 10k lowpass --> daher der Plan, individuelle interpolation filter für die jeweiligen Bandbreiten implementieren (auch für die kleinen Bandbreiten)
3.) eine weitere Rx bandwidth einbauen: 4k4: ist das Beste für SWL, da gute Soundqualität, aber weit genug weg von 5k und den daraus resultierenden Heterodynen durch den 5kHz Kanalabstand
4.) Ich meine einen deutlich störenden rauschig-knisternden (Alias)-Artefakt wahrzunehmen bei den WIDE FILTERS 5kHz, 6kHz, 7.5kHz: die WIDE Filter haben alle KEIN postdetection IIR Filter (übrigens werden im code die postdetection filter PREFILTER genannt . . .). In audio_driver.c wird zwar ein 10k lowpass IIR initialisiert (line 450), dann aber in line 1487 bei WIDE Filter nicht angewandt. Vielleicht kann man durch die passenden Interpolationsfilter (siehe Punkt 2) hier etwas tun, denn im Moment sind für 5k, 6k, 7.5k und 10k nur ein 10k lowpass interpolation filter implementiert. Auch könnte man ausprobieren, ob man auch in den WIDE modes ein passendes IIR postdetection filter implementiert (ob die Processor power ausreicht? Schließlich ist der decimation factor für WIDE filter nur 2 statt 4). Ganz einfach wäre natürlich ein weiteres moderates IIR filter NACH der interpolation (allerdings dann in 48ksps, was rechenintensiver ist). 5.) Das notch filter hört sich grauenvoll verzerrt an bei WIDE modes, hier ist irgendetwas faul . . . Keine Idee, was das sein könnte.
Würde mich sehr über Ergänzungen und Kommentare freuen.
Mein weiteres Vorgehen wäre (in den nächsten Wochen, bin Teilzeit-mcHFler ;-)): - Lernen, wie man github benutzt - Filter berechnen (habe schon das erste MATLAB IIR -Filter berechnet und auf dem mcHF getestet, das funktioniert sehr gut: ein brick wall 3k6-lowpass-Filter mit satter Bass-Wiedergabe) - Menu ändern, um die o.g. Änderungen einzubauen - das Ganze in einen pull request packen
73 de Frank |
Title: Re:Firmware-Modifikation Audio-Filter
Post by: daba on 04. February 2016, 07:49:52
Hallo Frank, die Tabellenform ist recht detailliert. Für den groben Überblick ist sie aber nicht so gut. Weis du ob das Diagramm in der Form noch aktuell ist (Attachement) ich bin noch dabei mir ein Überblick zu schaffen?
daba |
Title: Re:Firmware-Modifikation Audio-Filter
Post by: DF8OE on 04. February 2016, 08:07:22
Hallo Frank,
ich würde mich über Verstärkung im Team sehr freuen!
Betreffs GitHub: Das ist eine Bedingung, wenn man in einer Community programmiert :) Schreib mir bitte, mit welchem Betriebssystem Du arbeitest. Für Linux kann ich Dir einen Crashkurs in einer halben Stunde geben. Mit Windows arbeite ich seit 16 Jahren nicht mehr - ich denke aber, dass die CLI (und nur die ist sinnvoll einsetzbar) genauso funktionieren sollte. Problematisch ist nur, dass Windowsianer für gewöhnlich durch das Mausschieben völlig von Kommandozeilenprogrammen entwöhnt sind und sich im Innern vieler etwas gegen deren Benutzung sträubt ::) Aber ohne geht es nicht...
vy 73 Andreas |
Title: Re:Firmware-Modifikation Audio-Filter
Post by: DD4WH on 04. February 2016, 08:41:18
@daba: das attachment war nicht dran an Deiner Nachricht!? Clint hat in der Yahoo group mal einen Überblick gepostet, das finde ich jetzt aber so schnell nicht mehr. Meine Tabelle ist aber auch mehr eine Arbeitsgrundlage für die Filter-Modifikation und nicht als übersichtlicher Überblick gedacht.
Im Prinzip sieht der generelle Audio-Path so aus (AGC, I&Q-Korrektur, LMS NR, LMS notch filter, gain scaling etc. zur Vereinfachung alles weggelassen):
SSB:
I -- Hilbert 0 Grad---- | +/- (USB/LSB) -- FIR Decimate 4 taps -- IIR filter --> Q-- Hilbert 90 Grad --
--> FIR interpolation 16 taps
AM:
I -- FIR filter 89 taps---- | -- sqrt(I*I+Q*Q) (AM envelope detector) --> Q-- FIR filter 89 taps----
--> FIR Decimate 4 taps -- IIR filter --> FIR interpolation 16 taps
Die sample rate ist bei schmalen Filtern (< 5kHz) 12ksps (decimation by 4), bei WIDE 24ksps (decimation by 2).
Bei WIDE filter fällt zur Zeit im aktuellen Code das IIR-Filter ganz weg! Siehe die damit potenziell verbundenen Probleme in meiner letzten mail.
@Andreas: ich benutze Windows 8.1, Eclipse Mars und github. Habe mit Commandozeilen eigentlich keine Probleme, bin skriptbasierte Statistik-Programme (R) gewöhnt. Mein größtes Verständnisproblem im Moment ist, wie ich die Programme github und Eclipse koppele, so dass alles was ich in Eclipse tue, auch in der Versionsverwaltung protokolliert wird . . . Aber ich stehe bei github auch erst ganz am Anfang.
73 de Frank
|
Title: Re:Firmware-Modifikation Audio-Filter
Post by: DF8OE on 04. February 2016, 09:55:56
Nutze nicht die in Eclipse "integrierte" Githubunterstützung. Es gibt keine einzige Integration oder grafische Oberfläche, die so perfekt funktioniert wie das Kommandozeilentool. Wichtig ist auch, dass Du Dir einen GitHub-Account zulegst (sofern nicht schon geschehen) und einen Fork vom mcHF-Github machst. Das ist dann dein Arbeitsfeld. Mit git pull holst Du Dir alles aus dem GitHub auf deine lokale Festplatte. Mit einem git checkout xxxx (wobei xxxx der Branch ist, in den Du wechselbn möchtest) wechselst Du die Branches. Und richtig: Der lokale Ordner, in dem Du arbeitest, ändert seinen Inhalt mit den "Checkouts"!!!! Es ist stets das dort drin, was in dem Branch ist, den Du bearbeiten möchtest. Bearbeiten kannst Du die Quellen wie Du willst. Wenn Du "fertig" bist, führst Du zunächst ein git add durch. Damit fügst Du die Dateien dem Projekt hinzu (denn einige haben sich ja geändert). Mit einem commit -m "dies ist ein Kommentar" werden sie in dein lokales git integriert. Und zu Guter Letzt mit einem git oush origin xxxxx (wobei das xxxx der Name des entferntenBranches ist) werden sie auf dein GitHub hochgeladen. Dann musst Du nur noch einen Pullrequest stellen, und ich bekomme das dann zum Querlesen und einfügen.
Klar - da gibt es noch viel mehr zu beachten und tun. So ist die Authentifizierung bei GitHub mit einem auf deiner Festplatte liegenden Key gelöst. Das sind alles Dinge, die für einen Linuxianer, der auf der Konsole arbeitet, ganz normale Dinge die er nicht mal erwähnenswert findet und von denen ich hier sicher ein paar vergessen habe. Es gibt aber sehr gute deutsche Erläuterungen zu Github - wenn auch nicht auf einer Seite zusammengefasst. Das Gute wenn Du mit dem CLI arbeitest ist, dass Du die ganzen Linux-HowTos alle mit verwenden kannst 8)
vy 73 Andreas |
Title: Re:Firmware-Modifikation Audio-Filter
Post by: DD4WH on 04. February 2016, 10:08:18
Danke für die Anleitung! :) Ich benutze das command line tool.
Habe nun Folgendes gemacht:
- mcHF devel geclont --> ist lokal auf meiner Platte - Syncing eingestellt mit: git fetch uspstream, git checkout master, git merge upstream/master - jetzt erscheint aber auf der lokalen Platte nur die master Version?? Muss ich das anders machen mit: git fetch upstream, git checkout devel-DF8OE ? - dann habe ich Probleme, dieses lokale repository in mein repository online zu bekommen, wie geht das? Mit git push origin master habe ich es versehentlich versucht zu Dir zu schieben, was natürlich nicht ging ;-) Aber zu mir bekomme ich es auch nicht mit: git push https://github.com/DD4WH/mcHF_Test.git master
Für Hinweise wäre ich dankbar ;-)
[edit] Habe jetzt einen 2. Versuch gemacht mit: git pull https://github.com/df8oe/mchf-github.git git checkout master funktioniert, aber git checkout devel-DF8OE kennt er nicht . . . ??
stecke jetzt massiv fest . . .
73 de Frank DD4WH |
Title: Re:Firmware-Modifikation Audio-Filter
Post by: DF8OE on 04. February 2016, 10:34:37
Das mit dem lokalen clonen war schon der erste falsche Schritt. Du kannst mein mcHF GitHub mit dem Webinterface via Browser klonen.
Git Repository forken (http://www.mathsim.eu/interna/git-use.html)
Hier eine Anleitung für Git (https://svij.org/blog/2014/10/25/git-fur-einsteiger-teil-1/)
Suche zuerst mal etwas mit google - Du wirst bestimmt fündig!
vy 73 Andreas |
Title: Re:Firmware-Modifikation Audio-Filter
Post by: DD4WH on 04. February 2016, 12:35:26
Hallo Andreas,
ich kann Clint nun sehr gut verstehen :'(
Es funktioniert hinten und vorne nicht. Habe gerade github das zweite Mal neu installiert (funktioniert aber immer noch nicht ohne Administratorrechte).
Ich habe nun nach 3h auch verstanden, was forken heißt: im Browser einmal klicken. OK.
git-Account ist da. Eingeloggt. Geforkt. Deine Dateien liegen nun unter DD4WH bei github. dann funktioniert aber dieser einfache Befehl nicht:
git pull https://github.com/DD4WH/mchf-github.git
fatal: Not a git respository (or any of the parent directories): .git
Könntest Du mir da bitte nochmal weiterhelfen?
73 de Frank
|
Title: Re:Firmware-Modifikation Audio-Filter
Post by: DF8OE on 04. February 2016, 12:50:40
Ich bin Linux-User - und ich weiss schon, warum...
Gibt es hier jemanden, der mit Windows arbeitet und sich dort mit git auskennt?
Bei Linux läuft das alles out-of-the-box.
Auf jeden Fall ist der erste Schritt goldrichtig und gelungen.
vy 73 Andreas |
Title: Re:Firmware-Modifikation Audio-Filter
Post by: DD4WH on 04. February 2016, 12:58:27
naja, die Erklärung des forkens hat mit Linux nichts zu tun ;-)
Ich bin jetzt schon ein bis zwei Schritte weiter! Für andere OMs versuche ich das mal zu dokumentieren: Starten mit GitHub für den mcHF
1.) GitHub-Account einrichten 2.) Im GitHub-Progrmm einloggen 3.) Repository machen mit + 4.) Im Webaccount einloggen 5.) Fork von df8oe machen 6.) Nun in die Command shell wechseln 7.) mkdir Mein_Verzeichnis 8.) cd Mein_Verzeichnis 9.) git init 10.) git pull https:/github.com/DD4WH/mchf_github.git [die ist das von DF8OE geforkte repository] 11.) git checkout master [wechselt zum master]
Das läuft bis hierhin: Lokal habe ich jetzt die neuesten Dateien des masters, aber dann funktioniert der von Dir angegebene Wechsel des branches nicht:
12.) git checkout devel-DF8OE error: pathspec 'devel-DF8OE' did not match any file known to git
Hättest Du da nochmal einen Tipp?
73 de Frank
|
Title: Re:Firmware-Modifikation Audio-Filter
Post by: DF8OE on 04. February 2016, 13:07:51
prüfe mal mit
git branch
welche Branches Du geforkt hast. Nur den Master? Oder alle?
vy 73
Andreas |
Title: Re:Firmware-Modifikation Audio-Filter
Post by: DD4WH on 04. February 2016, 13:14:29
Danke!
bei git branch erscheint nur * master
In meinem github sind aber alle zu sehen !?
Wie forke ich denn die anderen branches noch dazu?
73 de Frank
und vielen Dank für Deine Geduld! |
Title: Re:Firmware-Modifikation Audio-Filter
Post by: DF8OE on 04. February 2016, 13:48:13
Geforkt sind sie schon - ich habe nachgesehen. Du musst sie vom entfernten in dein lokales repository übertragen. Standardmäßig ist nur der master übertragen. Du brauchst noch den devel-DF8OE.
vy 73 Andreas |
Title: Re:Firmware-Modifikation Audio-Filter
Post by: DB4PLE on 04. February 2016, 15:10:44
Hallo,
ich werde in Kürze mal meinen üblichen Github-Workflow mit Windows beschreiben. Das sollte helfen, hier mitarbeiten zu können, ohne allzusehr zu verzweifeln.
73 Danilo DB4PLE |
Title: Re:Firmware-Modifikation Audio-Filter
Post by: DD4WH on 04. February 2016, 15:38:46
Hallo Danilo,
das wäre super!
Bin jetzt auch schon gefühlt etwas weiter und habe meinen ersten pull request verschickt. Ob ich das reproduzieren kann, werde ich in den nächsten Wochen sehen . . .
Hier meine Vorgehensweise. Kannst Du gerne kommentieren/ändern/optimieren, wie gesagt, ich bin ein blutiger github-Anfänger.
Starten mit GitHub für den mcHF (zusammengestellt von DD4WH, keine Gewähr fürs Funktionieren ;-))
1.) GitHub-Account einrichten 2.) Im GitHub-Progrmm einloggen 3.) Repository machen mit + 4.) Im Webaccount einloggen 5.) Fork von df8oe machen 6.) Nun in die Command shell wechseln 7.) mkdir Mein_Verzeichnis 8.) cd Mein_Verzeichnis 9.) git init 10.) git remote add upstream https:/github.com/DD4WH/mchf_github.git [dies ist das von DF8OE geforkte repository] 11.) git fetch --all 12.) git checkout master [wechselt zum master] 13.) git checkout devel-DF8OE [wechselt zur devel] 14.) in der devel mit Eclipse programmieren/ändern oder was auch immer 15.) git add . 16.) commit –m „hier Kommentar zu den gemachten Änderungen einfügen“ 17.) git push https:/github.com/DD4WH/mchf_github.git devel-DF8OE 18.) pull request an Andreas senden 19.) Änderung ist implementiert und alle sind glücklich ;-)
Bestimmt fehlt hier noch einiges.
Zum Aktualisieren des eigenen online-forks (also Aktualisieren des geforkten online-repositories auf Grundlage von Andreas repository) habe ich dies gemacht. Passt das?
git fetch --all git checkout master git rebase git rebase upstream git status git push
73 de Frank DD4WH
|
Title: Re:Firmware-Modifikation Audio-Filter
Post by: DB4PLE 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. |
Title: Re:Firmware-Modifikation Audio-Filter
Post by: 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.
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
|
Title: Re:Firmware-Modifikation Audio-Filter
Post by: DB4PLE on 05. February 2016, 18:07:07
Hallo Frank,
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
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:
- 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
|
Title: Re:Firmware-Modifikation Audio-Filter
Post by: DD4WH 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
|
Title: Re:Firmware-Modifikation Audio-Filter
Post by: DB4PLE 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
|
Title: Re:Firmware-Modifikation Audio-Filter
Post by: DD4WH 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
|
Title: Re:Firmware-Modifikation Audio-Filter
Post by: DF8OE 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 |
Title: Re:Firmware-Modifikation Audio-Filter
Post by: DD4WH 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
|
Title: Re:Firmware-Modifikation Audio-Filter
Post by: DF8OE 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 |
Title: Re:Firmware-Modifikation Audio-Filter
Post by: DB4PLE 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
|
Title: Re:Firmware-Modifikation Audio-Filter
Post by: DF8OE 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 ;D
vy 73 Andreas
PS: Das warme Bad hat die Erkältung ein paar Zentimeter absacken lassen so dass Teile des Gehirns wieder "frei liegen" :) |
Title: Re:Firmware-Modifikation Audio-Filter
Post by: DD4WH 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 . . .
|
Title: Re:Firmware-Modifikation Audio-Filter
Post by: DD4WH on 27. February 2016, 17:52:24
Title: Re:Firmware-Modifikation Audio-Filter
Post by: DF8OE 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 |
Title: Re:Firmware-Modifikation Audio-Filter
Post by: DD4WH 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
|
Title: Re:Firmware-Modifikation Audio-Filter
Post by: DB4PLE on 02. March 2016, 21:11:48
Hallo Frank,
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.
|
|
bei den Filtern bin ich raus, aber zur Belastungsmessung kann ich was sagen: Alle relevante DSP Arbeit passiert im i2s Interrupt. Ich habe dort beim Eintritt die Powerled angeschaltet und ausgeschaltet (mchf_board_green_led(1 bzw. 0) ).
Dann Oszilloscope oder Logic-Analyzer dran. Im Zweifel reicht sogar ein Multimeter was bei 1,5khz Pulseweite ermittelt, die Einschaltzeit entspricht dem DSP Aufwand. Normal bei mir sind ca. 210 uS, d.h. ca. 30% Auslastung.
73 Danilo |
Title: Re:Firmware-Modifikation Audio-Filter
Post by: DD4WH on 04. March 2016, 10:38:38
@Danilo, vielen Dank für den Tipp! Da muss ich erstmal schauen, ob das hier funktioniert, habe nur DVM zum Messen, werde da mal in die Anleitung schauen.
@Andreas, Danilo, Alle:
Hier eine Beschreibung der audio-Filter-mods, die ich vorhabe. Kann man dann hinterher, denke ich, auch im Wiki verwenden. Wichtig wäre mir, dass klar wird, dass wir alle auf der großartigen Arbeit von Clint aufbauen.
Meine Bitte wäre, ob Ihr nochmal draufschauen könnt, ob irgendetwas noch verändert werden sollte.
Ach so, die Filter-Schalter im Menü würde ich gerne alle hinten im calibration-Menü unterbringen, bis auf die Filter 300, 500, 1k8, 2k3, 2k7, 3k6, 4k4, 6k, die sollten ins normale Menü. So ändert sich für den Nutzer nicht allzuviel. Nur diese Filter wären dann auch als default eingeschaltet (vielleicht auch sogar nur 300, 500, 1k8, 2k3, 6k), so dass nur für diejenigen, die dann ins calibration-Menü gehen, alle Filter einschaltbar sind. Das ist denke ich, ein guter Kompromiss, um die traditionellen und die innovativen user gleichermaßen mitzunehmen.
Kommentare dazu (und zum geplanten EEPROM-Verbrauch ;-) erwünscht!
73 de Frank DD4WH |
Title: Re:Firmware-Modifikation Audio-Filter
Post by: DF8OE on 04. March 2016, 15:25:36
Hallo Frank,
um eine gute und schnelle Bedienbarkeit zu bekommen, würde ich gerne folgenden Weg einbringen:
Ein Tipp (Touchscreen) auf die Filter-Anzeige schaltet den Button für 5 Sekunden auf "grün". Solange er grün ist, kann man mit dem rechten Encoder ALLE Filter durchwählen.
Über den Filtertaster kann man dagegen nur 6 auswählen. Welche, das kann man im Config-Menü frei festlegen.Wer eben mal schnell ein anders Filter will, kann durch Tippen und drehen schnell jedes beliebige andere einstellen. Die Filteranzeige springt nach 5 Sekunden Untätigkeit (oder erneutes Tippen auf die Anzeige) wieder in den Normal-Modus.
Die Zahl und die Beschreibung deiner Filter ist absolut angemessen. Da ist wirklich für jeden etwas dabei. Man sollte bedenken, dass nicht nur CWler, nicht nur SSBler oder Radiohörer den mcHF lieben und benutzen, sondern auch ein Gemisch aus all dem. Also sollten diese Filter schon drin sein.
Du hast Dir mit der Ausarbeitung schon sehr viel Mühe gemacht - vielen Dank dafür! Von mir bekommst Du ein 100%-iges GO. Die Dinge mit der UI werden sich übrigens auch nach Implementierung noch verändern. Vieles was auf Anhieb gefällt erweist sich später als verbesserungsfähig, und einige Dinge, über die man sich vorher tagelang die Köpfe heissredet, sind hinterher akzeptiert, was für eine Lösung man auch immer gewählt hat. Hier heisst es manchmal "Mut zur Lücke" und einfach mit einer Lösung anfangen
vy 73 Andreas
|
Title: Re:Firmware-Modifikation Audio-Filter
Post by: DD4WH on 04. March 2016, 16:29:19
Hallo Andreas, danke für die Ermunterung und die Idee!
werde nun die Filter angehen und danach die Bedienbarkeit erhöhen.
Man könnte die Umschaltung des encoders 3 statt mit touch auch einfach durch Drücken der Filter-Taste S5 für 5 sec aktivieren.
Oder: Am Besten fände ich, mit der jetzigen Filtertaste die Umschaltung der Funktion des encoder3 von RIT auf Filter und umgekehrt zu machen. Dann drückt man einmal auf die Taste S5 und kann mit dem encoder3 dann die Filter wählen, die man als "wählbar" im Menü eingestellt hat.
Mal schauen, da benötige ich dann später sicherlich noch mal Hilfe von Euch.
73 de Frank
|
Title: Re:Firmware-Modifikation Audio-Filter
Post by: dg9bfc_sigi on 07. March 2016, 12:47:18
Es wird wahrscheinlich am ende eine Mode abhängige filterauswahl werden .. heisst im mode cw 300, 500 1000
in ssb vielleicht 1.8, 2.4, 2.7
in am 3.6, 4.8, 9.5
(narrow mid wide)
und alle anderen filter anwählbar entweder durch langen druck auf einen taster oder eben touchpad (theoretisch beides denkbar)
die schmalen filter die für cw gemacht sind sollten im ssb mode in der mittenfrequenz auch höher einstellbar sein (zb für rtty oder psk31 ...)
das 1.4 filter wäre klasse auch für sstv (wenn höher eingestellt auf 1100-2500 also 1800 filtermitte)
das 5 khz filter bei am kann entfallen wenn gegen 4.8 ersetzt (macht den 5khz lattenzaun wech)
das 10 khz kann gegen 9.5 ersetzt werden
also jeweils ganz knapp neben dem lattenzaun abschneiden ... dann hat man guten klang und es pfeift nicht
.... im moment sind es ein paar filter zuviel ... aber man kann sich ja SEIN lieblingsfilter aussuchen .. KLASSE
ich fände es ganz praktisch wenn man ein schmales filter fü cw im mode ssb mit dem drehencoder verschieben kann über den ganzen audio bereich (also zumindest bis 3khz)
(kann ja in stufen sein und intern wird in wirklichkeit eiin anderes gewählt und es sieht nur so aus als wenn man es verschiebt)
halt für digimodes
|
Title: Re:Firmware-Modifikation Audio-Filter
Post by: DD4WH on 07. March 2016, 21:21:20
Hallo Sigi,
so ähnlich ist das in Planung, nur etwas flexibler, so dass man pro mode eine Handvoll (selbst im Menü ausgewählter) Filter zur schnellen Auswahl da sind.
Danke auch für die weiteren Anregungen! Dazu ein paar Fragen:
- Reicht es für SSTV, ein 1k4-Filter als bandpass 1100-2500Hz zusätzlich anzubieten (neben BPF und LPF) ? (Ist schon berechnet, muss nur noch eingebaut werden) - welche Filter wären für RTTY / PSK 31 notwendig ? 300Hz Bandbreite ja, aber welche Mittenfrequenz fehlt Dir da noch? - Das von Dir genannte passbandtuning ist natürlich sehr schön, aber auf viele verschiedene Weisen implementierbar (allerdings auch recht aufwendig und mit einigen Nachteilen verbunden). Bin mir aber nicht sicher, ob man das überhaupt braucht. Inwiefern macht es einen Unterschied bei CW, die Empfangsfrequenz zu ändern, oder das passband? Hat doch den gleichen Effekt, oder? Vielleicht habe ich da aber auch etwas falsch verstanden.
Da stimme ich Dir zu, dass für BCL das 4k8-Filter besser als das 5k0 ist. Aber deswegen würde ich das 4k8-Filter nicht umbenennen in 5k0. Man kann ja alle Filter ausschalten, die man nicht braucht.So ist es im Moment gedacht. Es soll dann irgendwann auch die Möglichkeit geben, die Filter-Bandbreite per drehencoder (fast ;-)) stufenlos zu verändern. Deswegen erstmal so viele schaltbare Filter.
73 de Frank |
Title: Re:Firmware-Modifikation Audio-Filter
Post by: daba on 12. March 2016, 19:01:40
Hallo Frank, das Dokument ist recht gut. Nur eine Sache vermisse ich, auch wenn sie nicht direkt mit den Filter zu tun hat, diese Betrift die Translate Funktion.... ich dachte immer if Translate then alle Filter mit 6khz Offset verwenden. Aber das ist wohl nicht so. Ich denke auch ein Block-Diagramm wäre super gut für das Verständnis. |
Title: Re:Firmware-Modifikation Audio-Filter
Post by: DD4WH on 12. March 2016, 21:40:00
Hallo daba,
Du hast recht, da muss noch einiges ergänzt werden und einiges ist auch schon wieder obsolet.
Frequency translation hat mit den Filtern im engeren Sinne nichts zu tun, da hast Du recht. Und die Filter brauchen KEIN offset, auch wenn wir eine IF = frequency translation (+-6k, +-12k) benutzen. Die IF gibt ja nur an, welchen Frequenzausschnitt in unserem I/Q-Frequenzspektrum von 48kHz wir ins Basisband umsetzen (mittig, +-6k, +-12k). Die gesamte Filterkette verläuft dann unabhängig von der IF IMMER im Basisband. Ist auch gut so, sonst müssten wir noch mehr Fiter berechnen . . . ;-)
Zum Audio-Pfad selber hatte ich in diesem thread am 2. März schon eine vereinfachte Fiterkette skizziert und natürlich hat Clint dazu auch zwei sehr schöne -nicht mehr ganz aktuelle, aber trotzdem sehr hilfreiche- Übersichtsschemata erstellt (für RX und TX), die kann ich sehr empfehlen!
https://uk.groups.yahoo.com/neo/groups/M0NKA-mcHF/conversations/messages/3722
Den link sollten wir dann hinterher auch ins Wiki übernehmen.
73 de Frank
|
Title: Re:Firmware-Modifikation Audio-Filter
Post by: DD4WH on 19. March 2016, 18:03:43
In der neuen testing sind ja nicht nur die neuen Filter drin, sondern auch eine neue interne Codierung und ein neues Schaltschema für die Filter.
--> Menü-Eintrag "filter_path"
Über dieses Menü kann man sämtliche Filterpfade einzeln schalten (sämtliche Bandbreiten mit sämtlichen Bandpasscharakteristitika jeweils separat für die Demodulationsarten CW, SSB, AM).
Hier die Tabelle zur Zuordnung der einzeln Filterpfade:
Filter_path numbers and the corresponding demodulation mode: 4 to 18: CW 19 to 65: SSB --> nicht in AM benutzen 66 to 86: AM --> nicht in SSB benutzen
(Fast) alle dieser Filter sind auch über die normale Wahlmethode per Knopfdruck wählbar, man verpasst also nichts, wenn man das nicht nutzt (außer bei AM, siehe unten) ;-)
Ich würde mich trotzdem sehr freuen, wenn sich einige mcHF-Besitzer finden würden und die Filter-paths für ihre bevorzugte Demodulationsart testen würden; alle 86 Pfade ausführlich zu testen, dafür ist die Zeit bei uns zu begrenzt . . .
Eine Besonderheit bei den AM-Filtern ist, dass die FIR-Filter-Bandbreite kleiner ist als die IIR-Filterbandbreite (Faktor 1,8). D.h. wenn man genau auf den Träger abstimmt, hat man z.B. 3k6 Bandbreite (FIR-bw) (filter_path 76), aber wenn man dann etwas daneben abstimmt, kann man durch das Verstimmen die Bandbreite bis auf 7khz (IIR-bw) erhöhen. Das ermöglicht einerseits, das ungestörtere Seitenband zu wählen, andererseits ist eine Abstimmung jenseits des Trägers weitaus unempfindlicher gegenüber selektivem fading (wird auch "side-band-selected AM demodulation" genannt).
Feedback willkommen!
73 de Frank DD4WH |
Title: Re:Firmware-Modifikation Audio-Filter
Post by: DF9EH on 20. March 2016, 08:05:34
Moin Frank, bei dem Schaltschema für die Filter stehe ich zugegeben etwas auf dem Schlauch. Bitte um Nachhilfe was die Funktion und Bedienung angeht, da habe ich irgendwie noch einen Knoten im Hirn.
Schon mal Danke. |
Title: Re:Firmware-Modifikation Audio-Filter
Post by: DD4WH on 20. March 2016, 11:04:25
Moin, Klaus,
das ist noch KEIN neues feature, rein zum Testen und Experimentieren gedacht:
Wer testen möchte, darf dies tun, wer es nicht tut, verpasst fast nichts ;-) Diese experimentellen Filterpfade kann man so schalten:
Menü --> Filter selection --> FilterPath (exp.) (steht standardmäßig auf 0)
dann kann man (ausschließlich im Menü!) mit encoder 3 den gewünschten FilterPath wählen.
Aber es ist wichtig, dazu auch die richtige Demodulationsart einzustellen:
4 bis 18: CW 19 bis 65: SSB --> nicht in AM benutzen 66 bis 86: AM --> nicht in SSB benutzen
Den Rest bitte "erhören" ;-)
Wie gesagt, geht es dabei primär um das Testen, ob das FilterSchalten intern in der Software richtig funktioniert. (Das Bedienen wird sich dann in den nächsten Firmwareversionen natürlich nochmals ändern und viel bedienungsfreundlicher werden). Und nebenbei gibt es hier im FilterPath ein paar andersartige AM-Filter, da sollte man mal das Daneben-Abstimmen ausprobieren (wie in der letzten mail beschrieben).
NICHT VERGESSEN: Wenn man nach dem Testen wieder die normale Filterwahl aktivieren will, MUSS man FilterPath im Menü wieder auf 0 stellen! Ansonsten gibt es Chaos im Filter-business . . .
(Und bei FilterPath funktioniert natürlich die graphische Bandbreitenanzeige UND die Filteranzeige NICHT richtig.)
Viel Spaß dabei!
73 de Frank
|
Title: Re:Firmware-Modifikation Audio-Filter
Post by: DB4PLE on 20. March 2016, 11:11:37
Hallo,
eine kleine Ergänzung:
(Und bei FilterPath funktioniert natürlich die graphische Bandbreitenanzeige UND die Filteranzeige NICHT richtig.)
|
|
Die Filteranzeige funktioniert in dem aktuellsten Snapshot. Man erkennt das daran, dass in der orangen Box die Filterbandbreite (resp. obere Grenzfrequenz) angezeigt wird und in der normalen Box der Name des gewählten FilterPaths (z.B. 650 für die Mittenfrequenz bei CW und manchen SSB Filter oder LPF oder BPF oder AM oder auch mal garnichts.). Ob das so bleibt, ist noch nicht beschlossen, aber bei gewählten Filterpath sieht man nun die genaue Filter-Bezeichnung.
Die grafische Anzeige im Waterfall wird (noch) nicht angepasst.
73 Danilo
|
Title: Re:Firmware-Modifikation Audio-Filter
Post by: DD4WH on 20. March 2016, 11:18:49
Hallo Danilo,
habe gerade die neueste Version draufgespielt und gemerkt, dass Du die Anzeige der Bandbreite UND der Filtercharakteristik schon implementiert hast. Fantastisch!!!
"Schneller als die Feuerwehr . . . " - ich glaube ich erwähnte das schon mal ;-)
73 de Frank
|
Title: Re:Firmware-Modifikation Audio-Filter
Post by: DD4WH on 23. March 2016, 15:34:54
Für diejenigen, die auch ab und zu mal Rundfunk hören mit dem mcHF gibt es jetzt eine Alternative zu AM-Demodulation. Bei AM hat man oft mit selektivem fading Probleme. Wenn der Träger oder eines der Seitenbänder in der Amplitude abnimmt bzw. stark schwankt, kommt es bei AM-Demodulation (envelope detection) zu starken Verzerrungen. Außerdem produziert solch ein AM_Detektor bei schwachen Signalen (kleinem SNR) auch Verzerrungen, sogar außerhalb der Filterbandbreite, das ist nicht vermeidbar. Alternativen sind dann USB oder LSB, die aber nicht ganz so satten Sound bieten. (Deswegen nimmt man ja auch envelope detectors, weil die so richtig gut klingen).
Bei manchen analogen Radios gibt/gab es als Abhilfe SAM (Synchrondetektor), da wurde der Träger gelockt, also die Frequenz ganz genau abgestimmt und dann eines oder beide Seitenbänder mit phasing demoduliert (also genauso wie der mcHF SSB demoduliert).
Daher war es nur ein kleiner Schritt dahin, das auch für den mcHF zu probieren: Es gibt also nun eine "neue" experimentelle Demodulationsart im mcHF: SAM. [vor allem deswegen nicht so aufwendig, weil Danilo die Filtergeschichten ordentlich aufgeräumt und umstrukturiert hat, danke nochmals dafür!]
Im Prinzip ist das einfach eine Addition der Signale aus dem demodulierten USB und dem LSB, also Doppelseitenbandempfang DSB. [I & Q gehen in die Hilbert FIR-Filter wie bei SSB, danach wird LSB demoduliert UND USB demoduliert und das Ergebnis der beiden addiert, danach folgt das audio-IIR-Filter der gewünschten Bandbreite]
Die einzige Krux dabei: man muss auf 1 Hertz genau abstimmen auf den Träger, damit es keine Flattereffekte gibt.
Ich habe fürs Erste mal vier Filterbandbreiten für SAM implementiert.
Zwei SAM-Filter sind schon drin in der aktuellen daily snapshot, die anderen zwei kommen bald rein.
Bitte austesten, wer mag! Aber keine Wunder erwarten, der Unterschied liegt nicht primär im sound bei starken Sendern, sondern vielmehr in der Resistenz der Demodulationsart gegenüber selektivem fading im Vergleich zu AM, wird also erst bei relativ schlechtem SNR deutlich hörbar. ++++++++++++ 1.) Menü Filter aufklappen --> letzter Eintrag Demod SAM auf ON stellen --> exit Menü ++++++ HIER HABE ICH GLEICH WAS GEÄNDERT: Anstelle obiger Einstellungen bitte im Standard-Menü Enable SAM Demod aktivieren (Statuswird beim Ausschalten gespeichert) Ich fand diese Option so genial dass ich sie gleich ins "Standard-Menü" verschoben habe - DF8OE
2.) per Knopf die Demodulationsart auf SAM stellen 3.) per Knopf die Filterbandbreite schalten (WICHTIG, da sonst nicht der richtige Pfad schaltet) 4.) Frequenz sehr sehr genau auf 1Hz einstellen, bis das Flattern aufhört (ich suche zur Zeit nach einer Möglichkeit, das automatisiert per Knopfdruck zu machen ;-)) 5.) Sound mit LSB, USB, AM vergleichen
Viel Spaß!
73 de Frank
ein sehr schönes paper zu SAM:
http://www.arrl.org/files/file/Technology/tis/info/pdf/9209qex009.pdf |
Title: Re:Firmware-Modifikation Audio-Filter
Post by: dl2ki on 24. March 2016, 06:50:40
Hallo Frank,
speziell danke für Deine ausführliche Information zu dieser Firmwareerweiterung. Damit kann man beim Ausprobieren auch als "Anwender" etwas anfangen.
73, Wolfgang DL2KI
|
Title: Re:Firmware-Modifikation Audio-Filter
Post by: dg9bfc_sigi on 25. March 2016, 10:04:57
hallo ihr programmierwütigen mchf schrauber :-)
habe sync am nun ein wenig ausgetestet und muss sagen ... das ist ne klasse geschichte für schlappe am signale ...(wo iszt der like button??)
wenn da doch nur noch ne afc drinne wäre wie bei hdsdr ...dann wäre es perfekt
wenn ich in hdsdr sync am einschalte und die afc ihre arbeit machen lasse ... dann passt das (nach etwas fine tuning) auch im mchf ...
ich werde mal lc (programmierer von hdsdr) fragen wie die das mit der afc gelöst haben ... vielleicht gibt der uns (euch) nen tip
es muss doch ne möglichkeit geben die beiden seitenbänder zu vergleichen und auf gleichen ton zu ziehen (usb und lsb gleich) ... und dann müsste man auf trägermitte sein ..
gruss
sigi
dg9bfc
|
Title: Re:Firmware-Modifikation Audio-Filter
Post by: DD4WH on 25. March 2016, 12:04:22
Hallo sigi,
das wäre toll, da einen Tipp zur AFC zu bekommen, wie das in HDSDR gelöst ist!
Man könnte das so lösen:
1.) Wir haben ja aus dem spectrum display eine FFT des gesamten 48kHz-Spektrums, also 256 Frequenzstreifen = bins mit der Amplituden-information. Nun suchen wir innerhalb der Rx-Bandbreite den FFT-bin mit dem maximalen Signal --> das ist der carrier. Das ist erstmal ganz schön, aber sehr ungenau, weil die FFT-bin-Breite 48000Hz/256 beträgt, also sind wir nur auf 187.5 Hz genau, das reicht noch nicht. Wir stimmen trotzdem erstmal grob darauf ab, sind also maximal 187.5Hz daneben mit der Frequenz.
2.) nun nehmen wir das carrier-bin C, das links daneben C-1 und das rechts daneben C+1.
3.) durch diese drei bin-Amplituden-Werte legen wir eine auf dem Kopf stehende quadratische Parabel.
4.) wir berechnen aus diesen drei Werten mit Hilfe einer Formel, die sich schlaue Leute ausgedacht haben (quadratic interpolation), den genauen Frequenzwert des carriers und stimmen die Frequenz darauf ab.
5.) das klappt in der Praxis wirklich relativ genau (ca. 2-5Hz je nach SNR)
6.) dann kann man noch manuell nachstimmen auf 1 Hz genau
Die Methode/Formel stammt von Richard Lyons, der DSP-Guru, der auch das sehr nette Buch geschrieben hat und ist hier näher erläutert:
Jacobsen, E. & P. Kootsookos (2007): Fast, accurate frequency estimators. - IEEE Signal Processing Magazine 24(3): 123-125.
bei Google dieses eingeben:
jacobsen kootsookos dsp tricks
Lyons, R.G. (2013): Understanding Digital Processing. - Pearson Education International. --> Kap. 13.15 Spectral Peak Location algorithm
Wäre natürlich schön, das auch beim mcHF einzubauen, mal schauen, ob wir das irgendwann hinbekommen . . .
73 de Frank
|
Diskussions- und Newsboard des DARC-Ortsverbandes I40 | Powered by YaBB SE
© 2001-2003, YaBB SE Dev Team. All Rights Reserved.
|