Upstream version 2.10L

pull/2/head
Stelios Bounanos 2008-02-28 08:13:53 +00:00
rodzic 28718230c5
commit b295c0f877
25 zmienionych plików z 6280 dodań i 72 usunięć

Wyświetl plik

@ -16,8 +16,9 @@ Change Log:
12) Fixes to mfsk picture mode decoding
13) Changed frequency2 data file format, downward compatible
14) Added FELD_SLOWHELL, FELD_HELLX5 and FELD_HELLX9 modems
15 Added support to the PortAudio backend for separate capture and playback
devices and sample rates
15) Added support to the PortAudio backend for separate capture and playback
devices and sample rates
16) Added mt63 500/1000/2000 modes
2.09 1) Modified src/Makefile.am for FreeBSD name space clash
2) Added psk multi-channel viewer with regex search capability

Wyświetl plik

@ -4,7 +4,7 @@
AC_COPYRIGHT([Copyright (C) 2007, 2008 Stelios Bounanos, M0GLD (m0gld AT enotty DOT net)])
AC_PREREQ(2.61)
AC_INIT([fldigi], [2.10K], [w1hkj AT w1hkj DOT com])
AC_INIT([fldigi], [2.10L], [w1hkj AT w1hkj DOT com])
AC_CONFIG_AUX_DIR([build-aux])
# define build, build_cpu, build_vendor, build_os

Wyświetl plik

@ -161,6 +161,9 @@ fldigi_SOURCES += \
include/mixer.h \
include/modem.h \
include/morse.h \
include/mt63base.h \
include/mt63.h \
include/dsp.h \
include/newinstall.h \
include/olivia.h \
include/picture.h \
@ -227,6 +230,9 @@ fldigi_SOURCES += \
misc/threads.cxx \
misc/timeops.cxx \
misc/util.cxx \
mt63/dsp.cxx \
mt63/mt63.cxx \
mt63/mt63base.cxx \
olivia/olivia.cxx \
psk/psk.cxx \
psk/pskcoeff.cxx \
@ -279,6 +285,12 @@ EXTRA_fldigi_SOURCES += \
feld/FeldStyl-14.cxx \
feld/FeldVert-14.cxx \
feld/FeldWide-14.cxx \
mt63/alias_1k.dat \
mt63/alias_2k.dat \
mt63/morse.dat \
mt63/symbol.dat \
mt63/alias_k5.dat \
mt63/mt63intl.dat \
trx/tune.cxx
# Additional non-source files that we distribute

Wyświetl plik

