P25p2 QPSK Optimization Tweaks;
This commit is contained in:
parent
638f212525
commit
07139b3d7d
|
|
@ -68,7 +68,7 @@ sudo make install
|
|||
|
||||
`dsd-fme -i filename.wav -s 96000` 96k/1 16-bit Audio (DSDPlus Raw Signal Wav Files)
|
||||
|
||||
Wav File Input Note: Due to 96000 rate audio requiring me to double the symbol rate and center, be sure to use the -s 96000 at the very end of the startup command. Also, some NXDN48/96 may have difficulties decoding properly with wav file input (especially from DSDPlus).
|
||||
Wav File Input Note: Due to 96000 rate audio requiring me to double the symbol rate and center, be sure to use the -s 96000 at the very end of the startup command. Also, some NXDN48/96 may have difficulties decoding properly with wav file input.
|
||||
|
||||
### Very Experimental EDACS/P25/NXDN Simple/Single VFO Trunking ###
|
||||
|
||||
|
|
@ -98,7 +98,7 @@ Trunking Note1: All samples above can also be run with the RTL input method and
|
|||
|
||||
`dsd-fme -fp -i rtl -c 851M -P -2 -G 44 -D 0 -U 6020 -Y 24 -N -T -1 lcn.csv -2 groups.csv -3 2> log.ans`
|
||||
|
||||
Trunking Note2: CQPSK Phase 1 and Phase 2 Systems are subceptible to LSM distortion issues, but seem to do okay, but require really good signal. Some CRC issues still occur with Phase 2 TDMA LCCH Mac Signal that can affect reliability, I believe this issue is ultimately caused by the PSK demodulation inside of FME. I also don't believe this will work on 8-level PSK, but I cannot determine that at the moment.
|
||||
Trunking Note2: CQPSK Phase 1 and Phase 2 Systems are subceptible to LSM distortion issues, but seem to do okay, but require really good signal. Some CRC issues still occur with Phase 2 TDMA LCCH Mac Signal that can affect reliability, I believe this issue is ultimately caused by the PSK demodulation inside of FME. I also don't believe this will work on 8-level PSK, but I cannot determine that at the moment. Update: I have improved the LCCH Mac Signal decoding my increasing the QPSK decision point buffers to their maximum values.
|
||||
|
||||
Trunking Note3: DMR Trunking will take longer to implement due to the various types of trunking it can use. Hytera XPT, Connect Plus, Capacity Plus, and TIII trunking all require more research, coding, and testing to implement.
|
||||
|
||||
|
|
@ -164,7 +164,7 @@ To see the up to date CLI options, please look at the help options with the -h C
|
|||
## 2022.08.12 Update ##
|
||||
A new menu system has been introduced in the NCURSES Terminal. Also includes support for LRRP to text file type of choice and reading OP25 symbol capture bin files.
|
||||
|
||||
[](https://www.youtube.com/watch?v=TqTfAfaPJ4s "DSD-FME Update 2022.08.12")
|
||||
[](https://www.youtube.com/watch?v=TqTfAfaPJ4s "DSD-FME Update 2022.08.12")
|
||||
|
||||
To get started with the new menu system, simply launch with:
|
||||
|
||||
|
|
@ -239,7 +239,7 @@ and in a second terminal tab, same folder, run
|
|||
|
||||
`tail -n 40 -f voice.log`
|
||||
|
||||

|
||||

|
||||
|
||||
## Roadmap
|
||||
The Current list of objectives include:
|
||||
|
|
|
|||
BIN
dsd-fme.png
BIN
dsd-fme.png
Binary file not shown.
|
Before Width: | Height: | Size: 578 KiB After Width: | Height: | Size: 194 KiB |
|
|
@ -283,7 +283,9 @@ static int digitize (dsd_opts* opts, dsd_state* state, int symbol)
|
|||
|
||||
valid = 0;
|
||||
|
||||
if (state->synctype == 1)
|
||||
//only run estimate_symbol when we aren't trunking, otherwise noise/gain levels on other rf channels may impact performance severely
|
||||
//honestly can't say I've seen any improvement when using heuristics, but is detrimental to playing back multiple p25 samples
|
||||
if (state->synctype == 1 && opts->p25_trunk == 0)
|
||||
{
|
||||
// Use the P25 heuristics if available
|
||||
//valid = estimate_symbol(state->rf_mod, &(state->inv_p25_heuristics), state->last_dibit, symbol, &dibit);
|
||||
|
|
@ -346,7 +348,9 @@ static int digitize (dsd_opts* opts, dsd_state* state, int symbol)
|
|||
|
||||
valid = 0;
|
||||
|
||||
if (state->synctype == 0)
|
||||
//only run estimate_symbol when we aren't trunking, otherwise noise/gain levels on other rf channels may impact performance severely
|
||||
//honestly can't say I've seen any improvement when using heuristics, but is detrimental to playing back multiple p25 samples
|
||||
if (state->synctype == 0 && opts->p25_trunk == 0)
|
||||
{
|
||||
// Use the P25 heuristics if available
|
||||
//valid = estimate_symbol(state->rf_mod, &(state->p25_heuristics), state->last_dibit, symbol, &dibit);
|
||||
|
|
|
|||
|
|
@ -322,8 +322,8 @@ initOpts (dsd_opts * opts)
|
|||
opts->inverted_x2tdma = 1; // most transmitter + scanner + sound card combinations show inverted signals for this
|
||||
opts->inverted_dmr = 0; // most transmitter + scanner + sound card combinations show non-inverted signals for this
|
||||
opts->mod_threshold = 26;
|
||||
opts->ssize = 36;
|
||||
opts->msize = 15;
|
||||
opts->ssize = 128; //36 default, max is 128, much cleaner data decodes on Phase 2 cqpsk at max
|
||||
opts->msize = 1024; //15 default, max is 1024, much cleaner data decodes on Phase 2 cqpsk at max
|
||||
opts->playfiles = 0;
|
||||
opts->delay = 0;
|
||||
opts->use_cosine_filter = 1;
|
||||
|
|
@ -810,12 +810,11 @@ usage ()
|
|||
printf (" -mc Use only C4FM modulation optimizations\n");
|
||||
printf (" -mg Use only GFSK modulation optimizations\n");
|
||||
printf (" -mq Use only QPSK modulation optimizations\n");
|
||||
printf (" -m2 Use Phase 2 6000 sps CQPSK modulation optimizations\n");
|
||||
printf (" (4 Level, not 8 Level LSM) \n");
|
||||
printf (" -m2 Use P25p2 6000 sps CQPSK modulation optimizations\n");
|
||||
//printf (" (4 Level, not 8 Level LSM) (this is honestly unknown since I can't verify what local systems are using)\n");
|
||||
printf (" -F Relax P25 Phase 2 MAC_SIGNAL CRC Checksum Pass/Fail\n");
|
||||
printf (" Use this feature to allow MAC_SIGNAL even if bad CRC errors.\n");
|
||||
printf (" -F Enable DMR BS Stereo Passive Frame Sync\n");
|
||||
printf (" This feature will attempt to resync less often due to excessive voice errors\n");
|
||||
printf (" -F Relax DMR CACH/Burst FEC Pass/Fail - Passive Frame Sync\n");
|
||||
printf (" Use if skipping occurs, but may cause wonky audio due to loss of good sync\n");
|
||||
printf (" -Z Log MBE/Frame Payloads to console\n");
|
||||
printf ("\n");
|
||||
|
|
@ -1735,16 +1734,13 @@ main (int argc, char **argv)
|
|||
}
|
||||
else if (optarg[0] == '2')
|
||||
{
|
||||
//opts.pulse_digi_rate_in = 96000;
|
||||
opts.mod_c4fm = 0;
|
||||
opts.mod_qpsk = 1;
|
||||
opts.mod_gfsk = 0;
|
||||
state.rf_mod = 1;
|
||||
state.samplesPerSymbol = 8;
|
||||
state.symbolCenter = 3;
|
||||
// state.samplesPerSymbol = 8*2;
|
||||
// state.symbolCenter = 3*2;
|
||||
fprintf (stderr,"Enabling 6000 sps P25 CQPSK (testing only).\n");
|
||||
fprintf (stderr,"Enabling 6000 sps P25p2 CQPSK.\n");
|
||||
}
|
||||
break;
|
||||
case 'u':
|
||||
|
|
|
|||
|
|
@ -2098,6 +2098,11 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state)
|
|||
}
|
||||
|
||||
printw ("--Audio Decode----------------------------------------------------------------\n");
|
||||
printw ("| Demod/Rate: ");
|
||||
if (opts->mod_qpsk == 1) printw ("[QPSK]");
|
||||
if (opts->mod_c4fm == 1) printw ("[C4FM]");
|
||||
if (opts->mod_gfsk == 1) printw ("[GFSK]");
|
||||
printw ( "[%d] \n", (48000*opts->wav_interpolator)/state->samplesPerSymbol);
|
||||
printw ("| Decoding: [%s] \n", opts->output_name);
|
||||
printw ("| In Level: [%3i%%] \n", level);
|
||||
if (opts->dmr_stereo == 0)
|
||||
|
|
@ -2859,39 +2864,43 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state)
|
|||
{
|
||||
if (state->rf_mod == 0)
|
||||
{
|
||||
opts->mod_c4fm = 0;
|
||||
opts->mod_qpsk = 1;
|
||||
opts->mod_gfsk = 0;
|
||||
state->rf_mod = 1;
|
||||
state->samplesPerSymbol = 10;
|
||||
state->symbolCenter = 4;
|
||||
opts->mod_c4fm = 0;
|
||||
opts->mod_qpsk = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
opts->mod_c4fm = 1;
|
||||
opts->mod_qpsk = 0;
|
||||
opts->mod_gfsk = 0;
|
||||
state->rf_mod = 0;
|
||||
state->samplesPerSymbol = 10;
|
||||
state->symbolCenter = 4;
|
||||
opts->mod_c4fm = 1;
|
||||
opts->mod_qpsk = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (c == 77) //'M' key, toggle qpsk - phase 2
|
||||
if (c == 77) //'M' key, toggle qpsk - phase 2 6000 sps
|
||||
{
|
||||
if (state->rf_mod == 0)
|
||||
{
|
||||
opts->mod_c4fm = 0;
|
||||
opts->mod_qpsk = 1;
|
||||
opts->mod_gfsk = 0;
|
||||
state->rf_mod = 1;
|
||||
state->samplesPerSymbol = 8;
|
||||
state->symbolCenter = 3;
|
||||
opts->mod_c4fm = 0;
|
||||
opts->mod_qpsk = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
opts->mod_c4fm = 1;
|
||||
opts->mod_qpsk = 0;
|
||||
opts->mod_gfsk = 0;
|
||||
state->rf_mod = 0;
|
||||
state->samplesPerSymbol = 10;
|
||||
state->symbolCenter = 4;
|
||||
opts->mod_c4fm = 1;
|
||||
opts->mod_qpsk = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue