Diskussions- und Newsboard des DARC-Ortsverbandes I40
allgemeine Kategorie => mcHF Projekt Deutsch / English (here you can discuss everything related to mcHF) => Message started by: hb9ewy on 22. January 2017, 00:03:19

Title: CW Keyclicks
Post by: hb9ewy on 22. January 2017, 00:03:19

Hallo,
mir war bei Messungen aufgefallen, dass in CW das Spectrum des mcHF erheblich breiter war als technisch nötig, was im QRP Bereich allerdings kaum problematisch ist.
Ein Blick in den Source Code offenbarte, dass die Signalflanken etwa einer einfachen Sinus Funktion folgten - was das breite Signal erklärt.
Eine Blackman-Harris Funktion für die Flanken sollte zu einem deutlich schmäleren Signal führen.
Das habe ich heute anhand der FW 1.1.4 ausprobiert (meine Entwicklungsumgebung ist nicht up-to-date).
Das Resultat ist vielversprechend, das CW Signal wird deutlich schmaler!

Die Spectrogramme zeigen auf der linken Seite CW Signale mit der aktuellen Impementation, auf der rechten Seite mit Blackman-Harris Hüllkurve.

Inspiration war der Artikel:
https://github.com/pavel-demin/red-pitaya-notes/files/403696/cw-shaping-in-dsp.pdf

Und hier noch die verwendeten Faktoren der Hüllkurve (n=1..31):
0.0002041014084882
0.0006772662374749
0.0016020078123390
0.0031820950003995
0.0057012766049161
0.0095202933203369
0.0150711734102181
0.0228477818309688
0.0333917234781510
0.0472729869370048
0.0650651361580022
0.0873153791371151
0.1145104179164330
0.1470395578623810
0.1851570679822080
0.2289461821458840
0.2782873653792760
0.3328335042985640
0.3919944969469290
0.4549333140803790
0.5205749999999990
0.5876293133963840
0.6546268301635610
0.7199674052319650
0.7819789901265240
0.8389839987699290
0.8893697722232830
0.9316592687273990
0.9645779378415140
0.9871128465160340
0.9985605090559210

vy 73, Yves
hb9ewy

P.S.: Die beiden unteren Spectren haben 10 kHz/Teilung, die oberen 1kHz/Teilung. Aufnahme mit dem internen Keyer bei 35Wpm mit "max hold".

Die beiden Anteile im Abstand von ca. +/- 3 kHz kann ich mir noch nicht erklären, sie treten auch bei der FW 1.5.6 testing auf.

Title: Re:CW Keyclicks
Post by: hb9ewy on 22. January 2017, 08:40:35

Hallo,
heute morgen habe ich nochmal mit der aktuellen 1.5.6 testing gemessen - die verhält sich gleich.
Dann habe ich noch bemerkt, dass Straight-Key Modus die Formung der Hüllkurve zur Keyclick Reduktion nicht greift, nur mit dem eingebauten Keyer.
Ich versuche jetzt einmal den Source Code zu verstehen, vieleicht lässt sich das einfach verbessern.

vy 73 de Yves

Title: Re:CW Keyclicks
Post by: DB4PLE on 22. January 2017, 10:39:49

Hallo,

1.5.6 ist NICHT aktuell.

Natürlich wirkt auch beim Straight Keyer die Hüllkurvenfunktion. In 1.5.6 allerdings beim Wechsel von RX auf TX nicht (genauer: man sieht es nicht, den das Signal ist zu diesem Zeitpunkt noch stummgeschaltet). Nimm den aktuellen Github-Stand. Wenn es da nicht kommt, ist es ein Fehler, denn ich habe beim Basteln am RX TX Switching genau diese Sache untersucht und es war am Ende in Ordnung. Allerdings kann immer mal was kaputtgemacht werden.

Übrigens, interessant was so eine Hüllkurvenänderung ausmacht.

73
Danilo

Title: Re:CW Keyclicks
Post by: DF8OE on 22. January 2017, 10:44:14

Hallo Yves,

bei der Geschwindigkeit, mit der sich unsere Firmware weiterentwickelt, ist es "mandatory", mit dem neuesten Quellcode zu arbeiten.

"git" ist da eindeutig die einzige Lösung und "dein Freund". Herkömmliche "Lösungen" wie das Herunterladen des aktuellen Quellcodes als zip sind völlig unbrauchbar.

Ich finde die dokumentierten Unterschiede auch frappierend. Ich habe das nie untersucht - aber es sind eklatante Auswirkungen...

vy 73
Andreas

Title: Re:CW Keyclicks
Post by: hb9ewy on 22. January 2017, 11:13:43

Hallo Danillo,
sorry, ich wollte die daily wg. dem hard PA limit auf 55 vermeiden.

Hier nun die Messungen mit der dayliy fom 21.01.2017 08:50, ich hoffe, das ist die richtige.
Es zeigt sich ein leicht anders Bild.
Die oberen Aufnahmen zeigen die Spannung der Hüllkurve in linearem MAssstab, 5ms/div.
Die unteren Aufnahmen die Spektren mit 1 kHz/div, dBm, mit "maxhold".
Links mit dem internen Keyer und rechts mit einem Bug getastet.
In den Flanken zeigen sich Unstetigkeiten beim applizieren der Hüllkurve - rot markiert.
Rot markiert in den Spectren die Anteile bei +/- 3kHz die ich mir nicht erklären kann, bei konstantem Signal zeigen sie sich nicht.


vy 73 de Yves

Title: Re:CW Keyclicks
Post by: DF8OE on 22. January 2017, 11:19:17

Das Hard Limit ist eine Grundbedingung für ein sauberes Signal. Ohne dieses Limit überfährst Du den Audiozweig und alle Messungen (und Verbesserungsversuche) sind "für die Tonne". Du brauchst als Grundbedingung ein sauberes Ausgangssignal - und wenn es damit noch Klicks gibt, dann kann man versuchen die zu beseitigen. Dass es bei rechteckigem Audiosignal Klicks gibt erklärt sich von selbst und diese sind nun beseitigt.

vy 73
Andreas

Title: Re:CW Keyclicks
Post by: hb9ewy on 22. January 2017, 11:25:32

Hallo Andreas,

wenn das Limit von 55 nötig ist um Übersteuerung der Audio-Kette und des Mixers zu vermeiden, ist dann vieleicht die TX Audio Verstärkung zu hoch?
Ich werde meinen mcHF jedenfalls an das neue Limit anpassen.

Die obigen Messungen wurden übrigens alle mit 2W gemacht. Audiokette und Mixer sind weit von der Übersteuerung entfernt (auch noch bei 10 Watt).

vy 73 de Yves

Title: Re:CW Keyclicks
Post by: DF8OE on 22. January 2017, 11:30:39

Das ist eine Frage des Betrachtungswinkels.

Fakt ist es dass es mit der schon seit Anbeginn vorhandenen Hardware möglich war, per Software das Audiosignal an den Poller zu fahren. Ich denke das hat einfach vorher niemand gemessen (oder darüber nicht berichtet). Bei meinen Messungen für die neue rf-Platine ist es mir eben aufgefallen und die Firmware ist jetzt so gestrickt, dass mit der alten Hardware (oder meiner Mod mit weggelassenen LM386) die Amplitude knapp unter dem Rail-to-Rail bleibt. Vorher konntest Du das locker überfahren.

Anpassen braucht man da nichts hardwareseitig. Wer die LMs weggelassen hat und die Widerstände nicht geändert hat - der muss in der Tat die Widerstände ändern. Sonst kommt er nicht mehr auf die gleiche Verstärkung wie vorher.

vy 73
Andreas

Title: Re:CW Keyclicks
Post by: hb9ewy on 23. January 2017, 20:41:26

Hallo,
Beruflich diese Woche auf Reisen bleibt mit leider nur Source Code Studium um den Verbesserungsprozess zu unterstützen.

Der Code der Flanken-Formung sieht sehr zeitkritisch aus, ausserdem ist er vermutlich Ursache für die Nebenlinien bei +/- 3 KHz (1 Stützwert der Hüllkurve wird auf jeweils 16 Samples angewendet, 16*20.833 uS = 333us -> 3 kHz).

Idee:
@Danilo: es gibt ja bereits TX Filter, die sehr gut funktionieren.
Ist es evtl. möglich die CW Audiostreams durch ein geeignetes LP Filter zu schicken um die Tastclicks zu entfernen? Das knifflige Timing würde entfallen und auch die Nebenlinien im Spectrum.