@ -1028,6 +1028,13 @@ progdefaults.changed = true;
initViewer();
}
Fl_Spinner *cntChannels=(Fl_Spinner *)0;
static void cb_cntChannels(Fl_Spinner* o, void*) {
progdefaults.VIEWERchannels = (int)(o->value());
initViewer();
}
Fl_Spinner *cntStartFrequency=(Fl_Spinner *)0;
static void cb_cntStartFrequency(Fl_Spinner* o, void*) {
@ -1036,13 +1043,6 @@ progdefaults.changed = true;
initViewer();
}
Fl_Spinner *cntChannels=(Fl_Spinner *)0;
static void cb_cntChannels(Fl_Spinner* o, void*) {
progdefaults.VIEWERchannels = (int)(o->value());
initViewer();
}
Fl_Spinner *cntTimeout=(Fl_Spinner *)0;
static void cb_cntTimeout(Fl_Spinner* o, void*) {
@ -1050,6 +1050,25 @@ static void cb_cntTimeout(Fl_Spinner* o, void*) {
progdefaults.changed = true;
}
Fl_Group *tabMT63=(Fl_Group *)0;
Fl_Check_Button *btnMT63_8bit=(Fl_Check_Button *)0;
static void cb_btnMT63_8bit(Fl_Check_Button* o, void*) {
progdefaults.mt63_8bit = o->value();
progdefaults.changed = true;
}
Fl_Check_Button *btnmt63_interleave=(Fl_Check_Button *)0;
static void cb_btnmt63_interleave(Fl_Check_Button* o, void*) {
if (o->value() == 1)
progdefaults.mt63_interleave = 64;
else
progdefaults.mt63_interleave = 32;
progdefaults.changed = true;
}
Fl_Group *tabRTTY=(Fl_Group *)0;
Fl_Choice *selShift=(Fl_Choice *)0;
@ -1167,7 +1186,7 @@ static const char szStopBits[] = "1|1.5|2";
static const char szOliviaTones[] = "2|4|8|16|32|64|128|256";
static const char szOliviaBandwidth[] = "125|250|500|1000|2000";
static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600|115200|230400|460800";
{ Fl_Double_Window* o = new Fl_Double_Window(400, 254, "fldigi - config");
{ Fl_Double_Window* o = new Fl_Double_Window(400, 250, "fldigi - config");
w = o;
o->color(FL_DARK2);
o->selection_color((Fl_Color)51);
@ -1967,6 +1986,7 @@ fect after a restart.");
{ Fl_Group* o = tabFeld = new Fl_Group(0, 50, 400, 170, "Feld");
o->color((Fl_Color)51);
o->selection_color((Fl_Color)51);
o->hide();
{ Fl_Choice* o = selHellFont = new Fl_Choice(175, 62, 122, 20, "Feld Hell Font:");
o->down_box(FL_BORDER_BOX);
o->labelfont(4);
@ -2063,7 +2083,7 @@ fect after a restart.");
}
{ Fl_Group* o = tabPSK = new Fl_Group(0, 50, 400, 170, "Psk");
o->hide();
{ Fl_Counter* o = cntSearchRange = new Fl_Counter(25, 60, 80, 21, "Search Range");
{ Fl_Counter* o = cntSearchRange = new Fl_Counter(120, 60, 80, 21, "Search Range");
o->type(1);
o->minimum(10);
o->maximum(500);
@ -2073,16 +2093,16 @@ fect after a restart.");
o->align(FL_ALIGN_RIGHT);
o->value(progdefaults.SearchRange);
}
{ Fl_Group* o = new Fl_Group(15, 87, 370, 53, "PskMail Server");
{ Fl_Group* o = new Fl_Group(3, 175, 395, 43, "PskMail Server");
o->box(FL_ENGRAVED_FRAME);
o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
{ Fl_Check_Button* o = btnPSKmailSweetSpot = new Fl_Check_Button(20, 106, 130, 20, "use sweetspot");
{ Fl_Check_Button* o = btnPSKmailSweetSpot = new Fl_Check_Button(25, 190, 130, 20, "use sweetspot");
o->down_box(FL_DOWN_BOX);
o->value(1);
o->callback((Fl_Callback*)cb_btnPSKmailSweetSpot);
o->value(progdefaults.PSKmailSweetSpot);
}
{ Fl_Counter* o = cntServerOffset = new Fl_Counter(150, 104, 80, 21, "Server Search Range");
{ Fl_Counter* o = cntServerOffset = new Fl_Counter(165, 189, 80, 21, "Server Search Range");
o->type(1);
o->minimum(10);
o->maximum(500);
@ -2094,32 +2114,20 @@ fect after a restart.");
}
o->end();
}
o->end();
}
{ Fl_Group* o = new Fl_Group(0, 50, 400, 170, "PskViewer");
o->hide();
{ Fl_Group* o = new Fl_Group(5, 60, 390, 155);
{ Fl_Group* o = new Fl_Group(3, 85, 395, 90, "Psk Viewer");
o->box(FL_ENGRAVED_FRAME);
o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
{ Fl_Check_Button* o = btnMarquee = new Fl_Check_Button(25, 87, 120, 15, "Marquee style");
{ Fl_Check_Button* o = btnMarquee = new Fl_Check_Button(11, 110, 120, 15, "Marquee style");
o->down_box(FL_DOWN_BOX);
o->callback((Fl_Callback*)cb_btnMarquee);
o->value(progdefaults.VIEWERmarquee);
}
{ Fl_Check_Button* o = btnShowFrequencies = new Fl_Check_Button(25, 125, 150, 15, "Show Frequencies");
{ Fl_Check_Button* o = btnShowFrequencies = new Fl_Check_Button(11, 144, 109, 15, "Show Freq\'s");
o->down_box(FL_DOWN_BOX);
o->callback((Fl_Callback*)cb_btnShowFrequencies);
o->value(progdefaults.VIEWERshowfreq);
}
{ Fl_Spinner* o = cntStartFrequency = new Fl_Spinner(190, 120, 60, 25, "Start Frequency:");
o->callback((Fl_Callback*)cb_cntStartFrequency);
o->align(FL_ALIGN_RIGHT);
o->minimum(200);
o->maximum(1000);
o->step(100);
o->value(progdefaults.VIEWERstart);
}
{ Fl_Spinner* o = cntChannels = new Fl_Spinner(190, 82, 50, 25, "# Channels:");
{ Fl_Spinner* o = cntChannels = new Fl_Spinner(135, 140, 39, 25, "# Channels");
o->callback((Fl_Callback*)cb_cntChannels);
o->align(FL_ALIGN_RIGHT);
o->minimum(5);
@ -2127,7 +2135,15 @@ fect after a restart.");
o->step(1);
o->value(progdefaults.VIEWERchannels);
}
{ Fl_Spinner* o = cntTimeout = new Fl_Spinner(190, 155, 50, 25, "Aging (sec)");
{ Fl_Spinner* o = cntStartFrequency = new Fl_Spinner(135, 105, 50, 25, "Start Freq");
o->callback((Fl_Callback*)cb_cntStartFrequency);
o->align(FL_ALIGN_RIGHT);
o->minimum(200);
o->maximum(1000);
o->step(100);
o->value(progdefaults.VIEWERstart);
}
{ Fl_Spinner* o = cntTimeout = new Fl_Spinner(261, 105, 50, 25, "Aging (sec)");
o->callback((Fl_Callback*)cb_cntTimeout);
o->align(FL_ALIGN_RIGHT);
o->minimum(10);
@ -2139,6 +2155,24 @@ fect after a restart.");
}
o->end();
}
{ Fl_Group* o = tabMT63 = new Fl_Group(0, 50, 400, 170, "MT-63");
{ Fl_Group* o = new Fl_Group(5, 60, 390, 155);
o->box(FL_ENGRAVED_FRAME);
o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
{ Fl_Check_Button* o = btnMT63_8bit = new Fl_Check_Button(55, 90, 163, 15, "8 bit extended chars");
o->down_box(FL_DOWN_BOX);
o->callback((Fl_Callback*)cb_btnMT63_8bit);
o->value(progdefaults.mt63_8bit);
}
{ Fl_Check_Button* o = btnmt63_interleave = new Fl_Check_Button(55, 120, 165, 15, "64 bit interleave");
o->down_box(FL_DOWN_BOX);
o->callback((Fl_Callback*)cb_btnmt63_interleave);
o->value(0);if (progdefaults.mt63_interleave == 64) o->value(1);
}
o->end();
}
o->end();
}
{ Fl_Group* o = tabRTTY = new Fl_Group(0, 50, 400, 170, "RTTY");
o->color((Fl_Color)51);
o->selection_color((Fl_Color)51);

Wyświetl plik

@ -35,7 +35,7 @@ static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600
code {} {}
Fl_Window {} {
label {fldigi - config} open
xywh {868 365 400 254} type Double color 45 selection_color 51 align 80 visible
xywh {520 101 400 250} type Double color 45 selection_color 51 align 80 visible
} {
Fl_Tabs tabsConfigure {open
xywh {0 0 405 220} color 47 selection_color 9
@ -668,7 +668,7 @@ o->label((inpQRZuserpassword->type() & FL_SECRET_INPUT) ? "Show" : "Hide");}
label OSS
callback {update_sound_config(SND_IDX_OSS);
progdefaults.changed = true;
resetSoundCard();} selected
resetSoundCard();}
xywh {5 63 100 25} down_box DIAMOND_DOWN_BOX selection_color 1
}
Fl_Input_Choice menuOSSDev {
@ -1052,7 +1052,7 @@ progdefaults.changed = true;}
}
Fl_Group tabFeld {
label Feld open
xywh {0 50 400 170} color 51 selection_color 51
xywh {0 50 400 170} color 51 selection_color 51 hide
} {
Fl_Choice selHellFont {
label {Feld Hell Font:}
@ -1066,7 +1066,7 @@ progdefaults.changed = true;} open
Fl_Value_Slider sldrHellBW {
label {Filter BW}
callback {active_modem->set_bandwidth(sldrHellBW->value());
progdefaults.changed = true;} selected
progdefaults.changed = true;}
xywh {30 190 345 20} type Horizontal color 215 align 5 minimum 10 maximum 2400 step 5 value 400 textsize 14
}
Fl_Check_Button btnHellXmtWidth {
@ -1162,18 +1162,18 @@ progdefaults.changed = true;}
callback {progdefaults.SearchRange = (int)o->value();
wf->redraw_marker();
progdefaults.changed = true;}
xywh {25 60 80 21} type Simple align 8 minimum 10 maximum 500 step 10 value 200
xywh {120 60 80 21} type Simple align 8 minimum 10 maximum 500 step 10 value 200
code0 {o->value(progdefaults.SearchRange);}
}
Fl_Group {} {
label {PskMail Server} open
xywh {15 87 370 53} box ENGRAVED_FRAME align 21
xywh {3 175 395 43} box ENGRAVED_FRAME align 21
} {
Fl_Check_Button btnPSKmailSweetSpot {
label {use sweetspot}
callback {progdefaults.PSKmailSweetSpot = o->value();
progdefaults.changed = true;}
xywh {20 106 130 20} down_box DOWN_BOX value 1
xywh {25 190 130 20} down_box DOWN_BOX value 1
code0 {o->value(progdefaults.PSKmailSweetSpot);}
}
Fl_Counter cntServerOffset {
@ -1181,60 +1181,56 @@ progdefaults.changed = true;}
callback {progdefaults.ServerOffset = (int)o->value();
wf->redraw_marker();
progdefaults.changed = true;}
xywh {150 104 80 21} type Simple align 8 minimum 10 maximum 500 step 10 value 200
xywh {165 189 80 21} type Simple align 8 minimum 10 maximum 500 step 10 value 200
code0 {o->value(progdefaults.SearchRange);}
}
}
}
Fl_Group {} {
label PskViewer open
xywh {0 50 400 170} hide
} {
Fl_Group {} {open
xywh {5 60 390 155} box ENGRAVED_FRAME align 21
Fl_Group {} {
label {Psk Viewer} open
xywh {3 85 395 90} box ENGRAVED_FRAME align 21
} {
Fl_Check_Button btnMarquee {
label {Marquee style}
callback {progdefaults.VIEWERmarquee = o->value();
progdefaults.changed = true;
initViewer();}
xywh {25 87 120 15} down_box DOWN_BOX
xywh {11 110 120 15} down_box DOWN_BOX
code0 {o->value(progdefaults.VIEWERmarquee);}
}
Fl_Check_Button btnShowFrequencies {
label {Show Frequencies}
label {Show Freq's}
callback {progdefaults.VIEWERshowfreq = o->value();
progdefaults.changed = true;
initViewer();}
xywh {25 125 150 15} down_box DOWN_BOX
xywh {11 144 109 15} down_box DOWN_BOX
code0 {o->value(progdefaults.VIEWERshowfreq);}
}
Fl_Spinner cntStartFrequency {
label {Start Frequency:}
callback {progdefaults.VIEWERstart = (int)(o->value());
progdefaults.changed = true;
initViewer();}
xywh {190 120 60 25} align 8
code0 {o->minimum(200);}
code1 {o->maximum(1000);}
code2 {o->step(100);}
code3 {o->value(progdefaults.VIEWERstart);}
}
Fl_Spinner cntChannels {
label {\# Channels:}
label {\# Channels}
callback {progdefaults.VIEWERchannels = (int)(o->value());
initViewer();}
xywh {190 82 50 25} align 8
xywh {135 140 39 25} align 8
code0 {o->minimum(5);}
code1 {o->maximum(30);}
code2 {o->step(1);}
code3 {o->value(progdefaults.VIEWERchannels);}
}
Fl_Spinner cntStartFrequency {
label {Start Freq}
callback {progdefaults.VIEWERstart = (int)(o->value());
progdefaults.changed = true;
initViewer();}
xywh {135 105 50 25} align 8
code0 {o->minimum(200);}
code1 {o->maximum(1000);}
code2 {o->step(100);}
code3 {o->value(progdefaults.VIEWERstart);}
}
Fl_Spinner cntTimeout {
label {Aging (sec)}
callback {progdefaults.VIEWERtimeout = (int)(o->value());
progdefaults.changed = true;}
xywh {190 155 50 25} align 8
xywh {261 105 50 25} align 8
code0 {o->minimum(10);}
code1 {o->maximum(180);}
code2 {o->step(1);}
@ -1242,6 +1238,32 @@ progdefaults.changed = true;}
}
}
}
Fl_Group tabMT63 {
label {MT-63} open selected
xywh {0 50 400 170}
} {
Fl_Group {} {open
xywh {5 60 390 155} box ENGRAVED_FRAME align 21
} {
Fl_Check_Button btnMT63_8bit {
label {8 bit extended chars}
callback {progdefaults.mt63_8bit = o->value();
progdefaults.changed = true;}
xywh {55 90 163 15} down_box DOWN_BOX
code0 {o->value(progdefaults.mt63_8bit);}
}
Fl_Check_Button btnmt63_interleave {
label {64 bit interleave}
callback {if (o->value() == 1)
progdefaults.mt63_interleave = 64;
else
progdefaults.mt63_interleave = 32;
progdefaults.changed = true;}
xywh {55 120 165 15} down_box DOWN_BOX
code0 {o->value(0);if (progdefaults.mt63_interleave == 64) o->value(1);}
}
}
}
Fl_Group tabRTTY {
label RTTY open
xywh {0 50 400 170} color 51 selection_color 51 hide

Wyświetl plik

@ -53,6 +53,7 @@
#include "psk.h"
#include "cw.h"
#include "mfsk.h"
#include "mt63.h"
#include "rtty.h"
#include "olivia.h"
#include "dominoex.h"
@ -178,6 +179,13 @@ Fl_Menu_Item quick_change_mfsk[] = {
{ 0 }
};
Fl_Menu_Item quick_change_mt63[] = {
{ mode_info[MODE_MT63_500].name, 0, cb_init_mode, (void *)MODE_MT63_500 },
{ mode_info[MODE_MT63_1000].name, 0, cb_init_mode, (void *)MODE_MT63_1000 },
{ mode_info[MODE_MT63_2000].name, 0, cb_init_mode, (void *)MODE_MT63_2000 },
{ 0 }
};
Fl_Menu_Item quick_change_domino[] = {
{ mode_info[MODE_DOMINOEX4].name, 0, cb_init_mode, (void *)MODE_DOMINOEX4 },
{ mode_info[MODE_DOMINOEX5].name, 0, cb_init_mode, (void *)MODE_DOMINOEX5 },
@ -361,6 +369,13 @@ void init_modem(trx_mode mode)
quick_change = quick_change_mfsk;
break;
case MODE_MT63_500: case MODE_MT63_1000: case MODE_MT63_2000 :
startup_modem(*mode_info[mode].modem ? *mode_info[mode].modem :
*mode_info[mode].modem = new mt63(mode));
quick_change = quick_change_mt63;
modem_config_tab = tabMT63;
break;
case MODE_BPSK31: case MODE_PSK63: case MODE_PSK125: case MODE_PSK250:
startup_modem(*mode_info[mode].modem ? *mode_info[mode].modem :
*mode_info[mode].modem = new psk(mode));
@ -939,6 +954,12 @@ Fl_Menu_Item menu_[] = {
{ mode_info[MODE_MFSK16].name, 0, cb_init_mode, (void *)MODE_MFSK16, 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},
{ mode_info[MODE_MT63_500].name, 0, cb_init_mode, (void *)MODE_MT63_500, 0, FL_NORMAL_LABEL, 0, 14, 0},
{ mode_info[MODE_MT63_1000].name, 0, cb_init_mode, (void *)MODE_MT63_1000, 0, FL_NORMAL_LABEL, 0, 14, 0},
{ mode_info[MODE_MT63_2000].name, 0, cb_init_mode, (void *)MODE_MT63_2000, 0, FL_NORMAL_LABEL, 0, 14, 0},
{0,0,0,0,0,0,0,0,0},
{"PSK", 0, 0, 0, FL_SUBMENU, FL_NORMAL_LABEL, 0, 14, 0},
{ mode_info[MODE_BPSK31].name, 0, cb_init_mode, (void *)MODE_BPSK31, 0, FL_NORMAL_LABEL, 0, 14, 0},
{ mode_info[MODE_QPSK31].name, 0, cb_init_mode, (void *)MODE_QPSK31, 0, FL_NORMAL_LABEL, 0, 14, 0},
@ -946,10 +967,8 @@ Fl_Menu_Item menu_[] = {
{ mode_info[MODE_QPSK63].name, 0, cb_init_mode, (void *)MODE_QPSK63, 0, FL_NORMAL_LABEL, 0, 14, 0},
{ mode_info[MODE_PSK125].name, 0, cb_init_mode, (void *)MODE_PSK125, 0, FL_NORMAL_LABEL, 0, 14, 0},
{ mode_info[MODE_QPSK125].name, 0, cb_init_mode, (void *)MODE_QPSK125, 0, FL_NORMAL_LABEL, 0, 14, 0},
#ifdef USE250
{ mode_info[MODE_PSK250].name, 0, cb_init_mode, (void *)MODE_PSK250, 0, FL_NORMAL_LABEL, 0, 14, 0},
{ mode_info[MODE_QPSK250].name, 0, cb_init_mode, (void *)MODE_QPSK250, 0, FL_NORMAL_LABEL, 0, 14, 0},
#endif
{0,0,0,0,0,0,0,0,0},
{ mode_info[MODE_OLIVIA].name, 0, cb_init_mode, (void *)MODE_OLIVIA, 0, FL_NORMAL_LABEL, 0, 14, 0},

Wyświetl plik

@ -63,6 +63,10 @@ const struct mode_info_t mode_info[NUM_MODES] = {
{ MODE_MFSK8, &mfsk8_modem, "MFSK-8", "MFSK-8", "MFSK16" },
{ MODE_MFSK16, &mfsk16_modem, "MFSK16", "MFSK-16", "MFSK8" },
{ MODE_MT63_500, &mt63_500_modem, "MT63-500", "MT63-500", "" },
{ MODE_MT63_1000, &mt63_1000_modem, "MT63-1XX", "MT63-1000", "" },
{ MODE_MT63_2000, &mt63_2000_modem, "MT63-2XX", "MT63-2000", "" },
{ MODE_BPSK31, &psk31_modem, "BPSK31", "BPSK-31", "PSK31" },
{ MODE_QPSK31, &qpsk31_modem, "QPSK31", "QPSK-31", "QPSK31" },
{ MODE_PSK63, &psk63_modem, "PSK-63", "BPSK-63", "PSK63" },
@ -83,8 +87,6 @@ const struct mode_info_t mode_info[NUM_MODES] = {
{ MODE_THROBX2, &throbx2_modem, "THRBX2", "ThrobX 2", "" },
{ MODE_THROBX4, &throbx4_modem, "THRBX4", "ThrobX 4", "" },
// { MODE_MT63, 0, "MT63", "MT-63", "" },
{ MODE_WWV, &wwv_modem, "WWV", "WWV", "" },
{ MODE_ANALYSIS, &anal_modem, "ANALYSIS", "Freq Analysis", "" }

Wyświetl plik

@ -162,9 +162,12 @@ extern Fl_Check_Button *btnPSKmailSweetSpot;
extern Fl_Counter *cntServerOffset;
extern Fl_Check_Button *btnMarquee;
extern Fl_Check_Button *btnShowFrequencies;
extern Fl_Spinner *cntStartFrequency;
extern Fl_Spinner *cntChannels;
extern Fl_Spinner *cntStartFrequency;
extern Fl_Spinner *cntTimeout;
extern Fl_Group *tabMT63;
extern Fl_Check_Button *btnMT63_8bit;
extern Fl_Check_Button *btnmt63_interleave;
extern Fl_Group *tabRTTY;
extern Fl_Choice *selShift;
extern Fl_Choice *selBaud;

Wyświetl plik

@ -66,7 +66,6 @@ struct configuration {
double CWpost;
bool CWid;
int CWIDwpm;
// FELD-HELL
bool FELD_IDLE;
// OLIVIA
@ -76,6 +75,9 @@ struct configuration {
int oliviasinteg;
// DOMINOEX
double DOMINOEX_BW;
// MT63
bool mt63_8bit;
int mt63_interleave;
// User interface data
int Fontnbr;
int FontSize;

1121
src/include/dsp.h 100644

Plik diff jest za duży Load Diff

Wyświetl plik

@ -69,6 +69,10 @@ enum {
MODE_MFSK8,
MODE_MFSK16,
MODE_MT63_500,
MODE_MT63_1000,
MODE_MT63_2000,
MODE_BPSK31,
MODE_QPSK31,
MODE_PSK63,
@ -89,8 +93,6 @@ enum {
MODE_THROBX2,
MODE_THROBX4,
// MODE_MT63,
MODE_WWV,
MODE_ANALYSIS,

Wyświetl plik

@ -181,6 +181,9 @@ public:
extern modem *cw_modem;
extern modem *mfsk8_modem;
extern modem *mfsk16_modem;
extern modem *mt63_500_modem;
extern modem *mt63_1000_modem;
extern modem *mt63_2000_modem;
extern modem *feld_modem;
extern modem *feld_slowmodem;
extern modem *feld_x5modem;

63
src/include/mt63.h 100644
Wyświetl plik

@ -0,0 +1,63 @@
//
// mt63.h
//
// Copyright (C) 2006
// Dave Freese, W1HKJ
//
// This file is part of fldigi. Adapted from code contained in gmfsk source code
// distribution.
// Copyright (C) 2005
// Tomi Manninen (oh2bns@sral.fi)
//
// fldigi is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// fldigi is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with fldigi; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
//
#ifndef MT63_MODEM_H
#define MT63_MODEM_H
#include "sound.h"
#include "confdialog.h"
#include "dsp.h"
#include "mt63base.h"
#include "trx.h"
using namespace std;
class mt63 : public modem {
private:
int Interleave;
int flush;
int escape;
MT63tx *Tx;
MT63rx *Rx;
dspLevelMonitor *InpLevel;
double_buff *InpBuff;
public:
mt63(trx_mode mode);
~mt63();
void init();
void rx_init();
void tx_init(SoundBase*);
void restart();
int rx_process(const double *buf, int len);
int tx_process();
};
#endif

Wyświetl plik

@ -0,0 +1,417 @@
/*
* mt63base.h -- MT63 transmitter and receiver in C++ for LINUX
*
* Copyright (c) 2007, 2008 Dave Freese, W1HKJ
*
* base class for use by fldigi
* modified from original
* excluded CW_ID which is a part of the base modem class for fldigi
*
* based on mt63 code by Pawel Jalocha
* Copyright (C) 1999-2004 Pawel Jalocha, SP9VRC
* Copyright (c) 2007-2008 Dave Freese, W1HKJ
*
* This file is part of fldigi.
*
* fldigi is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* fldigi is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty oF
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with MT63; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#ifndef MT63BASE_H
#define MT63BASE_H
// ==========================================================================
// Morse Encoder
/*
class MorseEncoder
{ public:
MorseEncoder();
~MorseEncoder();
void Free(void);
int SetTxMsg(char *Msg); // set the message to be transmitted
int NextKey(void); // get the next key state (ON of OFF)
private:
char *TxMsg;
int TxPtr;
long Code;
} ;
*/
// ==========================================================================
// Character encoder and block interleaver for the MT63 modem
/*
How to use this class:
1. Create or declare an object like:
MT63encoder Encoder;
2. Preset the object for the given number of carriers and interleave:
err=Encoder.Preset(<carriers>,<interleave>,<pattern>);
MT63 uses 64 carriers and interleave of 32 or 64
- the corresponding interleave patterns can be found in mt63.dat.
If Encode.Preset() returns non-zero you are in big troubles !
3. For each character to be encode you make the call:
Encoder.Process(<character>);
and you should then take the bits from the Encode.Output
- these are the bits to be sent out on the carriers.
(for MT63 logical 0 means carrier flip, logical 1 is no flip).
4. At any time you can call Encoder.Preset() again to change the parameters
(this will clean away the interleaver pipe).
*/
// MT63 modem specific routines, made to be compatible with the MT63ASC.ASM
// (c) 1999 Pawel Jalocha, SP9VRC, jalocha@hpdel1.ifj.edu.pl
// Date: 05-NOV-1999
class MT63encoder
{ public:
MT63encoder();
~MT63encoder();
void Free();
int Preset(int Carriers, int Intlv, int *Pattern, int RandFill=0);
int Process(char code);
char *Output;
private:
int DataCarriers;
char CodeMask;
int IntlvLen;
int IntlvSize;
int *IntlvPatt;
char *IntlvPipe;
int IntlvPtr;
double *WalshBuff;
} ;
// ==========================================================================
// MT63 envelope (non-synchronous) time and frequency synchronizer
// experimental status: looks like it's not good enough.
/*
class MT63sync
{ public:
MT63sync();
~MT63sync();
void Free(void);
int Preset(int FFTlen, int FirstCarr, int CarrSepar, int Carriers, int Steps,
int Margin, int Integ);
int Process(dspCmpx *SpectraSlice);
int SdspAmpleNow;
int Locked;
double FreqOfs;
double TimeOfs;
private:
int FFTmask;
int FirstDataCarr;
int DataCarrSepar;
int DataCarriers;
int ScanMargin;
int ScanFirst;
int ScanLen;
int StepsPerSymb;
int ScanSize;
double *PwrIntegMid,*PwrIntegOut;
int IntegPtr;
int NodspRMSize;
double *NormPwr;
// int SymbPtr;
double W1,W2,W5;
} ;
*/
// ==========================================================================
// MT63 deinterleaver and decoder
/*
How to use this class:
1. Create or declare an object:
MT63decoder Decoder;
2. Preset given parameters with Decoder.Preset();
Decoder.Preset();
Number of carriers and interleave are same as for MT63encoder.
"Margin" is the number of extra carriers demodulated on the side
because with the MT63 you cannot say with full confidence which
is really the first carrier: the FEC decoder have to tell you this.
"Integ" is the integration period to find the best FEC match.
"Integ" is measured in MT63 symbols (at 1000 kHz we do 10 symbols/s).
3. For each symbol period feed the demodulated data into the object:
Decoder.Process(<data>);
and then get the demodulated character code from Decoder.Output
You can get as well the measured signal-to-noise ratio from Decoder.SNR
and the index of the first carrier (according to the FEC match)
from Decoder.CarrOfs
4. You can change the parameters at any time with Decoder.Preset()
(this will clean the data pipes).
*/
class MT63decoder
{ public:
MT63decoder();
~MT63decoder();
void Free();
int Preset(int Carriers, int Intlv, int *Pattern, int Margin, int Integ);
int Process(double *Data);
char Output;
double SignalToNoise;
int CarrOfs;
private:
int DataCarriers;
double *IntlvPipe;
int IntlvLen;
int IntlvSize;
int IntlvPtr;
int *IntlvPatt;
double *WalshBuff;
int ScanLen;
int ScanSize;
double *DecodeSnrMid,*DecodeSnrOut;
double W1,W2,W5;
char *DecodePipe;
int DecodeLen;
int DecodeSize;
int DecodePtr;
} ;
// ==========================================================================
// MT63 transmitter
/*
How to use this class:
1. Create or declare an object:
MT63tx Tx;
2. Preset parameters:
Tx.Preset(<bandwidth>,<interleave>);
Allowed values are: bandwidth=500,1000,2000; interleave=0,1;
Non-zero value returned means there was a problem...
3. For each character to be sent:
Tx.SendChar(<char>);
After each call to SendChar() you must read the samples
from the Tx.Comb.Output.Data, the number of samples to read
is in Tx.Comb.Output.Len. They are in double floating point, so you should
convert them to 16-bit integers and output them to your soundcard.
4. If you have nothing to transmit, you must not stop, because
you have to keep the sound going. MT63 transmits NL characters (code=0)
in this case.
5. When you are done with all the characters and you want to stop,
you should still put some NL characters in to flush the interleave
thus please call the Tx.SendChar() Tx.DataInterleave times
(still add few more characters to flush the windowed IFFT buffers).
After that the MT63 transmits a jamming dspSequence for some time
to speed up carrier drop at the receiver: you do this by calling
Tx.SendJam();
6. You can transmit few symbols of silence by:
Tx.SendSilence()
to make a gracefull switch-off.
Remember: each time you call SendChar(), SendJam() or SendSilence()
you must send the contains of Tx.Comb.Output out to your soundcard.
Each Tx.SendXxx() produces the amount of sound corresponding to one
symbol time that is 0.1 second for the 1000 Hz mode.
The soundcard output rate must be 8000 Hz, rather precisely,
that is the error should be below 1 Hz. If it is not you should
use the rate converter: look into mt63tx for an example.
7. Inbetween transmissions you may change the settings by calling
the Tx.Preset() again.
*/
class MT63tx
{ public:
MT63tx(); ~MT63tx();
void Free(void);
int Preset(int BandWidth=1000, int LongInterleave=0);//, char *ID=NULL);
int SendTune(void);
int SendChar(char ch);
int SendJam(void);
int SendSilence(void);
private:
int DataCarriers; // the number of data carriers
int FirstDataCarr; // the FFT index of the first data carrier
// int DataCarrSepar; // separation [FFT bins] between data carriers
int WindowLen; // FFT window and symbol shape length
double *TxWindow; // The shape of the FFT window (=symbol shape)
// int SymbolSepar; // separation between symbols on a carrier
int AliasFilterLen; // anti-alias filter length
double *AliasShapeI,*AliasShapeQ; // and shapes
int DecimateRatio; // decimation/interpolation after/before filter
int *InterleavePattern; // how the bits of one block are placed on data carriers
double TxdspAmpl; // dspAmplitude applied to generate a carrier (before IFFT)
long CarrMarkCode;
int CarrMarkdspAmpl;
// MorseEncoder CW_Coder; // CW encoder
// char *CW_ID; // Morse Code identifier to be transmitted along the MT63 signal
// int CW_Carr; // the carrier index to transmit the CW
// double CW_dspAmpl; // CW dspAmplitude
// int CW_dspPhase; // CW dspPhase
// int CW_dspPhaseCorr; // CW dspPhase correction
MT63encoder Encoder; // data encode and interleaver
int *TxVect; // modulator vector (dspPhases)
int *dspPhaseCorr; // dspPhase corrections for each carrier
dspCmpx_buff WindowBuff; // FFT/window buffer
dsp_r2FFT FFT; // FFT engine
dspCmpxOverlapWindow Window; // overlapping window
int ProcessTxVect();
public:
int DataInterleave;
dspQuadrComb Comb; // the output of this module is in Comb.Output
} ;
// ==========================================================================
// MT63 receiver
/*
How to use this class:
1. Declare the object:
MT63rx Rx;
2. Preset paramateres
Rx.Preset(<bandwidth>,<interleave>,<integration>);
For weak signals I recommend integration of 32 or more,
otherwise 16 is enough. By the way, 16 means 1.6 second for 1000 Hz mode
because then we transmit 10 symbols per second.
3. Feed doubleing point sdspAmples into the Rx.Process, if you have signed 16-bit
sdspAmples, you should convert them first to doubleing point - look at how
I do it in mt63rx.cc
4. After EACH new batch of sdspAmples
you should look into Rx.Output for the decoded characters.
You can egzamin the receiver status at any time by calling:
Rx.SYNC_LockStatus() => logical value 0 or 1
Rx.SYNC_Confidence() => lock confidence: a double between 0.0 and 1.0
Rx.FEC_SNR() => signal-to-noise seen by FEC
Rx.TotalFreqOffset() => measured frequency offset in [Hz]
assuming 8000 Hz sdspAmpling
*/
class MT63rx
{ public:
MT63rx(); ~MT63rx();
void Free(void);
int Preset(int BandWidth=1000, int LongInterleave=0, int Integ=16,
void (*Display)(double *Spectra, int Len)=NULL);
int Process(double_buff *Input);
char_buff Output; // decoded characters
int SYNC_LockStatus(void); // 1 => locked, 0 => not locked
double SYNC_Confidence(void); // lock confidence <0..1>
double SYNC_FreqOffset(void);
double SYNC_FreqDevdspRMS(void);
double SYNC_TimeOffset(void);
double TotalFreqOffset(); // Total frequency offset in [Hz]
double FEC_SNR(void); // signal-to-noise ratio at the FEC
int FEC_CarrOffset(void);
private:
dspQuadrSplit InpSplit; // input filter, I/Q splitter, decimator
dspCmpxMixer TestOfs; // frequency offset for tests
dspDelayLine<dspCmpx> ProcLine; // processing pipe
int ProcdspDelay; // processing dspDelay for optimal symbol probing
int SyncProcPtr; // sdspAmpling pointer for the synchronizer
int DataProcPtr; // sdspAmpling pointer for the data demodulator
dsp_r2FFT FFT; // FFT engine
int WindowLen; // FFT window length = symbol shape length
int WindowLenMask; // WindowLen-1 for pointer wrapping
double *RxWindow; // FFT window shape = symbol shape
void (*SpectraDisplay)(double *Spectra, int Len);
double *SpectradspPower;
int AliasFilterLen; // anti-alias filter length
double *AliasShapeI,*AliasShapeQ; // and shapes
int DecimateRatio; // decimation/interpolation after/before filter
int *InterleavePattern; // how the bits of one block are placed on data carriers
int DataInterleave; // data interleave depth
int DataCarriers; // number of carriers
int FirstDataCarr; // the FFT index of the first data carrier
// int DataCarrSepar; // freq. separation between carriers [FFT bins]
long CarrMarkCode; // code to mark carriers (not in use here)
// int SymbolSepar; // time separation between symbols [sdspAmples]
int ScanMargin; // How many carriers up and down to search
int IntegLen; // Over how many symbols we integrate to synchronize
int SymbolDiv; // =4 we probe the input 4 times per symbol time
int SyncStep; // SymbolSepar/SymbolDiv
int ScanFirst; // first carrier to scan
int ScanLen; // number of carriers to scan
dspCmpx *FFTbuff;
dspCmpx *FFTbuff2;
// here starts the time/frequency synchronizer
void SyncProcess(dspCmpx *Slice);
dspCmpx *SyncPipe[4]; // FFT result buffer for sync.
int SyncPtr; // wrapping pointer for SyncPipe and integrators
int SymbPtr; // points about where the symbol is
dspCmpx *SyncPhCorr; // dspPhase corrections for the sync. processor
dspCmpx *CorrelMid[4], *CorrelOut[4]; // correlation integrator
double *dspPowerMid, *dspPowerOut; // carrier dspPower integrator
dspCmpx *CorrelNorm[4]; // normalized correlation
double W1,W2,W5; // correlation integrator weights
double W1p,W2p,W5p; // dspPower integrator weights
dspCmpx *CorrelAver[4]; // sliding sum to fit the carrier pattern
int FitLen;
void DoCorrelSum(dspCmpx *Correl1, dspCmpx *Correl2, dspCmpx *Aver);
dspCmpx *SymbFit; // vectors to match symbol shift and confidence
int SymbFitPos; // "smoothed" peak position
double *FreqPipe; // smoothing pipe for frequency offset
dspCmpx *SymbPipe; // smoothing pipe for symbol shift
int TrackPipeLen; // tracking pipe length
int TrackPipePtr; // pipe pointer
double AverFreq; // dspAveraged frequency
dspCmpx AverSymb; // dspAveraged symbol dspPhase
double SyncLockThres; // lock confidence threshold
double SyncHoldThres; // minimal confidence to hold the lock
int SyncLocked; // locked or not locked
double SyncSymbConf; // current smoothed confidence
double SyncFreqOfs; // current smoothed frequency offset
double SyncFreqDev; // frequency deviation (dspRMS)
double SyncSymbShift; // current smoothed symbol time shift
// here starts the data decoder
void DataProcess(dspCmpx *EvenSlice, dspCmpx *OddSlice, double FreqOfs, int TimeDist);
int DataScanMargin; // +/- data carriers to scan for best FEC match
int DataScanLen; // total number of data carriers being processed
int DataScanFirst;
dspCmpx *RefDataSlice; // reference data slice for differential dspPhase decode
dspCmpx *DataVect; // differentially decoded data vactor
int DataPipeLen; // pipe length
int DataPipePtr; // wrapping pointer
dspCmpx **DataPipe; // decoded vectors pipe
double *DataPwrMid,*DataPwrOut; // carrier dspPower integrator
dspCmpx *DataSqrMid,*DataSqrOut; // carrier complex square integrator
double dW1,dW2,dW5; // integrator constants
double *DatadspPhase; // differential decoded dspPhases
double *DatadspPhase2; // rather for debugging, not use otherwise
MT63decoder Decoder;
// MT63sync EnvSync; // envelope synchronizer (experimental)
} ;
#endif // MT63_BASE_H

Wyświetl plik

@ -80,6 +80,9 @@ configuration progdefaults = {
2, // int oliviasinteg
// DOMINOEX
2.0, // double DOMINOEX_BW;
// MT63
false, // bool mt63_8bit;
32, // int mt63_interleave;
//
0, // int Fontnbr
16, // int Fontsize

Wyświetl plik

@ -0,0 +1,166 @@
/*
* alias_1k.dat -- Anti-alias filter 1000 Hz bandwidth
*
* Copyright (C) 1999-2004 Pawel Jalocha, SP9VRC
*
* This file is part of MT63.
*
* MT63 is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* MT63 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with MT63; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
// Filter coefficiants made by ALIAS.C for the following parameters:
// FilterLen=64 SampleRate=8000.0 FreqLow=500.0 FreqUpp=1500.0
// PassBandLow=375.0 PassBandUpp=1625.0 StopBandLow=0.0 StopBandUpp=2000.0
// => PeakInStopBand=-90.99 dB
// Programmers's scale factor: 2.000000
// Programmers's comments: Anti-alias filter 1000 Hz bandwidth, decimation by 4
const int Alias_1k_Len=64;
double Alias_1k_I[Alias_1k_Len] = {
+0.00003605 , // 0
+0.00001835 , // 1
-0.00022227 , // 2
-0.00079785 , // 3
-0.00099442 , // 4
+0.00032296 , // 5
+0.00276603 , // 6
+0.00365685 , // 7
+0.00128973 , // 8
-0.00107943 , // 9
+0.00195568 , // 10
+0.00914871 , // 11
+0.01100689 , // 12
+0.00254789 , // 13
-0.00580382 , // 14
-0.00014844 , // 15
+0.01341757 , // 16
+0.01123057 , // 17
-0.01328109 , // 18
-0.03176715 , // 19
-0.01791993 , // 20
+0.00579429 , // 21
-0.00986091 , // 22
-0.06425601 , // 23
-0.08967807 , // 24
-0.04429128 , // 25
+0.00513920 , // 26
-0.04459511 , // 27
-0.16886923 , // 28
-0.19065374 , // 29
+0.01930718 , // 30
+0.34486939 , // 31
+0.50345887 , // 32
+0.34486939 , // 33
+0.01930718 , // 34
-0.19065374 , // 35
-0.16886923 , // 36
-0.04459511 , // 37
+0.00513920 , // 38
-0.04429128 , // 39
-0.08967807 , // 40
-0.06425601 , // 41
-0.00986091 , // 42
+0.00579429 , // 43
-0.01791993 , // 44
-0.03176715 , // 45
-0.01328109 , // 46
+0.01123057 , // 47
+0.01341757 , // 48
-0.00014844 , // 49
-0.00580382 , // 50
+0.00254789 , // 51
+0.01100689 , // 52
+0.00914871 , // 53
+0.00195568 , // 54
-0.00107943 , // 55
+0.00128973 , // 56
+0.00365685 , // 57
+0.00276603 , // 58
+0.00032296 , // 59
-0.00099442 , // 60
-0.00079785 , // 61
-0.00022227 , // 62
+0.00001835 // 63
} ;
double Alias_1k_Q[Alias_1k_Len] = {
-0.00000000 , // 0
-0.00009527 , // 1
-0.00023082 , // 2
+0.00005162 , // 3
+0.00123007 , // 4
+0.00255193 , // 5
+0.00207549 , // 6
-0.00064302 , // 7
-0.00244045 , // 8
+0.00005205 , // 9
+0.00410793 , // 10
+0.00211830 , // 11
-0.00729235 , // 12
-0.01359800 , // 13
-0.00757272 , // 14
+0.00172023 , // 15
-0.00460378 , // 16
-0.02559228 , // 17
-0.03408530 , // 18
-0.01416468 , // 19
+0.00731461 , // 20
-0.00712536 , // 21
-0.04328548 , // 22
-0.04099291 , // 23
+0.01821691 , // 24
+0.06428190 , // 25
+0.02790538 , // 26
-0.03602086 , // 27
+0.01583703 , // 28
+0.22015579 , // 29
+0.40003327 , // 30
+0.32856209 , // 31
-0.00000000 , // 32
-0.32856209 , // 33
-0.40003327 , // 34
-0.22015579 , // 35
-0.01583703 , // 36
+0.03602086 , // 37
-0.02790538 , // 38
-0.06428190 , // 39
-0.01821691 , // 40
+0.04099291 , // 41
+0.04328548 , // 42
+0.00712536 , // 43
-0.00731461 , // 44
+0.01416468 , // 45
+0.03408530 , // 46
+0.02559228 , // 47
+0.00460378 , // 48
-0.00172023 , // 49
+0.00757272 , // 50
+0.01359800 , // 51
+0.00729235 , // 52
-0.00211830 , // 53
-0.00410793 , // 54
-0.00005205 , // 55
+0.00244045 , // 56
+0.00064302 , // 57
-0.00207549 , // 58
-0.00255193 , // 59
-0.00123007 , // 60
-0.00005162 , // 61
+0.00023082 , // 62
+0.00009527 // 63
} ;

Wyświetl plik

@ -0,0 +1,166 @@
/*
* alias_2k.dat -- Anti-alias filter 2000 Hz bandwidth
*
* Copyright (C) 1999-2004 Pawel Jalocha, SP9VRC
*
* This file is part of MT63.
*
* MT63 is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* MT63 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with MT63; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
// Filter coefficiants made by ALIAS.C for the following parameters:
// FilterLen=64 SampleRate=8000.0 FreqLow=500.0 FreqUpp=2500.0
// PassBandLow=375.0 PassBandUpp=2625.0 StopBandLow=0.0 StopBandUpp=3000.0
// => PeakInStopBand=-89.35 dB
// Programmers's scale factor: 1.000000
// Programmers's comments: Anti-alias filter 2000 Hz bandwidth, decimation by 2
const int Alias_2k_Len=64;
double Alias_2k_I[Alias_2k_Len] = {
+0.00007244 , // 0
+0.00002831 , // 1
-0.00031179 , // 2
-0.00027704 , // 3
+0.00026218 , // 4
-0.00057780 , // 5
-0.00083336 , // 6
+0.00119188 , // 7
+0.00014945 , // 8
-0.00077327 , // 9
+0.00360739 , // 10
+0.00224833 , // 11
-0.00032116 , // 12
+0.00696821 , // 13
+0.00439713 , // 14
-0.00157675 , // 15
+0.00906983 , // 16
+0.00372045 , // 17
-0.00786599 , // 18
+0.00735339 , // 19
-0.00253048 , // 20
-0.02189728 , // 21
+0.00134354 , // 22
-0.01477966 , // 23
-0.04434362 , // 24
-0.00479913 , // 25
-0.03000591 , // 26
-0.07609801 , // 27
+0.00258946 , // 28
-0.04271980 , // 29
-0.14710769 , // 30
+0.14198817 , // 31
+0.42372962 , // 32
+0.14198817 , // 33
-0.14710769 , // 34
-0.04271980 , // 35
+0.00258946 , // 36
-0.07609801 , // 37
-0.03000591 , // 38
-0.00479913 , // 39
-0.04434362 , // 40
-0.01477966 , // 41
+0.00134354 , // 42
-0.02189728 , // 43
-0.00253048 , // 44
+0.00735339 , // 45
-0.00786599 , // 46
+0.00372045 , // 47
+0.00906983 , // 48
-0.00157675 , // 49
+0.00439713 , // 50
+0.00696821 , // 51
-0.00032116 , // 52
+0.00224833 , // 53
+0.00360739 , // 54
-0.00077327 , // 55
+0.00014945 , // 56
+0.00119188 , // 57
-0.00083336 , // 58
-0.00057780 , // 59
+0.00026218 , // 60
-0.00027704 , // 61
-0.00031179 , // 62
+0.00002831 // 63
} ;
double Alias_2k_Q[Alias_2k_Len] = {
-0.00000000 , // 0
-0.00015159 , // 1
-0.00014608 , // 2
+0.00036770 , // 3
+0.00010339 , // 4
-0.00031581 , // 5
+0.00128580 , // 6
+0.00120582 , // 7
-0.00051862 , // 8
+0.00225671 , // 9
+0.00226918 , // 10
-0.00216340 , // 11
+0.00181728 , // 12
+0.00176390 , // 13
-0.00692361 , // 14
-0.00105199 , // 15
-0.00081355 , // 16
-0.01498960 , // 17
-0.00512332 , // 18
-0.00331671 , // 19
-0.02395357 , // 20
-0.00602102 , // 21
-0.00049919 , // 22
-0.02943663 , // 23
+0.00351421 , // 24
+0.01576926 , // 25
-0.02737092 , // 26
+0.03572558 , // 27
+0.06272088 , // 28
-0.01659059 , // 29
+0.15254255 , // 30
+0.33394426 , // 31
-0.00000000 , // 32
-0.33394426 , // 33
-0.15254255 , // 34
+0.01659059 , // 35
-0.06272088 , // 36
-0.03572558 , // 37
+0.02737092 , // 38
-0.01576926 , // 39
-0.00351421 , // 40
+0.02943663 , // 41
+0.00049919 , // 42
+0.00602102 , // 43
+0.02395357 , // 44
+0.00331671 , // 45
+0.00512332 , // 46
+0.01498960 , // 47
+0.00081355 , // 48
+0.00105199 , // 49
+0.00692361 , // 50
-0.00176390 , // 51
-0.00181728 , // 52
+0.00216340 , // 53
-0.00226918 , // 54
-0.00225671 , // 55
+0.00051862 , // 56
-0.00120582 , // 57
-0.00128580 , // 58
+0.00031581 , // 59
-0.00010339 , // 60
-0.00036770 , // 61
+0.00014608 , // 62
+0.00015159 // 63
} ;

Wyświetl plik

@ -0,0 +1,294 @@
/*
* alias_k5.dat -- Anti-alias filter 500 Hz bandwidth
*
* Copyright (C) 1999-2004 Pawel Jalocha, SP9VRC
*
* This file is part of MT63.
*
* MT63 is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* MT63 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with MT63; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
// Filter coefficiants made by ALIAS.C for the following parameters:
// FilterLen=128 SampleRate=8000.0 FreqLow=500.0 FreqUpp=1000.0
// PassBandLow=437.5 PassBandUpp=1062.5 StopBandLow=250.0 StopBandUpp=1250.0
// => PeakInStopBand=-86.20 dB
// Programmers's scale factor: 4.000000
// Programmers's comments: Anti-alias filter 500 Hz bandwidth, decimation by 8
const int Alias_k5_Len=128;
double Alias_k5_I[Alias_k5_Len] = {
+0.00006549 , // 0
+0.00007616 , // 1
+0.00006321 , // 2
-0.00007051 , // 3
-0.00037947 , // 4
-0.00077842 , // 5
-0.00101934 , // 6
-0.00079747 , // 7
+0.00003634 , // 8
+0.00128166 , // 9
+0.00238256 , // 10
+0.00269672 , // 11
+0.00193090 , // 12
+0.00045168 , // 13
-0.00082397 , // 14
-0.00100872 , // 15
+0.00002675 , // 16
+0.00132515 , // 17
+0.00130571 , // 18
-0.00111559 , // 19
-0.00545495 , // 20
-0.00950601 , // 21
-0.01047729 , // 22
-0.00687776 , // 23
+0.00011406 , // 24
+0.00696202 , // 25
+0.00989474 , // 26
+0.00760013 , // 27
+0.00255231 , // 28
-0.00031461 , // 29
+0.00291281 , // 30
+0.01174794 , // 31
+0.02064676 , // 32
+0.02211535 , // 33
+0.01194783 , // 34
-0.00696440 , // 35
-0.02537662 , // 36
-0.03322892 , // 37
-0.02665276 , // 38
-0.01145836 , // 39
+0.00006418 , // 40
-0.00230763 , // 41
-0.01840573 , // 42
-0.03588720 , // 43
-0.03743444 , // 44
-0.01306806 , // 45
+0.03074821 , // 46
+0.07251687 , // 47
+0.08836159 , // 48
+0.06850261 , // 49
+0.02612053 , // 50
-0.00913110 , // 51
-0.01081820 , // 52
+0.02342696 , // 53
+0.06482083 , // 54
+0.06779523 , // 55
-0.00021458 , // 56
-0.13123843 , // 57
-0.27054300 , // 58
-0.33962227 , // 59
-0.27857291 , // 60
-0.08448838 , // 61
+0.17772565 , // 62
+0.40136534 , // 63
+0.48897105 , // 64
+0.40136534 , // 65
+0.17772565 , // 66
-0.08448838 , // 67
-0.27857291 , // 68
-0.33962227 , // 69
-0.27054300 , // 70
-0.13123843 , // 71
-0.00021458 , // 72
+0.06779523 , // 73
+0.06482083 , // 74
+0.02342696 , // 75
-0.01081820 , // 76
-0.00913110 , // 77
+0.02612053 , // 78
+0.06850261 , // 79
+0.08836159 , // 80
+0.07251687 , // 81
+0.03074821 , // 82
-0.01306806 , // 83
-0.03743444 , // 84
-0.03588720 , // 85
-0.01840573 , // 86
-0.00230763 , // 87
+0.00006418 , // 88
-0.01145836 , // 89
-0.02665276 , // 90
-0.03322892 , // 91
-0.02537662 , // 92
-0.00696440 , // 93
+0.01194783 , // 94
+0.02211535 , // 95
+0.02064676 , // 96
+0.01174794 , // 97
+0.00291281 , // 98
-0.00031461 , // 99
+0.00255231 , // 100
+0.00760013 , // 101
+0.00989474 , // 102
+0.00696202 , // 103
+0.00011406 , // 104
-0.00687776 , // 105
-0.01047729 , // 106
-0.00950601 , // 107
-0.00545495 , // 108
-0.00111559 , // 109
+0.00130571 , // 110
+0.00132515 , // 111
+0.00002675 , // 112
-0.00100872 , // 113
-0.00082397 , // 114
+0.00045168 , // 115
+0.00193090 , // 116
+0.00269672 , // 117
+0.00238256 , // 118
+0.00128166 , // 119
+0.00003634 , // 120
-0.00079747 , // 121
-0.00101934 , // 122
-0.00077842 , // 123
-0.00037947 , // 124
-0.00007051 , // 125
+0.00006321 , // 126
+0.00007616 // 127
} ;
double Alias_k5_Q[Alias_k5_Len] = {
-0.00000000 , // 0
-0.00005367 , // 1
-0.00016555 , // 2
-0.00031225 , // 3
-0.00036198 , // 4
-0.00013710 , // 5
+0.00044740 , // 6
+0.00124698 , // 7
+0.00186810 , // 8
+0.00184150 , // 9
+0.00093521 , // 10
-0.00058853 , // 11
-0.00200435 , // 12
-0.00252488 , // 13
-0.00187551 , // 14
-0.00063367 , // 15
+0.00001967 , // 16
-0.00088264 , // 17
-0.00319853 , // 18
-0.00540709 , // 19
-0.00536877 , // 20
-0.00180828 , // 21
+0.00444555 , // 22
+0.01048985 , // 23
+0.01293826 , // 24
+0.01021951 , // 25
+0.00399079 , // 26
-0.00159281 , // 27
-0.00262530 , // 28
+0.00149295 , // 29
+0.00697645 , // 30
+0.00777564 , // 31
-0.00010048 , // 32
-0.01493909 , // 33
-0.02926626 , // 34
-0.03410235 , // 35
-0.02512027 , // 36
-0.00643493 , // 37
+0.01119978 , // 38
+0.01734888 , // 39
+0.00962767 , // 40
-0.00347093 , // 41
-0.00757142 , // 42
+0.00724618 , // 43
+0.03765704 , // 44
+0.06671856 , // 45
+0.07363882 , // 46
+0.04816692 , // 47
-0.00023240 , // 48
-0.04602175 , // 49
-0.06349448 , // 50
-0.04533960 , // 51
-0.01075524 , // 52
+0.00463299 , // 53
-0.02695458 , // 54
-0.10175325 , // 55
-0.17821917 , // 56
-0.19595859 , // 57
-0.11176981 , // 58
+0.06782857 , // 59
+0.27891973 , // 60
+0.42579279 , // 61
+0.42868878 , // 62
+0.26809297 , // 63
-0.00000000 , // 64
-0.26809297 , // 65
-0.42868878 , // 66
-0.42579279 , // 67
-0.27891973 , // 68
-0.06782857 , // 69
+0.11176981 , // 70
+0.19595859 , // 71
+0.17821917 , // 72
+0.10175325 , // 73
+0.02695458 , // 74
-0.00463299 , // 75
+0.01075524 , // 76
+0.04533960 , // 77
+0.06349448 , // 78
+0.04602175 , // 79
+0.00023240 , // 80
-0.04816692 , // 81
-0.07363882 , // 82
-0.06671856 , // 83
-0.03765704 , // 84
-0.00724618 , // 85
+0.00757142 , // 86
+0.00347093 , // 87
-0.00962767 , // 88
-0.01734888 , // 89
-0.01119978 , // 90
+0.00643493 , // 91
+0.02512027 , // 92
+0.03410235 , // 93
+0.02926626 , // 94
+0.01493909 , // 95
+0.00010048 , // 96
-0.00777564 , // 97
-0.00697645 , // 98
-0.00149295 , // 99
+0.00262530 , // 100
+0.00159281 , // 101
-0.00399079 , // 102
-0.01021951 , // 103
-0.01293826 , // 104
-0.01048985 , // 105
-0.00444555 , // 106
+0.00180828 , // 107
+0.00536877 , // 108
+0.00540709 , // 109
+0.00319853 , // 110
+0.00088264 , // 111
-0.00001967 , // 112
+0.00063367 , // 113
+0.00187551 , // 114
+0.00252488 , // 115
+0.00200435 , // 116
+0.00058853 , // 117
-0.00093521 , // 118
-0.00184150 , // 119
-0.00186810 , // 120
-0.00124698 , // 121
-0.00044740 , // 122
+0.00013710 , // 123
+0.00036198 , // 124
+0.00031225 , // 125
+0.00016555 , // 126
+0.00005367 // 127
} ;

1674
src/mt63/dsp.cxx 100644

Plik diff jest za duży Load Diff

140
src/mt63/morse.dat 100644
Wyświetl plik

@ -0,0 +1,140 @@
// computer readable Morse code table
//
// For a given character you should pick up a 31-bit code from the table.
// Bits should be taken starting from the LSB.
// Bit equal 1 means carrier ON, bit 0 means carrier off
// Each code includes one quiet dot at the start and two at the end.
// The code should be read until the last '1',
// but this last '1' must not be transmitted
//
const int MorseTableSize=128;
long MorseTable[MorseTableSize] = {
0x00000004L , // 0x00
0x00000004L , // 0x01
0x00000004L , // 0x02
0x00000004L , // 0x03
0x00000004L , // 0x04
0x00000004L , // 0x05
0x00000004L , // 0x06
0x00000004L , // 0x07
0x00000004L , // 0x08
0x00000004L , // 0x09
0x00000004L , // 0x0A
0x00000004L , // 0x0B
0x00000004L , // 0x0C
0x00000004L , // 0x0D
0x00000004L , // 0x0E
0x00000004L , // 0x0F
0x00000004L , // 0x10
0x00000004L , // 0x11
0x00000004L , // 0x12
0x00000004L , // 0x13
0x00000004L , // 0x14
0x00000004L , // 0x15
0x00000004L , // 0x16
0x00000004L , // 0x17
0x00000004L , // 0x18
0x00000004L , // 0x19
0x00000004L , // 0x1A
0x00000004L , // 0x1B
0x00000004L , // 0x1C
0x00000004L , // 0x1D
0x00000004L , // 0x1E
0x00000004L , // 0x1F
0x00000004L , // 0x20 = ' '
0x00000004L , // 0x21 = '!'
0x00000004L , // 0x22 = '"'
0x00000004L , // 0x23 = '#'
0x0013ABAAL , // 0x24 = '$'
0x00000004L , // 0x25 = '%'
0x00000004L , // 0x26 = '&'
0x004BBBBAL , // 0x27 = '''
0x0004BBAEL , // 0x28 = '('
0x004EBBAEL , // 0x29 = ')'
0x0004BABAL , // 0x2A = '*'
0x00012EBAL , // 0x2B = '+'
0x004EEAEEL , // 0x2C = ','
0x0004EAAEL , // 0x2D = '-'
0x0013AEBAL , // 0x2E = '.'
0x00012EAEL , // 0x2F = '/'
0x004EEEEEL , // 0x30 = '0'
0x0013BBBAL , // 0x31 = '1'
0x0004EEEAL , // 0x32 = '2'
0x00013BAAL , // 0x33 = '3'
0x00004EAAL , // 0x34 = '4'
0x000012AAL , // 0x35 = '5'
0x00004AAEL , // 0x36 = '6'
0x00012AEEL , // 0x37 = '7'
0x0004AEEEL , // 0x38 = '8'
0x0012EEEEL , // 0x39 = '9'
0x0012AEEEL , // 0x3A = ':'
0x0012EBAEL , // 0x3B = ';'
0x00000004L , // 0x3C = '<'
0x00013AAEL , // 0x3D = '='
0x00000004L , // 0x3E = '>'
0x0004AEEAL , // 0x3F = '?'
0x00000004L , // 0x40 = '@'
0x0000013AL , // 0x41 = 'A'
0x000012AEL , // 0x42 = 'B'
0x00004BAEL , // 0x43 = 'C'
0x000004AEL , // 0x44 = 'D'
0x00000012L , // 0x45 = 'E'
0x000012EAL , // 0x46 = 'F'
0x000012EEL , // 0x47 = 'G'
0x000004AAL , // 0x48 = 'H'
0x0000004AL , // 0x49 = 'I'
0x00013BBAL , // 0x4A = 'J'
0x000013AEL , // 0x4B = 'K'
0x000012BAL , // 0x4C = 'L'
0x000004EEL , // 0x4D = 'M'
0x0000012EL , // 0x4E = 'N'
0x00004EEEL , // 0x4F = 'O'
0x00004BBAL , // 0x50 = 'P'
0x00013AEEL , // 0x51 = 'Q'
0x000004BAL , // 0x52 = 'R'
0x0000012AL , // 0x53 = 'S'
0x0000004EL , // 0x54 = 'T'
0x000004EAL , // 0x55 = 'U'
0x000013AAL , // 0x56 = 'V'
0x000013BAL , // 0x57 = 'W'
0x00004EAEL , // 0x58 = 'X'
0x00013BAEL , // 0x59 = 'Y'
0x00004AEEL , // 0x5A = 'Z'
0x00000004L , // 0x5B = '['
0x00000004L , // 0x5C = '\'
0x00000004L , // 0x5D = ']'
0x00000004L , // 0x5E = '^'
0x0013AEEAL , // 0x5F = '_'
0x00000004L , // 0x60 = '`'
0x0000013AL , // 0x61 = 'a'
0x000012AEL , // 0x62 = 'b'
0x00004BAEL , // 0x63 = 'c'
0x000004AEL , // 0x64 = 'd'
0x00000012L , // 0x65 = 'e'
0x000012EAL , // 0x66 = 'f'
0x000012EEL , // 0x67 = 'g'
0x000004AAL , // 0x68 = 'h'
0x0000004AL , // 0x69 = 'i'
0x00013BBAL , // 0x6A = 'j'
0x000013AEL , // 0x6B = 'k'
0x000012BAL , // 0x6C = 'l'
0x000004EEL , // 0x6D = 'm'
0x0000012EL , // 0x6E = 'n'
0x00004EEEL , // 0x6F = 'o'
0x00004BBAL , // 0x70 = 'p'
0x00013AEEL , // 0x71 = 'q'
0x000004BAL , // 0x72 = 'r'
0x0000012AL , // 0x73 = 's'
0x0000004EL , // 0x74 = 't'
0x000004EAL , // 0x75 = 'u'
0x000013AAL , // 0x76 = 'v'
0x000013BAL , // 0x77 = 'w'
0x00004EAEL , // 0x78 = 'x'
0x00013BAEL , // 0x79 = 'y'
0x00004AEEL , // 0x7A = 'z'
0x00000004L , // 0x7B = '{'
0x00000004L , // 0x7C = '|'
0x00000004L , // 0x7D = '}'
0x00000004L , // 0x7E = '~'
0x00000004L // 0x7F = ''
} ;

241
src/mt63/mt63.cxx 100644
Wyświetl plik

@ -0,0 +1,241 @@
//=============================================================================
//
// mt63.cxx -- MT63 modem for fldigi
//
// Copyright (C) 2007, 2008
// Dave Freese, W1HKJ
//
// This file is part of fldigi
//
// fldigi is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// fldigi is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with gMFSK; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
//=============================================================================
#include <config.h>
#include <string>
#include <FL/Fl.H>
#include <FL/fl_ask.H>
#include "mt63.h"
using namespace std;
static int IntegLen = 32; // integration period for sync./data tracking
void mt63::tx_init(SoundBase *sb)
{
scard = sb;
// int err;
// err = Tx->Preset((int)bandwidth, Interleave);
// if (err)
// fprintf(stderr, "mt63_txinit: init failed\n");
set_freq(500.0 + bandwidth / 2.0);
flush = Tx->DataInterleave;
}
void mt63::rx_init()
{
// int err;
// err = Rx->Preset((int)bandwidth, Interleave, IntegLen);
// if (err)
// fprintf(stderr, "mt63_rxinit: init failed\n");
set_freq(500.0 + bandwidth / 2.0);
InpLevel->Preset(64.0, 0.75);
escape = 0;
}
int mt63::tx_process()
{
int c;
c = get_tx_char();
if (c == 0x03) {
stopflag = true;
flush = Tx->DataInterleave;
c = 0;
}
if (stopflag && flush-- == 0)
return -1;
if ((progdefaults.mt63_8bit && c > 255) || (!progdefaults.mt63_8bit && c > 127))
c = '.';
put_echo_char(c);
if (c > 127) {
c &= 127;
Tx->SendChar(127);
ModulateXmtr((Tx->Comb.Output.Data), Tx->Comb.Output.Len);
}
Tx->SendChar(c);
ModulateXmtr((Tx->Comb.Output.Data), Tx->Comb.Output.Len);
return 0;
}
int mt63::rx_process(const double *buf, int len)
{
double snr;
unsigned int c;
int i;
if (Interleave != progdefaults.mt63_interleave) {
Interleave = progdefaults.mt63_interleave;
restart();
}
if (InpBuff->EnsureSpace(len) == -1) {
fprintf(stderr, "mt63_rxprocess: buffer error\n");
return -1;
}
for (i = 0; i < len; i++)
InpBuff->Data[i] = buf[i];
InpBuff->Len = len;
InpLevel->Process(InpBuff);
Rx->Process(InpBuff);
snr = Rx->FEC_SNR();
if (snr > 99.9)
snr = 99.9;
display_metric(snr);
if (squelchon && snr < squelch)
return 0;
for (i = 0; i < Rx->Output.Len; i++) {
c = Rx->Output.Data[i];
if (!progdefaults.mt63_8bit) {
put_rx_char(c);
continue;
}
if ((c < 8) && (escape == 0))
continue;
if (c == 127) {
escape = 1;
continue;
}
if (escape) {
c += 128;
escape = 0;
}
put_rx_char(c);
}
return 0;
}
void mt63::restart()
{
int err;
put_MODEstatus(mode);
digiscope->mode(Digiscope::BLANK);
set_freq(500.0 + bandwidth / 2.0);
err = Tx->Preset((int)bandwidth, Interleave);
if (err)
fprintf(stderr, "mt63_txinit: init failed\n");
// flush = Tx->DataInterleave;
err = Rx->Preset((int)bandwidth, Interleave, IntegLen);
if (err)
fprintf(stderr, "mt63_rxinit: init failed\n");
InpLevel->Preset(64.0, 0.75);
}
void mt63::init()
{
modem::init();
restart();
}
mt63::mt63 (trx_mode mt63_mode) : modem()
{
mode = mt63_mode;
switch (mode) {
case MODE_MT63_500:
bandwidth = 500;
break;
case MODE_MT63_1000:
bandwidth = 1000;
break;
case MODE_MT63_2000:
bandwidth = 2000;
break;
}
Interleave = progdefaults.mt63_interleave;
Tx = new MT63tx;
Rx = new MT63rx;
InpLevel = new dspLevelMonitor;
InpBuff = new double_buff;
samplerate = 8000;
fragmentsize = 1024;
init();
}
mt63::~mt63()
{
if (Tx) delete Tx;
if (Rx) delete Rx;
if (InpLevel) delete InpLevel;
if (InpBuff) delete InpBuff;
}
/*
static int mt63_txprocess(struct trx *trx)
{
struct mt63 *s = (struct mt63 *) trx->modem;
int c;
c = trx_get_tx_char();
if (c == -1) {
if (trx->stopflag && s->flush-- == 0)
return -1;
c = 0;
} else
s->flush = s->Tx->DataInterleave;
if ((trx->mt63_esc && c > 255) || (!trx->mt63_esc && c > 127))
c = '.';
trx_put_echo_char(c);
if (c > 127) {
c &= 127;
s->Tx->SendChar(127);
sound_write(s->Tx->Comb.Output.Data, s->Tx->Comb.Output.Len);
}
s->Tx->SendChar(c);
sound_write(s->Tx->Comb.Output.Data, s->Tx->Comb.Output.Len);
return 0;
}
*/

1224
src/mt63/mt63base.cxx 100644

Plik diff jest za duży Load Diff

Wyświetl plik

@ -0,0 +1,51 @@
/*
* mt63intl.dat -- interleave patterns
*
* Copyright (C) 1999-2004 Pawel Jalocha, SP9VRC
*
* This file is part of MT63.
*
* MT63 is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* MT63 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with MT63; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
// interleave pattern for the original MT63ASC (short interleave)
int ShortIntlvPatt[64] = {
4,5,6,7,
4,5,6,7,
4,5,6,7,
4,5,6,7,
4,5,6,7,
4,5,6,7,
4,5,6,7,
4,5,6,7,
4,5,6,7,
4,5,6,7,
4,5,6,7,
4,5,6,7,
4,5,6,7,
4,5,6,7,
4,5,6,7,
4,5,6,7 } ;
// interleave pattern for doubled interleave
int LongIntlvPatt[64] = {
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,
17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,
33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,
49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,0
} ;

545
src/mt63/symbol.dat 100644
Wyświetl plik

@ -0,0 +1,545 @@
/*
* symbol.dat -- Symbol shape for the MT63 modem, taken directly
* from the MT63ASC code for the EVM56K.
*
* Copyright (C) 1999-2004 Pawel Jalocha, SP9VRC
*
* This file is part of MT63.
*
* MT63 is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* MT63 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with MT63; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
const int SymbolLen=512; // the shape's length
const int SymbolSepar=200; // the distance in samples between symbols on a carrier
const int DataCarrSepar=4; // carriers must be spaced by 4 FFT bins
// (complex FFT length equals to SymbolLen)
double SymbolShape[SymbolLen] = {
-0.00000000 , // 0
+0.00000665 , // 1
+0.00002657 , // 2
+0.00005975 , // 3
+0.00010613 , // 4
+0.00016562 , // 5
+0.00023810 , // 6
+0.00032341 , // 7
+0.00042134 , // 8
+0.00053162 , // 9
+0.00065389 , // 10
+0.00078773 , // 11
+0.00093261 , // 12
+0.00108789 , // 13
+0.00125283 , // 14
+0.00142653 , // 15
+0.00160798 , // 16
+0.00179599 , // 17
+0.00198926 , // 18
+0.00218628 , // 19
+0.00238542 , // 20
+0.00258487 , // 21
+0.00278264 , // 22
+0.00297662 , // 23
+0.00316452 , // 24
+0.00334394 , // 25
+0.00351232 , // 26
+0.00366701 , // 27
+0.00380526 , // 28
+0.00392424 , // 29
+0.00402109 , // 30
+0.00409288 , // 31
+0.00413671 , // 32
+0.00414969 , // 33
+0.00412898 , // 34
+0.00407182 , // 35
+0.00397555 , // 36
+0.00383764 , // 37
+0.00365574 , // 38
+0.00342767 , // 39
+0.00315145 , // 40
+0.00282534 , // 41
+0.00244787 , // 42
+0.00201781 , // 43
+0.00153424 , // 44
+0.00099653 , // 45
+0.00040435 , // 46
-0.00024231 , // 47
-0.00094314 , // 48
-0.00169753 , // 49
-0.00250453 , // 50
-0.00336293 , // 51
-0.00427118 , // 52
-0.00522749 , // 53
-0.00622977 , // 54
-0.00727569 , // 55
-0.00836272 , // 56
-0.00948809 , // 57
-0.01064886 , // 58
-0.01184193 , // 59
-0.01306405 , // 60
-0.01431189 , // 61
-0.01558198 , // 62
-0.01687083 , // 63
-0.01817486 , // 64
-0.01949051 , // 65
-0.02081416 , // 66
-0.02214223 , // 67
-0.02347113 , // 68
-0.02479733 , // 69
-0.02611728 , // 70
-0.02742752 , // 71
-0.02872457 , // 72
-0.03000504 , // 73
-0.03126551 , // 74
-0.03250262 , // 75
-0.03371298 , // 76
-0.03489320 , // 77
-0.03603988 , // 78
-0.03714954 , // 79
-0.03821868 , // 80
-0.03924367 , // 81
-0.04022079 , // 82
-0.04114620 , // 83
-0.04201589 , // 84
-0.04282570 , // 85
-0.04357126 , // 86
-0.04424801 , // 87
-0.04485118 , // 88
-0.04537575 , // 89
-0.04581648 , // 90
-0.04616787 , // 91
-0.04642421 , // 92
-0.04657955 , // 93
-0.04662769 , // 94
-0.04656225 , // 95
-0.04637665 , // 96
-0.04606414 , // 97
-0.04561786 , // 98
-0.04503082 , // 99
-0.04429599 , // 100
-0.04340631 , // 101
-0.04235475 , // 102
-0.04113436 , // 103
-0.03973834 , // 104
-0.03816006 , // 105
-0.03639316 , // 106
-0.03443155 , // 107
-0.03226956 , // 108
-0.02990192 , // 109
-0.02732385 , // 110
-0.02453112 , // 111
-0.02152012 , // 112
-0.01828789 , // 113
-0.01483216 , // 114
-0.01115146 , // 115
-0.00724508 , // 116
-0.00311317 , // 117
+0.00124328 , // 118
+0.00582236 , // 119
+0.01062127 , // 120
+0.01563627 , // 121
+0.02086273 , // 122
+0.02629504 , // 123
+0.03192674 , // 124
+0.03775043 , // 125
+0.04375787 , // 126
+0.04993995 , // 127
+0.05628681 , // 128
+0.06278780 , // 129
+0.06943159 , // 130
+0.07620621 , // 131
+0.08309914 , // 132
+0.09009732 , // 133
+0.09718730 , // 134
+0.10435526 , // 135
+0.11158715 , // 136
+0.11886870 , // 137
+0.12618560 , // 138
+0.13352351 , // 139
+0.14086819 , // 140
+0.14820561 , // 141
+0.15552198 , // 142
+0.16280389 , // 143
+0.17003841 , // 144
+0.17721311 , // 145
+0.18431620 , // 146
+0.19133661 , // 147
+0.19826401 , // 148
+0.20508896 , // 149
+0.21180289 , // 150
+0.21839823 , // 151
+0.22486845 , // 152
+0.23120806 , // 153
+0.23741270 , // 154
+0.24347919 , // 155
+0.24940549 , // 156
+0.25519079 , // 157
+0.26083547 , // 158
+0.26634116 , // 159
+0.27171067 , // 160
+0.27694807 , // 161
+0.28205857 , // 162
+0.28704860 , // 163
+0.29192571 , // 164
+0.29669855 , // 165
+0.30137684 , // 166
+0.30597130 , // 167
+0.31049362 , // 168
+0.31495636 , // 169
+0.31937292 , // 170
+0.32375741 , // 171
+0.32812465 , // 172
+0.33249001 , // 173
+0.33686936 , // 174
+0.34127898 , // 175
+0.34573545 , // 176
+0.35025554 , // 177
+0.35485613 , // 178
+0.35955412 , // 179
+0.36436627 , // 180
+0.36930915 , // 181
+0.37439902 , // 182
+0.37965170 , // 183
+0.38508250 , // 184
+0.39070609 , // 185
+0.39653642 , // 186
+0.40258662 , // 187
+0.40886890 , // 188
+0.41539446 , // 189
+0.42217341 , // 190
+0.42921470 , // 191
+0.43652603 , // 192
+0.44411383 , // 193
+0.45198311 , // 194
+0.46013753 , // 195
+0.46857925 , // 196
+0.47730896 , // 197
+0.48632585 , // 198
+0.49562756 , // 199
+0.50521021 , // 200
+0.51506840 , // 201
+0.52519520 , // 202
+0.53558220 , // 203
+0.54621950 , // 204
+0.55709582 , // 205
+0.56819849 , // 206
+0.57951351 , // 207
+0.59102568 , // 208
+0.60271860 , // 209
+0.61457478 , // 210
+0.62657574 , // 211
+0.63870210 , // 212
+0.65093366 , // 213
+0.66324951 , // 214
+0.67562817 , // 215
+0.68804763 , // 216
+0.70048553 , // 217
+0.71291922 , // 218
+0.72532590 , // 219
+0.73768272 , // 220
+0.74996688 , // 221
+0.76215572 , // 222
+0.77422687 , // 223
+0.78615828 , // 224
+0.79792836 , // 225
+0.80951602 , // 226
+0.82090079 , // 227
+0.83206287 , // 228
+0.84298315 , // 229
+0.85364335 , // 230
+0.86402598 , // 231
+0.87411443 , // 232
+0.88389296 , // 233
+0.89334677 , // 234
+0.90246195 , // 235
+0.91122553 , // 236
+0.91962547 , // 237
+0.92765062 , // 238
+0.93529073 , // 239
+0.94253642 , // 240
+0.94937916 , // 241
+0.95581122 , // 242
+0.96182562 , // 243
+0.96741616 , // 244
+0.97257728 , // 245
+0.97730410 , // 246
+0.98159233 , // 247
+0.98543825 , // 248
+0.98883864 , // 249
+0.99179079 , // 250
+0.99429241 , // 251
+0.99634163 , // 252
+0.99793696 , // 253
+0.99907728 , // 254
+0.99976178 , // 255
+0.99999000 , // 256
+0.99976178 , // 257
+0.99907728 , // 258
+0.99793696 , // 259
+0.99634163 , // 260
+0.99429241 , // 261
+0.99179079 , // 262
+0.98883864 , // 263
+0.98543825 , // 264
+0.98159233 , // 265
+0.97730410 , // 266
+0.97257728 , // 267
+0.96741616 , // 268
+0.96182562 , // 269
+0.95581122 , // 270
+0.94937916 , // 271
+0.94253642 , // 272
+0.93529073 , // 273
+0.92765062 , // 274
+0.91962547 , // 275
+0.91122553 , // 276
+0.90246195 , // 277
+0.89334677 , // 278
+0.88389296 , // 279
+0.87411443 , // 280
+0.86402598 , // 281
+0.85364335 , // 282
+0.84298315 , // 283
+0.83206287 , // 284
+0.82090079 , // 285
+0.80951602 , // 286
+0.79792836 , // 287
+0.78615828 , // 288
+0.77422687 , // 289
+0.76215572 , // 290
+0.74996688 , // 291
+0.73768272 , // 292
+0.72532590 , // 293
+0.71291922 , // 294
+0.70048553 , // 295
+0.68804763 , // 296
+0.67562817 , // 297
+0.66324951 , // 298
+0.65093366 , // 299
+0.63870210 , // 300
+0.62657574 , // 301
+0.61457478 , // 302
+0.60271860 , // 303
+0.59102568 , // 304
+0.57951351 , // 305
+0.56819849 , // 306
+0.55709582 , // 307
+0.54621950 , // 308
+0.53558220 , // 309
+0.52519520 , // 310
+0.51506840 , // 311
+0.50521021 , // 312
+0.49562756 , // 313
+0.48632585 , // 314
+0.47730896 , // 315
+0.46857925 , // 316
+0.46013753 , // 317
+0.45198311 , // 318
+0.44411383 , // 319
+0.43652603 , // 320
+0.42921470 , // 321
+0.42217341 , // 322
+0.41539446 , // 323
+0.40886890 , // 324
+0.40258662 , // 325
+0.39653642 , // 326
+0.39070609 , // 327
+0.38508250 , // 328
+0.37965170 , // 329
+0.37439902 , // 330
+0.36930915 , // 331
+0.36436627 , // 332
+0.35955412 , // 333
+0.35485613 , // 334
+0.35025554 , // 335
+0.34573545 , // 336
+0.34127898 , // 337
+0.33686936 , // 338
+0.33249001 , // 339
+0.32812465 , // 340
+0.32375741 , // 341
+0.31937292 , // 342
+0.31495636 , // 343
+0.31049362 , // 344
+0.30597130 , // 345
+0.30137684 , // 346
+0.29669855 , // 347
+0.29192571 , // 348
+0.28704860 , // 349
+0.28205857 , // 350
+0.27694807 , // 351
+0.27171067 , // 352
+0.26634116 , // 353
+0.26083547 , // 354
+0.25519079 , // 355
+0.24940549 , // 356
+0.24347919 , // 357
+0.23741270 , // 358
+0.23120806 , // 359
+0.22486845 , // 360
+0.21839823 , // 361
+0.21180289 , // 362
+0.20508896 , // 363
+0.19826401 , // 364
+0.19133661 , // 365
+0.18431620 , // 366
+0.17721311 , // 367
+0.17003841 , // 368
+0.16280389 , // 369
+0.15552198 , // 370
+0.14820561 , // 371
+0.14086819 , // 372
+0.13352351 , // 373
+0.12618560 , // 374
+0.11886870 , // 375
+0.11158715 , // 376
+0.10435526 , // 377
+0.09718730 , // 378
+0.09009732 , // 379
+0.08309914 , // 380
+0.07620621 , // 381
+0.06943159 , // 382
+0.06278780 , // 383
+0.05628681 , // 384
+0.04993995 , // 385
+0.04375787 , // 386
+0.03775043 , // 387
+0.03192674 , // 388
+0.02629504 , // 389
+0.02086273 , // 390
+0.01563627 , // 391
+0.01062127 , // 392
+0.00582236 , // 393
+0.00124328 , // 394
-0.00311317 , // 395
-0.00724508 , // 396
-0.01115146 , // 397
-0.01483216 , // 398
-0.01828789 , // 399
-0.02152012 , // 400
-0.02453112 , // 401
-0.02732385 , // 402
-0.02990192 , // 403
-0.03226956 , // 404
-0.03443155 , // 405
-0.03639316 , // 406
-0.03816006 , // 407
-0.03973834 , // 408
-0.04113436 , // 409
-0.04235475 , // 410
-0.04340631 , // 411
-0.04429599 , // 412
-0.04503082 , // 413
-0.04561786 , // 414
-0.04606414 , // 415
-0.04637665 , // 416
-0.04656225 , // 417
-0.04662769 , // 418
-0.04657955 , // 419
-0.04642421 , // 420
-0.04616787 , // 421
-0.04581648 , // 422
-0.04537575 , // 423
-0.04485118 , // 424
-0.04424801 , // 425
-0.04357126 , // 426
-0.04282570 , // 427
-0.04201589 , // 428
-0.04114620 , // 429
-0.04022079 , // 430
-0.03924367 , // 431
-0.03821868 , // 432
-0.03714954 , // 433
-0.03603988 , // 434
-0.03489320 , // 435
-0.03371298 , // 436
-0.03250262 , // 437
-0.03126551 , // 438
-0.03000504 , // 439
-0.02872457 , // 440
-0.02742752 , // 441
-0.02611728 , // 442
-0.02479733 , // 443
-0.02347113 , // 444
-0.02214223 , // 445
-0.02081416 , // 446
-0.01949051 , // 447
-0.01817486 , // 448
-0.01687083 , // 449
-0.01558198 , // 450
-0.01431189 , // 451
-0.01306405 , // 452
-0.01184193 , // 453
-0.01064886 , // 454
-0.00948809 , // 455
-0.00836272 , // 456
-0.00727569 , // 457
-0.00622977 , // 458
-0.00522749 , // 459
-0.00427118 , // 460
-0.00336293 , // 461
-0.00250453 , // 462
-0.00169753 , // 463
-0.00094314 , // 464
-0.00024231 , // 465
+0.00040435 , // 466
+0.00099653 , // 467
+0.00153424 , // 468
+0.00201781 , // 469
+0.00244787 , // 470
+0.00282534 , // 471
+0.00315145 , // 472
+0.00342767 , // 473
+0.00365574 , // 474
+0.00383764 , // 475
+0.00397555 , // 476
+0.00407182 , // 477
+0.00412898 , // 478
+0.00414969 , // 479
+0.00413671 , // 480
+0.00409288 , // 481
+0.00402109 , // 482
+0.00392424 , // 483
+0.00380526 , // 484
+0.00366701 , // 485
+0.00351232 , // 486
+0.00334394 , // 487
+0.00316452 , // 488
+0.00297662 , // 489
+0.00278264 , // 490
+0.00258487 , // 491
+0.00238542 , // 492
+0.00218628 , // 493
+0.00198926 , // 494
+0.00179599 , // 495
+0.00160798 , // 496
+0.00142653 , // 497
+0.00125283 , // 498
+0.00108789 , // 499
+0.00093261 , // 500
+0.00078773 , // 501
+0.00065389 , // 502
+0.00053162 , // 503
+0.00042134 , // 504
+0.00032341 , // 505
+0.00023810 , // 506
+0.00016562 , // 507
+0.00010613 , // 508
+0.00005975 , // 509
+0.00002657 , // 510
+0.00000665 // 511
} ;

Wyświetl plik

@ -14,6 +14,9 @@
modem *cw_modem = 0;
modem *mfsk8_modem = 0;
modem *mfsk16_modem = 0;
modem *mt63_500_modem = 0;
modem *mt63_1000_modem = 0;
modem *mt63_2000_modem = 0;
modem *feld_modem = 0;
modem *feld_slowmodem = 0;
modem *feld_x5modem = 0;