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 : 1029
pull/1/head
John Phelps 2013-10-22 05:05:35 -05:00 zatwierdzone przez David Freese
rodzic 7dcfc50610
commit 0b8143b466
10 zmienionych plików z 70 dodań i 14 usunięć

Wyświetl plik

@ -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},

Wyświetl plik

@ -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" },

Wyświetl plik

@ -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,

Wyświetl plik

@ -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();
};
// ----------------------------------------------------------------------------

Wyświetl plik

@ -151,6 +151,7 @@ protected:
double tonespacing;
double basefreq;
int counter;
int depth;
// receive
int rxstate;
C_FIR_filter *hbfilt;

Wyświetl plik

@ -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;

Wyświetl plik

@ -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);
}
// ----------------------------------------------------------------------

Wyświetl plik

@ -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:

Wyświetl plik

@ -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)

Wyświetl plik

@ -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;