Improvements to use the FT8 protocol on the Cortex-M base
29 May 2019 at 08:01
Improvements to use the FT8 protocol on the Cortex-M base
Several experiments are underway to use FT8 on the Cortex-M base.Β The previous experiment can be seen in the link below.http://www.hamskey.com/2019/05/ft8-wsjt-x-20-protocol-decoding-in.html
1.Previous experiment
Β 1.1 Implement FT8 protocol to operate on Cortex-M base
Β Refrence :
Β Β https://physics.princeton.edu/pulsar/k1jt/wsjtx.html
Β Β https://physics.princeton.edu/pulsar/k1jt/wsjtx-2.1.0-rc5.tgz
Β Β https://github.com/kgoba/ft8_lib
Β https://github.com/phdlee/ft8_libΒ (forked from kgoba/ft8_lib and modified)
Β and gcc fortran compiler
Β 1.2 Adjust Sampling Frequency and FFT size to use FPU of MCU
Β Β http://www.hamskey.com/2019/05/ft8-wsjt-x-20-protocol-decoding-in.html
Β 1.3Β Previous experiment results
Β Β The FT8 protocol should be completed decoding and ready for next transmission within 15 seconds.Β The encoding for FT8 transmission is very simple and time consuming, so Ignore it.
Β Β For normal communication, it is still necessary to reduce the time by about 2 to 3 seconds.
Β The experimental conditions are the same as before.
Β 2.1 Structure for FT8 decoding
Β Approximately eight steps are required to decode FT8 in Wsjt-X 2.0. I divided the time consuming part into four large parts.
Power Data (frequency domain data per time unit)
The FT8 requires 12.65sec of transmission time, but I added 900msec to account for the time error. (This time may change later)
After receiving the data for about 13.5 seconds, the FFT process is performed.
It is the longest part of decoding the FT8 signal. (3.5sec)
I adjusted the sampling rate and the FFT unit to use this part in the Cortex-M's built-in FPU.Β As a result, I reduced the time by about 2 seconds.
http://www.hamskey.com/2019/05/ft8-wsjt-x-20-protocol-decoding-in.html
Β 2.2 ModifiedΒ Structure forΒ FT8 decoding
Power Data (frequency domain data per time unit)
I changed the structure so that I could process the FFT together while receiving the signal.
Receiving data is handled by DMA, while Main Core is processing FFT while DMA is receiving data.Β Note that the FFT processing must end within the DMA 1 cycle.
To understand Cortex-M's events, handlers, and pending times, I recommend the following book:Β https://www.amazon.com/Definitive-Guide-Cortex-Cortex-M0-Processors/dp/0128032774
This method reduces most of the time required for FFT.
3.Β Hash callsign (Recent callsign)
Β In Wsjt-x 2.0, a non-standard callsign was added to extend the FT8 protocol.Β This is the best way to add functionality without changing the length of the protocol.
non-standard callsign has 58bit Length
1234567890123456789012345678901234567890123456789012345678
1111111111111111111111111111111111111111111111111111111111
=> DecΒ 288230376151711743
Non-standard callsign can only use the following 38 characters.
Β 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ/38^11 =Β 238572050223552512
58bit can transmit up to 11 characters.
Below is the processing structure of Non standard Callsign added in Wsjt-x 2.0.
In this experiment, I added the above structure to make it compatible with Wsjt-x 2.0
4. Experiment
Β The experimental conditions are the same as before.
I used one UART as the MCU's output device for debugging.
Β 4.1 Processing speed improvement test
ReadyStart Receive and FFT -> Calculate power
In the screen below, each time two "." Are output, the FFT operation is performed by parallel processing.
complete decoding
620ms + 887ms = 1507msec
Almost came close to the goal.Β But there is a problem.
The less the number of decoded messages, the longer it takes.
Up to 1 sec can be increased.
That is, the time to decode the message is variable. 800msec ~ 1500msec
Β 4.2 non standard callsign test
non standard protocol ('CQ OZ/LA6OP') is decode and displayed normally on the screen below.
'OZ / LA6OP' will be stored in the hash10, has12, and hash22 repositories respectively.
The stored hash code is being converted normally.
(IZ4... <OZ/LA6OP> >
Below is another example of a non standard call
Below is another example of a non standard call
Test Video for this article
5. Conclusion
Perhaps the next experiment may be delayed.
My main project (for business) has started and I am going to be very busy with this semester class lecture.
My seasonal courses are matlab related classes.Β Maybe I could use this project for my class.
Whenever it is time, I will worry for improvement.
Thanks for reading.
Ian KD8CEC