-
Notifications
You must be signed in to change notification settings - Fork 136
datac4, datac5, datac13 modes and prototype low rate FSK/MPP #364
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
…gh SNRs, works at -8dB SNR on AWGN
…to datac1 - would rather higher throughput bit rate
…P now, ofdm_ldpc_rx around 20% PER at -4dB MPP
|
With the right configuration, the FSK modem can handle MPP channels OK. I think the long preamble helps with burst acquisition, as it rides over fades. It's early days, this is with a very long codeword (10's of seconds), and it doesn't cope well with bursts close together (small Here is 25 bits/s payload 4FSK at -9 dB SNR on MPP: The offset accounts for the error in the SNRdB from Option to specific LDPC code. Shorter codewords don't work as well: |
|
@drowe67 here are some payload requirements, which are needed for the actual protocol of FreeDATA- specially the signalling frames have some limitations: FreeDATA has two types of signalling frames.
|
|
Thanks @DJ2LS, a couple more thoughts:
|
|
@drowe67 I updated the list.
|
|
@DJ2LS it's clear we have built up a lot of experience that can be used for future iterations. It might be useful to write down some use cases and develop some requirements and a road map going forward. That will also be useful to guide contributions by others. A good start would be what SNRs we want to cover in the next iteration, the waveform designs can be derived from that. Re (4) the requirement here might be CPU load, design use case might be "two parallel receivers at any one time". Re CPU (i) we could look at vectorisation (ii) once we have started a connection, the acquisition range can be narrowed and CPU will drop. We just need to track slow freq drift (common with older radios). |
|
Agree, @drowe67 I suggest let's use this PR for roadmap. We could place it to the first entry and edit on changes. Re ii) Interesting, After i) this could be the next step. Also your suggested reduction of LDPC iterations could be considered. I'll think about a road map and will make some suggestions the next days. |
|
I actually haven't played with the (I used It might be worth revisiting #326, anyway. IIRC it mostly worked (and didn't sound different OTA from what I remember) but a few ctests failed due to a few of the bytes being different. However, that PDF is also ~150 KB, which I'm not sure is a realistic size for HF. |
|
Here's the old discussion regarding to this topic: https://github.com/DJ2LS/FreeDATA/discussions/119 Most work might be needed for RX I think 🤔 |
|
Yep it's the Rx side and specifically acquisition that we had in mind. So its CPU load with no modem signal (e.g. just noise for
As noted in #326, the proposed optimisations broke the compression algorithm, and provided just 0.08% CPU improvement on x86. |
#374 has initial work on this.
Yeah, it'd likely not use that implementation if we were to try optimizing BPF again. But it sounds like that's not too high of a priority anyway, at least for now. |
|
@DJ2LS here are a few candidates for
|
What if we increasing carriers to 4? I'm not sure, but IIRC this was a good tradeoff in past, when doing some testing in this area, I think. Regarding to 2.) Maybe thats because of the MPP channel simulation? IIRC, signal disruption occurs cyclic in octave simulation. Means, we would always loose bits at the same position. But thats not the case in real world situation I think. In other words - maybe the longer rate is working better than expected in real world scenarios? |
…sted timing_mx_thresh to detect more packets
|
@DJ2LS drowe67/codec2@c416cd4 is is a work in progress and currently introducing bit errors. I'll fix it over the next week after ⛵ |
… acquisition code as well. Filter now moved to core functions
…& ofdm_acquisition
|
Re e7811cd - performed a few iterations around Pacq and Pacq_false are outputs from PER calculated from ofdm_ldpc_rx as Example Octave
The final col is the PER from the C port 7264290, using the same |
…s, and filter bandwidth adjustments, PER about 0.1 at -4dB MPP for datac4 & c13
… tuned datac13 and datac4 tx BPF and clippers, about 1dB compression gain for no impact on MPP -4dB PER
|
drowe67/codec2@ff5f86b Tuning clipping and Tx BPF in Octave. Not much gain from clipper in these modes as Nc is small, so vanilla PAPR before clipping is already low at 5.5 dB. So just a small amount of clipping added with tx BPF, that adds just a little noise to scatter diagram, and doesn't impact PER at a given SNR. We get a 1dB improvement in PAPR and hence Rx SNR for a given peak power. Comparison of clipping with Octave simulation for 100 packets.
|
…ed to measure PAPR
|
After C port I realised I was forgetting to add the correction burst offset for PAPR, so lets try again. Octave for 100 Tx packets:
C for 100 Tx packets:
Not sure why the C PAPRs are a bit higher 🤔 |
|
@DJ2LS, some PER curves. A few thoughts:
|
This comment was marked as outdated.
This comment was marked as outdated.
Unfortunately those plots require the mode to be running in C. |
|
saving my thoughts here in case we want to continue working on this: DATAC5 Octave Experiment: This is resulting into: In a nutshell: --> This would result in a +3dB operating level at MPP, compared to datac1, but with a +3dB of bitrate |



Building up -5dB MPP waveforms as per FreeDATA-002 Milestone 2.
ofdm_determine_bad_uw_errors(Nuw)First pass C Tx & Rx:
TODO:
refactor zero-stuffing to change code rate into ldpc.m, add unit testinitial C port of datac4, datac13datac4 scatter diagram generated by ofdm_ldpc_rx doesn't look right with Octave or C Tx and no noise.Consider refactoring zero stuffing C code to movedata_bits_per_frameinto ofdm_config code, or raise an issue/further work PR.first pass ctests for datac4, datac13 and Octave<->C portWhere to put input filter in Octave and C (e.g. inside ofdm_rx function)?In core ofdm.c acquisition and demod functions (needs to be in both).Retune acquistion with filter in place.PAPR/clipper tuning &check_comp.shctestDial up noise for ctests when filter implemented.Decide if we should C port datac5 (it's just 2dB above datac1, not quite 2x throughput bit rate)Not for now, as we are not satisfied with mode design - would rather a larger increment in throughput bit rate & SNR.OTA unit testing of new waveformsAchieved by early integration into FreeDATA.README_data.md update, update script that generates PER curves.bad_uw_errorsthresholds for other raw data modes now we haveofdm_determine_bad_uw_errors(Nuw)