vy 73 de Yves

Title: Re:CW Keyclicks
Post by: hb9ewy on 27. January 2017, 22:36:22

Hallo mitenand,

die Ursache für die bescheidene Wirkung der CW "smoothing" liegt im File cw_gen.c.
Die Dauer für das "smoothing" einer vollständige Flanke beträgt 16 sample * 32 = 512 Sample à 20.83us = 10.66ms. Im Programm wird das smoothing nur 12 * 0.6ms = 7.2ms lang aufgerufen.
Daher wurden die Flanken nicht vollständig ausgeformt (ausgenommen die Startflanke beim internen Keyer). Im Keyer-Modus also beim Auslaufen, mit Handtaste sogar bei Anfang und Ende.

Mit folgenden Änderungen habe ich eine meiner Meinung nach zufriedenstellende Tastung für Handtaste und internen Keyer erreicht:
- sm_table mit CW_SMOOTH_TBL_SIZE = 128 und Blackman-Harris Fenster.
- CW_SMOOTH_LEN = 3;
Das Spectrum ist jetzt deutlich schmaler und mit Handtaste ist der Sidetone nicht mehr so kratzig.
Es wird allerdings etwas mehr Speicher für die sm_table gebraucht. Ob das ein Problem ist, weiss ich nicht. Ich vermute 128 Flanken Stufen interpoliert aus einer sm_table mit 64 Stufen könnte auch funktionieren.

Durch die feinere Abstufung der Flankenschritte sind die Nebenlinien bei +/- 3 kHz verschwunden.

Ich habe auch CW_SMOOTH_LEN = 2 ausprobiert. Dann folgt nach jedem CW Element noch ein kurzer Impuls, vermutlich weil der softdds nicht schnell genug abschaltet - das habe ich nicht weiter untersucht.

Und hier noch die Diagramme:

vy 73 de Yves

Title: Re:CW Keyclicks
Post by: DF8OE on 28. January 2017, 08:31:15

Hallo Yves,

das sieht sehr schön aus. Wesentlich besser als es jetzt ist. Speicher (RAM) ist allerdings sehr knapp. Ob das noch passen könnte müssen wir anhand des exakt benötigten RAM-Bedarfs feststellen.

Ich habe da einen ganz anderen Ansatz - bin mir aber nicht sicher ob das zum gleichen Ergebnis führt:

Wir haben ja schon einen TX-Audio-Filter. Was wäre, wenn wir für CW einfach ein eigenes Filter schaffen das scon bei 1.5 KHz (ist jetzt ein geschätzter Wert) "dichtmacht"? Die Klicks sind doch die steilflankigen Anteile - und die könnten damit herausgefiltert werden. Im Ergebnis sind die Flanken flacher und damit weicher. Mit dieser "Technik" bräuchten wir nur neue Filterkoeffizienten (Flash) und eine Umschaltung auf dieses Filter bei CW... Denkst Du das kann dasselbe bewirken?

vy 73
Andreas

Title: Re:CW Keyclicks
Post by: hb9ewy on 28. January 2017, 09:05:12

Hallo Andreas,

ja, der Ansatz mit einem CW-TX Filter wird auch funktionieren, sogar besser und Ressourcen-schonender, siehe Vorschlag vom 23.1.

In der Literatur, "Experimental Methods in RF Design", Seite 11.25 ist ein FIR Filter mit ca. 200 taps, 500Hz Bandbreite erwähnt.

vy 73 de Yves

Title: Re:CW Keyclicks
Post by: DF8OE on 28. January 2017, 09:53:30

Ich werde mal mit unserem "Filterspezialisten" reden (Frank, DD4WH). Wir sollten das Thema angehen.

vy 73 - danke für deine Forensik - sie hat uns definitiv weitergebracht!

Wir diskutieren hier weiter darüber.

Andreas

Title: Re:CW Keyclicks
Post by: hb9ewy on 28. January 2017, 10:09:33

Hallo Andreas,

habe noch etwas getüftelt und auch das Problem mit dem CW Peak verstanden.
Die Einstellung des ps.key_timer muss an die Dauer der Ramp angepasst werden. Ausserdem habe ich die Funktion CwGen_RemoveClickOnFallingEdge so angepasst, dass am Ende der Ramp der letze Wert gehalten wird und die Funktion auch bei ps.sm_tpl_ptr == 0 aufgerufen wird.
Dann habe ich 2 Varianten ausprobiert:
- sm_table mit CW_SMOOTH_TBL_SIZE = 128 und Blackman-Harris Fenster.
a) CW_SMOOTH_LEN = 2; ps.key_timer 2x9 steps; 5.33ms Flanke
b) CW_SMOOTH_LEN = 3; ps.key_timer 2x13 steps; 8ms Flanke

Der Unterschied im Spektrum ist minimal. Persönlich ziehe ich vom Klang her die steilere Flanke vor.

Eine TX-Filter Lösung probiere/messe ich gerne aus!

P.S: ARRL Messungen zum Vergleich: http://audiosystemsgroup.com/TXNoise.pdf

vy 73 de Yves

Title: Re:CW Keyclicks
Post by: DF8OE on 28. January 2017, 10:15:47

Die Ursache ist 100%-ig erkannt. Die Spektren sehen beide gut aus. Frank wird sich wenn er zeit hat hier einklinken.

vy 73
Andreas

Title: Re:CW Keyclicks
Post by: DD4WH on 28. January 2017, 10:23:56

Hallo Yves, hallo Andreas,

hatte ein paar Tage andere Dinge zu tun, daher melde ich mich erst jetzt.

Hervorragende Arbeit, Yves! Das sieht so aus, als wenn das Signal jetzt viel besser wäre.

Ich bin kompletter Anfänger in CW und daher verstehe ich die Dinge im code und in der CW-Betriebstechnik nur in Ansätzen, leider.

Aber soweit ich das verstehe, scheint ja die Anlage des codes im Grunde genommen sehr sinnvoll: das shaping funktioniert, Du hast dann gezeigt, dass mit Hilfe von zahlreicheren shaping-Flankenschritten und anderem smoothing-window die Nebenaussendungen erheblich reduziert werden können. Und die Erweiterung der Tabelle von jetzt 32 floats auf 128 floats ist ja nur 1/2kbyte mehr, das sollte drinsitzen, denke ich.[zumal ein anderes zusätzliches TX-Filter auch RAM verbrauchen würde: ein FIR filter mit 200 taps würde 200 float-Koeffizienten und nochmal mindestens dasselbe an state-Variablen benötigen . . .].

Die Frage ist jetzt aus meiner Sicht nur noch, wie wir den code umbauen:

1. Möglichkeit: du machst einen pull request in github mit Deinen Änderungen.

2. Möglichkeit: du sendest mir die von Dir ausgerechneten Blackman-smoothing-Faktoren und ich baue das in den code ein: Du hattest ja außerdem noch ein paar andere Kleinigkeiten geändert, soweit ich das verstanden hatte[EDIT: hat sich mit Deinem letzten post überschnitten, es sind noch mehr Änderungen! ;-)]: ps.keytimer auf 32 statt 24 und alle limits im code auf 16 statt 12? Ich bin im Moment etwas zeitlimitiert, so dass ich das nicht in Ruhe ausprobieren/durchdenken kann, aber wenn Du mir mit den Infos/Zahlen aushilfst, kann ich das fix in den code reinbasteln und einen pullrequest machen, ich würde in diesem Fall auch auf jeden Fall im code vermerken, dass die Optimierungen/Tests dazu von Dir stammen ;-).

Vielen Dank!

73 de Frank


Title: Re:CW Keyclicks
Post by: DB4PLE on 28. January 2017, 11:23:53

Hallo,

bin auch für die Tabellenlösung (sprich die Nutzung de vorhandenen Ansatzes mit geänderten Parametern).

73
Danilo

Title: Re:CW Keyclicks
Post by: hb9ewy on 28. January 2017, 13:33:57

Hallo Frank & Danillo,

Danke für Überlegungen über den z.Z. besten Ansatz für die Umsetzung.
Ich werde mich in GitHub einarbeiten und versuchen die Anpassungen auf diesem Wege einzuspeisen. Ich habe noch Ideen für Code Optimierungen, die lasse ich aber vorerst aussen vor.

vy 73 de Yves
hb9ewy


Diskussions- und Newsboard des DARC-Ortsverbandes I40 | Powered by YaBB SE
© 2001-2003, YaBB SE Dev Team. All Rights Reserved.