FT4 now transmits a waveform generated from Gaussian-filtered frequency changes.

This commit is contained in:
Joe Taylor 2019-02-21 12:10:27 -05:00
parent 57a20f838f
commit aeddaeab9e
2 changed files with 20 additions and 5 deletions

View File

@ -51,6 +51,9 @@ void Modulator::start (unsigned symbolsLength, double framesPerSymbol,
// Time according to this computer which becomes our base time
qint64 ms0 = QDateTime::currentMSecsSinceEpoch() % 86400000;
// qDebug() << "ModStart" << symbolsLength << framesPerSymbol
// << frequency << toneSpacing;
if(m_state != Idle) stop ();
m_quickClose = false;
@ -90,7 +93,7 @@ void Modulator::start (unsigned symbolsLength, double framesPerSymbol,
m_silentFrames = m_ic + m_frameRate / (1000 / delay_ms) - (mstr * (m_frameRate / 1000));
}
if((symbolsLength==103 or symbolsLength==105) and framesPerSymbol==512
and toneSpacing==12000.0/512.0) {
and (toneSpacing==12000.0/512.0 or toneSpacing==-2.0)) {
//### FT4 parameters
delay_ms=100;
mstr=5000;
@ -300,8 +303,9 @@ qint64 Modulator::readData (char * data, qint64 maxSize)
//Here's where we transmit from a precomputed wave[] array:
if(m_toneSpacing < 0) sample=qRound(m_amp*foxcom_.wave[m_ic]);
// if(m_ic < 100) qDebug() << "Mod C" << m_ic << m_amp << foxcom_.wave[m_ic] << sample;
// if(m_ic < 10) qDebug() << "Mod Tx" << m_ic << m_amp
// << foxcom_.wave[m_ic] << sample
// << m_toneSpacing;
samples = load(postProcessSample(sample), samples);
++framesGenerated;

View File

@ -102,6 +102,9 @@ extern "C" {
void genft4_(char* msg, int* ichk, char* msgsent, int itone[],
fortran_charlen_t, fortran_charlen_t);
void gen_ft4wave_(int itone[], int* nsym, int* nsps, float* fsample, float* f0,
float wave[], int* nwave);
void gen4_(char* msg, int* ichk, char* msgsent, int itone[],
int* itext, fortran_charlen_t, fortran_charlen_t);
@ -6869,8 +6872,8 @@ void MainWindow::transmit (double snr)
}
if (m_modeTx == "FT4") {
toneSpacing=12000.0/512.0;
// if(SpecOp::FOX==m_config.special_op_id() and !m_tune) toneSpacing=-1;
// toneSpacing=12000.0/512.0; //Generate Tx waveform from itone[] array
toneSpacing=-2.0; //Transmit a pre-computed, filtered waveform.
Q_EMIT sendMessage (NUM_FT4_SYMBOLS,
512.0, ui->TxFreqSpinBox->value() - m_XIT,
toneSpacing, m_soundOutput, m_config.audio_output_channel (),
@ -8757,6 +8760,14 @@ void MainWindow::ft4_tx(int ntx)
g_iptt = 1;
setRig ();
setXIT (ui->TxFreqSpinBox->value ());
int nsym=103;
int nsps=4*512;
float fsample=48000.0;
float f0=ui->TxFreqSpinBox->value() - m_XIT;
int nwave=(nsym+2)*nsps;
gen_ft4wave_(const_cast<int *>(itone),&nsym,&nsps,&fsample,&f0,foxcom_.wave,&nwave);
Q_EMIT m_config.transceiver_ptt (true); //Assert the PTT
m_tx_when_ready = true;
qint64 ms=QDateTime::currentMSecsSinceEpoch();