MorseKOB / PyKOB

Python implementation of a library for Morse and MorseKOB functionality
https://sites.google.com/site/morsekob/morsekob40
MIT License
4 stars 2 forks source link

Automatic Speed adjustment option #348

Closed Kevijeps closed 1 month ago

Kevijeps commented 2 months ago

I am using MRT as both the headless connection to a wire but also as a monitor for traffic on the line. The decoding is sensitive to the speed set in the configuration of course. When most of the traffic is coming from users, or MKOB, that are pretty consistemt at one speed that is fine but people have fairly wide variations in speed. This makes the monitored record of the traffic pretty messy. Would it be possible to make a config item that would enable/disable the automatic detection of the speed and therefore adjustment of the decoding?

jchausler commented 2 months ago

One thing I noted with MorseKOB 3.0 which had auto speed detection is that if my key contact bounced (or the telegrapher bounced when sending :-) that the detect speed would increase significantly and then not slow down very well to the real sending speed. I don't know about MKOB 4 and friends but that is one problem I found with auto speed detection. Maybe I'm wrong but I'm guessing that getting it to accurately follow different sending speeds will be difficult. What's more, lets face it, sending speed is not the only problem. Us humans screw up when sending frequently (at least this one does :-) and expecting the decoding algorithm to correctly deal with this as well as following changing sending speeds is probably asking way too much.

As much of my use of the system is doing demonstrations for museum visitors, I need perfect decoding as much as possible and have found if I send with a bit of Farnsworth delay I get much better decoding. One of my telegraph mentors, now sadly passed away, once told me that good operators also did this back in the days as well to insure correct reception as failed reception was charged to the sending operator.

73, Chris

AESilky commented 2 months ago

@jchausler As something that could be interesting for novice users, I added the 'Detected Speed' to the status bar in the bottom of the MKOB window. In watching it while on some Wire 11 sessions and with Wire 134 (Instructograph - which increases speed as it progresses), I noticed that it did a decent job of adjusting up or adjusting slightly down. But it would not adjust down correctly if the change was large. I analyzed this and modified the algorithm. It now seems to do a pretty good job of detecting the speed, even when the change is pretty significant (as it can be when switching from one sender to another). Of course, if the sender is erratic (as I typically am), then it struggles.

I wouldn't want to make this always adjust the speed (as it did when we first put out MKOB), but I think it now works well enough for it to be an option. You can always choose to not enable it.

@Kevijeps One thing that could be a bit of a problem is that the speed used by the decoder is also the speed used by the keyboard code sender. In one way, this can be helpful, as, if you are listening to someone sending at a certain speed, responding from the keyboard at a similar speed is considerate. However, it could be an annoyance if you really want to send at 20 WPM and the speed keeps adjusting to something different. I don't really want to complicate things by introducing yet another code speed (yacs - for you Unix types), as there are already the character speed and the Farnsworth text speed (which is confusing enough for new users). If MKOB/MRT is being used solely/primarily for monitoring and decoding, that probably won't be an issue, but it is something to keep in mind for interactive use.

pwdirks commented 2 months ago

Hi Ed,

On May 2, 2024, at 11:07 AM, Ed Silky @.***> wrote:

@jchausler https://github.com/jchausler As something that could be interesting for novice users, I added the 'Detected Speed' to the status bar in the bottom of the MKOB window. In watching it while on some Wire 11 sessions and with Wire 134 (Instructograph - which increases speed as it progresses), I noticed that it did a decent job of adjusting up or adjusting slightly down. But it would not adjust down correctly if the change was large. I analyzed this and modified the algorithm. It now seems to do a pretty good job of detecting the speed, even when the change is pretty significant (as it can be when switching from one sender to another). Of course, if the sender is erratic (as I typically am), then it struggles.

I wouldn't want to make this always adjust the speed (as it did when we first put out MKOB), but I think it now works well enough for it to be an option. You can always choose to not enable it.

@Kevijeps https://github.com/Kevijeps One thing that could be a bit of a problem is that the speed used by the decoder is also the speed used by the keyboard code sender. In one way, this can be helpful, as, if you are listening to someone sending at a certain speed, responding from the keyboard at a similar speed is considerate. However, it could be an annoyance if you really want to send at 20 WPM and the speed keeps adjusting to something different. I don't really want to complicate things by introducing yet another code speed (yacs - for you Unix types), as there are already the character speed and the Farnsworth text speed (which is confusing enough for new users). If MKOB/MRT is being used solely/primarily for monitoring and decoding, that probably won't be an issue, but it is something to keep in mind for interactive use.

