kopia lustrzana https://github.com/jamescoxon/dl-fldigi
MFSK HF Long Modes
* Added MFSK64L and MFSL128L new modes * 6.25 Second interleaver for very-robust HF reception * Assigned new RSIDs * Mode MFSK-64L : 1026 * Mode MFSK-128L : 1029pull/1/head
rodzic
7dcfc50610
commit
0b8143b466
|
@ -504,6 +504,8 @@ static const Fl_Menu_Item quick_change_mfsk[] = {
|
|||
{ mode_info[MODE_MFSK32].name, 0, cb_init_mode, (void *)MODE_MFSK32 },
|
||||
{ mode_info[MODE_MFSK64].name, 0, cb_init_mode, (void *)MODE_MFSK64 },
|
||||
{ mode_info[MODE_MFSK128].name, 0, cb_init_mode, (void *)MODE_MFSK128 },
|
||||
{ mode_info[MODE_MFSK64L].name, 0, cb_init_mode, (void *)MODE_MFSK64L },
|
||||
{ mode_info[MODE_MFSK128L].name, 0, cb_init_mode, (void *)MODE_MFSK128L },
|
||||
{ 0 }
|
||||
};
|
||||
|
||||
|
@ -1126,7 +1128,9 @@ LOG_INFO("mode: %d, freq: %d", (int)mode, freq);
|
|||
case MODE_MFSK8:
|
||||
case MODE_MFSK16:
|
||||
case MODE_MFSK32:
|
||||
case MODE_MFSK128 :
|
||||
case MODE_MFSK128:
|
||||
case MODE_MFSK64L:
|
||||
case MODE_MFSK128L:
|
||||
startup_modem(*mode_info[mode].modem ? *mode_info[mode].modem :
|
||||
*mode_info[mode].modem = new mfsk(mode), freq);
|
||||
quick_change = quick_change_mfsk;
|
||||
|
@ -3372,6 +3376,8 @@ static Fl_Menu_Item menu_[] = {
|
|||
{ mode_info[MODE_MFSK32].name, 0, cb_init_mode, (void *)MODE_MFSK32, 0, FL_NORMAL_LABEL, 0, 14, 0},
|
||||
{ mode_info[MODE_MFSK64].name, 0, cb_init_mode, (void *)MODE_MFSK64, 0, FL_NORMAL_LABEL, 0, 14, 0},
|
||||
{ mode_info[MODE_MFSK128].name, 0, cb_init_mode, (void *)MODE_MFSK128, 0, FL_NORMAL_LABEL, 0, 14, 0},
|
||||
{ mode_info[MODE_MFSK64L].name, 0, cb_init_mode, (void *)MODE_MFSK64L, 0, FL_NORMAL_LABEL, 0, 14, 0},
|
||||
{ mode_info[MODE_MFSK128L].name, 0, cb_init_mode, (void *)MODE_MFSK128L, 0, FL_NORMAL_LABEL, 0, 14, 0},
|
||||
{0,0,0,0,0,0,0,0,0},
|
||||
|
||||
{"MT63", 0, 0, 0, FL_SUBMENU, FL_NORMAL_LABEL, 0, 14, 0},
|
||||
|
@ -5473,6 +5479,8 @@ static Fl_Menu_Item alt_menu_[] = {
|
|||
{ mode_info[MODE_MFSK31].name, 0, cb_init_mode, (void *)MODE_MFSK31, 0, FL_NORMAL_LABEL, 0, 14, 0},
|
||||
{ mode_info[MODE_MFSK32].name, 0, cb_init_mode, (void *)MODE_MFSK32, 0, FL_NORMAL_LABEL, 0, 14, 0},
|
||||
{ mode_info[MODE_MFSK64].name, 0, cb_init_mode, (void *)MODE_MFSK64, 0, FL_NORMAL_LABEL, 0, 14, 0},
|
||||
{ mode_info[MODE_MFSK64L].name, 0, cb_init_mode, (void *)MODE_MFSK64L, 0, FL_NORMAL_LABEL, 0, 14, 0},
|
||||
{ mode_info[MODE_MFSK128L].name, 0, cb_init_mode, (void *)MODE_MFSK128L, 0, FL_NORMAL_LABEL, 0, 14, 0},
|
||||
{0,0,0,0,0,0,0,0,0},
|
||||
|
||||
{"MT63", 0, 0, 0, FL_SUBMENU, FL_NORMAL_LABEL, 0, 14, 0},
|
||||
|
|
|
@ -76,7 +76,9 @@ const struct mode_info_t mode_info[NUM_MODES] = {
|
|||
{ MODE_MFSK31, &mfsk31_modem, "MFSK31", "MFSK-31", "MFSK31", "MFSK31", "MK31" },
|
||||
{ MODE_MFSK64, &mfsk64_modem, "MFSK64", "MFSK-64", "MFSK64", "MFSK64", "MK64" },
|
||||
{ MODE_MFSK128, &mfsk128_modem, "MFSK128", "MFSK-128", "MFSK128", "MFSK128", "MK128" },
|
||||
|
||||
{ MODE_MFSK64L, &mfsk64l_modem, "MFSK64L", "MFSK-64L", "MFSK64L", "MFSK64L", "MK64L" },
|
||||
{ MODE_MFSK128L, &mfsk128l_modem, "MFSK128L", "MFSK-128L", "MFSK128L", "MFSK128L", "MK128L" },
|
||||
|
||||
{ MODE_WEFAX_576, &wefax576_modem, "WEFAX576", "WEFAX-IOC576", "WEFAXIOC576", "FAX", "FX576" },
|
||||
{ MODE_WEFAX_288, &wefax288_modem, "WEFAX288", "WEFAX-IOC288", "WEFAXIOC288", "FAX", "FX288" },
|
||||
|
||||
|
|
|
@ -85,8 +85,10 @@ enum {
|
|||
MODE_MFSK31,
|
||||
MODE_MFSK64,
|
||||
MODE_MFSK128,
|
||||
MODE_MFSK64L,
|
||||
MODE_MFSK128L,
|
||||
MODE_MFSK_FIRST = MODE_MFSK8,
|
||||
MODE_MFSK_LAST = MODE_MFSK128,
|
||||
MODE_MFSK_LAST = MODE_MFSK128L,
|
||||
|
||||
MODE_WEFAX_576,
|
||||
MODE_WEFAX_288,
|
||||
|
|
|
@ -26,14 +26,16 @@
|
|||
#ifndef _INTERLEAVE_H
|
||||
#define _INTERLEAVE_H
|
||||
|
||||
#define INTERLEAVE_FWD 0
|
||||
#define INTERLEAVE_REV 1
|
||||
#define INTERLEAVE_FWD 0
|
||||
#define INTERLEAVE_REV 1
|
||||
#define PUNCTURE 128
|
||||
|
||||
class interleave
|
||||
{
|
||||
protected:
|
||||
int size;
|
||||
int depth;
|
||||
int len;
|
||||
int direction;
|
||||
unsigned char *table;
|
||||
unsigned char *tab(int i, int j, int k) {
|
||||
|
@ -45,6 +47,7 @@ public:
|
|||
~interleave();
|
||||
void symbols (unsigned char *psyms);
|
||||
void bits (unsigned int *pbits);
|
||||
void flush();
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
|
|
@ -151,6 +151,7 @@ protected:
|
|||
double tonespacing;
|
||||
double basefreq;
|
||||
int counter;
|
||||
int depth;
|
||||
// receive
|
||||
int rxstate;
|
||||
C_FIR_filter *hbfilt;
|
||||
|
|
|
@ -203,6 +203,8 @@ extern modem *mfsk22_modem;
|
|||
extern modem *mfsk31_modem;
|
||||
extern modem *mfsk64_modem;
|
||||
extern modem *mfsk128_modem;
|
||||
extern modem *mfsk64l_modem;
|
||||
extern modem *mfsk128l_modem;
|
||||
|
||||
extern modem *wefax576_modem;
|
||||
extern modem *wefax288_modem;
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
// Copyright (C) 2006-2008
|
||||
// Dave Freese, W1HKJ
|
||||
//
|
||||
// This file is part of fldigi. Adapted from code contained in gmfsk source code
|
||||
// This file is part of fldigi. Adapted from code contained in gmfsk source code
|
||||
// distribution.
|
||||
// gmfsk Copyright (C) 2001, 2002, 2003
|
||||
// Tomi Manninen (oh2bns@sral.fi)
|
||||
|
@ -29,15 +29,16 @@
|
|||
|
||||
#include "interleave.h"
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
interleave::interleave (int _size, int _depth, int dir)
|
||||
{
|
||||
size = _size;
|
||||
depth = _depth;
|
||||
direction = dir;
|
||||
table = new unsigned char [depth * size * size];
|
||||
memset(table, 0, depth * size * size);
|
||||
len = size * size * depth;
|
||||
table = new unsigned char [len];
|
||||
flush();
|
||||
}
|
||||
|
||||
interleave::~interleave ()
|
||||
|
@ -81,5 +82,16 @@ void interleave::bits(unsigned int *pbits)
|
|||
*pbits = (*pbits << 1) | syms[i];
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
void interleave::flush(void)
|
||||
{
|
||||
// Fill entire RX interleaver with punctures or 0 depending on whether
|
||||
// Rx or Tx
|
||||
if (direction == INTERLEAVE_REV)
|
||||
memset(table, PUNCTURE, len);
|
||||
else
|
||||
memset(table, 0, len);
|
||||
}
|
||||
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
|
|
|
@ -161,7 +161,7 @@ mfsk::mfsk(trx_mode mfsk_mode) : modem()
|
|||
|
||||
double bw, cf, flo, fhi;
|
||||
mode = mfsk_mode;
|
||||
int depth = 10;
|
||||
depth = 10;
|
||||
|
||||
//VK2ETA high speed modes
|
||||
preamble = 107;
|
||||
|
@ -223,6 +223,25 @@ mfsk::mfsk(trx_mode mfsk_mode) : modem()
|
|||
cap |= CAP_IMG;
|
||||
preamble = 214;
|
||||
break;
|
||||
|
||||
case MODE_MFSK64L:
|
||||
samplerate = 8000;
|
||||
symlen = 128;
|
||||
symbits = 4;
|
||||
depth = 400;
|
||||
preamble = 2500;
|
||||
basetone = 16;
|
||||
numtones = 16;
|
||||
break;
|
||||
case MODE_MFSK128L:
|
||||
samplerate = 8000;
|
||||
symlen = 64;
|
||||
symbits = 4;
|
||||
depth = 800;
|
||||
preamble = 5000;
|
||||
basetone = 8;
|
||||
numtones = 16;
|
||||
break;
|
||||
|
||||
case MODE_MFSK11:
|
||||
samplerate = 11025;
|
||||
|
@ -324,7 +343,6 @@ mfsk::mfsk(trx_mode mfsk_mode) : modem()
|
|||
// receive processing
|
||||
//=====================================================================
|
||||
|
||||
|
||||
void mfsk::s2nreport(void)
|
||||
{
|
||||
modem::s2nreport();
|
||||
|
@ -1033,8 +1051,11 @@ int mfsk::tx_process()
|
|||
switch (txstate) {
|
||||
case TX_STATE_PREAMBLE:
|
||||
clearbits();
|
||||
for (int i = 0; i < preamble / 3; i++)
|
||||
sendbit(0);
|
||||
|
||||
if (mode != MODE_MFSK64L && mode != MODE_MFSK128L )
|
||||
for (int i = 0; i < preamble / 3; i++)
|
||||
sendbit(0);
|
||||
|
||||
txstate = TX_STATE_START;
|
||||
break;
|
||||
case TX_STATE_START:
|
||||
|
|
|
@ -253,6 +253,9 @@ const int cRsId::rsid_ids_size1 = sizeof(rsid_ids_1)/sizeof(*rsid_ids_1) - 1;
|
|||
ELEM2_(681, DOMINOEX_88, MODE_DOMINOEX88) \
|
||||
\
|
||||
ELEM2_(687, MFSK31, MODE_MFSK31) \
|
||||
\
|
||||
ELEM2_(1026, MFSK64L, MODE_MFSK64L) \
|
||||
ELEM2_(1029, MFSK128L, MODE_MFSK128L) \
|
||||
\
|
||||
ELEM2_(0, NONE2, NUM_MODES)
|
||||
|
||||
|
|
|
@ -55,6 +55,8 @@ modem *mfsk22_modem = 0;
|
|||
modem *mfsk31_modem = 0;
|
||||
modem *mfsk64_modem = 0;
|
||||
modem *mfsk128_modem = 0;
|
||||
modem *mfsk64l_modem = 0;
|
||||
modem *mfsk128l_modem = 0;
|
||||
|
||||
modem *wefax576_modem = 0;
|
||||
modem *wefax288_modem = 0;
|
||||
|
|
Ładowanie…
Reference in New Issue