I agree sending at the perceived RECEIVED speed is probably handy and reasonable but I’m still surprised it does that. I’d think if I’ve specified a character speed / Farnsworth speed that it would just use that, always.

Sending at a rate to match the received speed seems to me to be “yacs”? :-)

Cheers, -Patrick.

— Reply to this email directly, view it on GitHub https://github.com/MorseKOB/PyKOB/issues/348#issuecomment-2091195272, or unsubscribe https://github.com/notifications/unsubscribe-auth/ALTAYK6BKJ2QQKZFJFY72R3ZAJ6HBAVCNFSM6AAAAABHDSQBBSVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDAOJRGE4TKMRXGI. You are receiving this because you are subscribed to this thread.

Kevijeps commented 2 months ago

Hi Ed I agree that matching the send speed to the measured received speed would be problematic. In my case where a copy of MRT is being used simply as a monitor it will never be sending anything so a config option to enable the change to permit adjusting the decoding would be awesome. 73 Ciao KJ

On Thu, May 2, 2024 at 12:07 PM Ed Silky @.***> wrote:

@jchausler https://github.com/jchausler As something that could be interesting for novice users, I added the 'Detected Speed' to the status bar in the bottom of the MKOB window. In watching it while on some Wire 11 sessions and with Wire 134 (Instructograph - which increases speed as it progresses), I noticed that it did a decent job of adjusting up or adjusting slightly down. But it would not adjust down correctly if the change was large. I analyzed this and modified the algorithm. It now seems to do a pretty good job of detecting the speed, even when the change is pretty significant (as it can be when switching from one sender to another). Of course, if the sender is erratic (as I typically am), then it struggles.

I wouldn't want to make this always adjust the speed (as it did when we first put out MKOB), but I think it now works well enough for it to be an option. You can always choose to not enable it.

@Kevijeps https://github.com/Kevijeps One thing that could be a bit of a problem is that the speed used by the decoder is also the speed used by the keyboard code sender. In one way, this can be helpful, as, if you are listening to someone sending at a certain speed, responding from the keyboard at a similar speed is considerate. However, it could be an annoyance if you really want to send at 20 WPM and the speed keeps adjusting to something different. I don't really want to complicate things by introducing yet another code speed (yacs - for you Unix types), as there are already the character speed and the Farnsworth text speed (which is confusing enough for new users). If MKOB/MRT is being used solely/primarily for monitoring and decoding, that probably won't be an issue, but it is something to keep in mind for interactive use.

— Reply to this email directly, view it on GitHub https://github.com/MorseKOB/PyKOB/issues/348#issuecomment-2091195272, or unsubscribe https://github.com/notifications/unsubscribe-auth/AF62ZOD2SIDTNJMLYVVN3LDZAJ6HBAVCNFSM6AAAAABHDSQBBSVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDAOJRGE4TKMRXGI . You are receiving this because you were mentioned.Message ID: @.***>

--

Kevin Jepson R.E.T. President 4K Consulting Inc.

Si Fractum non sit, noli id reficere

Email: 4kconsulting at gmail.com Cell: 403-875-8372

AESilky commented 2 months ago

@pwdirks wrote: I agree sending at the perceived RECEIVED speed is probably handy and reasonable but I’m still surprised it does that. I’d think if I’ve specified a character speed / Farnsworth speed that it would just use that, always.

Patrick, it doesn't do that. The Keyboard Code Sender sends at the Character / Farnsworth Text Speed that is currently set by the user.

What I am saying is that if I implemented this requested feature enhancement, it would adjust the Character Speed, as that is what is used by the decoder. Since it would adjust the Character Speed, that would in turn change the speed used to send from the Keyboard Code Sender. If that's not acceptable, I would need to add yacs (yet another code speed) that would be used just for the decoder. Although, I like the idea of having the speed adjust if I'm just/mostly monitoring code, and of course I can send as much as I want from my key (as it is completely under my control), I don't think it would be wise to add a separate Decoder Speed in order to avoid the Keyboard Code Sender speed changing.

AESilky commented 2 months ago

@Kevijeps See my comment above.

In order to have the decode speed adjust, it either needs to also adjust the send speed, or another speed would need to be added to the code.

So, I guess it needs more thought on the best way to implement it - how would people really want it to work?

AESilky commented 1 month ago

Added Config option -D/--decode-at-detected to enable/disable decoding Morse using the detected speed. If enabled, the detected speed is used for decoding. If disabled, the user specified character speed is used for decoding.

This option is in the Preferences dialog on the Morse tab.