kopia lustrzana https://github.com/jamescoxon/dl-fldigi
Olivia pulse shape changes
Transmit noise floor < 55 dB; changed to 85 dBpull/2/head
rodzic
4181ca882e
commit
77d0b4ecec
|
@ -413,13 +413,21 @@ public:
|
||||||
|
|
||||||
// the symbol shape described in frequency domain
|
// the symbol shape described in frequency domain
|
||||||
static const double MFSK_SymbolFreqShape[] =
|
static const double MFSK_SymbolFreqShape[] =
|
||||||
// { 1.0, 1.0 } ;
|
{ 1.0, 1.0 } ; // use raised cosine shape - experimental
|
||||||
{ +1.0000000000,
|
// from gMFSK
|
||||||
+1.1913785723,
|
// { +1.0000000000,
|
||||||
-0.0793018558,
|
// +1.1913785723,
|
||||||
-0.2171442026,
|
// -0.0793018558,
|
||||||
-0.0014526076
|
// -0.2171442026,
|
||||||
};
|
// -0.0014526076
|
||||||
|
//};
|
||||||
|
// from DM780
|
||||||
|
//{
|
||||||
|
// +1.0000000000,
|
||||||
|
// +2.1373197349,
|
||||||
|
// +1.1207588117,
|
||||||
|
// -0.0165609232
|
||||||
|
//};
|
||||||
|
|
||||||
static const size_t MFSK_SymbolFreqShapeLen =
|
static const size_t MFSK_SymbolFreqShapeLen =
|
||||||
sizeof(MFSK_SymbolFreqShape) / sizeof(double);
|
sizeof(MFSK_SymbolFreqShape) / sizeof(double);
|
||||||
|
@ -595,8 +603,12 @@ private:
|
||||||
void AddSymbol(int Freq, int Phase) {
|
void AddSymbol(int Freq, int Phase) {
|
||||||
size_t Time;
|
size_t Time;
|
||||||
for (Time = 0; Time < SymbolLen; Time++) {
|
for (Time = 0; Time < SymbolLen; Time++) {
|
||||||
// Type Shape=1.0-CosineTable[Time];
|
// experimental use with {1.0, 1.0};
|
||||||
OutTap[TapPtr] += CosineTable[Phase] * SymbolShape[Time];
|
Type Shape=1.0-CosineTable[Time];
|
||||||
|
OutTap[TapPtr] += CosineTable[Phase] * Shape;
|
||||||
|
|
||||||
|
// OutTap[TapPtr] += CosineTable[Phase] * SymbolShape[Time];
|
||||||
|
|
||||||
Phase += Freq;
|
Phase += Freq;
|
||||||
Phase &= WrapMask;
|
Phase &= WrapMask;
|
||||||
TapPtr += 1;
|
TapPtr += 1;
|
||||||
|
|
|
@ -86,8 +86,13 @@ void olivia::tx_init(SoundBase *sc)
|
||||||
void olivia::send_preamble()
|
void olivia::send_preamble()
|
||||||
{
|
{
|
||||||
double freqa, freqb;
|
double freqa, freqb;
|
||||||
int i, sr4 = samplerate / 4;
|
int i, j, sr4 = samplerate / 4;
|
||||||
|
double ampshape[sr4];
|
||||||
|
|
||||||
|
for (int i = 0; i < sr4; i++) ampshape[i] = 1.0;
|
||||||
|
for (int i = 0; i < sr4 / 4; i++)
|
||||||
|
ampshape[i] = ampshape[sr4 - 1 - i] = 0.5 * (1.0 - cos(M_PI * i / (sr4/4)));
|
||||||
|
|
||||||
if (reverse) {
|
if (reverse) {
|
||||||
freqa = txbasefreq + (bandwidth / 2.0);
|
freqa = txbasefreq + (bandwidth / 2.0);
|
||||||
freqb = txbasefreq - (bandwidth / 2.0);
|
freqb = txbasefreq - (bandwidth / 2.0);
|
||||||
|
@ -96,22 +101,27 @@ void olivia::send_preamble()
|
||||||
freqb = txbasefreq + (bandwidth / 2.0);
|
freqb = txbasefreq + (bandwidth / 2.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < sr4; i++)
|
for (i = 0, j = 0; i < sr4; i++, j++)
|
||||||
outbuf[i] = nco(freqa);
|
outbuf[i] = nco(freqa) * ampshape[j];
|
||||||
for (i = sr4; i < 2*sr4; i++)
|
for (i = sr4, j = 0; i < 2*sr4; i++, j++)
|
||||||
outbuf[i] = nco(freqb);
|
outbuf[i] = nco(freqb) * ampshape[j];
|
||||||
for (i = 2*sr4; i < 3*sr4; i++)
|
for (i = 2*sr4, j = 0; i < 3*sr4; i++, j++)
|
||||||
outbuf[i] = nco(freqa);
|
outbuf[i] = nco(freqa) * ampshape[j];
|
||||||
for (i = 3*sr4; i < samplerate; i++)
|
for (i = 3*sr4, j = 0; i < samplerate; i++, j++)
|
||||||
outbuf[i] = nco(freqb);
|
outbuf[i] = nco(freqb) * ampshape[j];
|
||||||
ModulateXmtr(outbuf, samplerate);
|
ModulateXmtr(outbuf, samplerate);
|
||||||
}
|
}
|
||||||
|
|
||||||
void olivia::send_postamble()
|
void olivia::send_postamble()
|
||||||
{
|
{
|
||||||
double freqa, freqb;
|
double freqa, freqb;
|
||||||
int i, sr4 = samplerate / 4;
|
int i, j, sr4 = samplerate / 4;
|
||||||
|
double ampshape[sr4];
|
||||||
|
|
||||||
|
for (int i = 0; i < sr4; i++) ampshape[i] = 1.0;
|
||||||
|
for (int i = 0; i < sr4 / 8; i++)
|
||||||
|
ampshape[i] = ampshape[sr4 - 1 - i] = 0.5 * (1.0 - cos(M_PI * i / (sr4/8)));
|
||||||
|
|
||||||
if (reverse) {
|
if (reverse) {
|
||||||
freqa = txbasefreq + (bandwidth / 2.0);
|
freqa = txbasefreq + (bandwidth / 2.0);
|
||||||
freqb = txbasefreq - (bandwidth / 2.0);
|
freqb = txbasefreq - (bandwidth / 2.0);
|
||||||
|
@ -120,14 +130,14 @@ void olivia::send_postamble()
|
||||||
freqb = txbasefreq + (bandwidth / 2.0);
|
freqb = txbasefreq + (bandwidth / 2.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < sr4; i++)
|
for (i = 0, j = 0; i < sr4; i++, j++)
|
||||||
outbuf[i] = nco(freqa);
|
outbuf[i] = nco(freqa) * ampshape[j];
|
||||||
for (i = sr4; i < 2*sr4; i++)
|
for (i = sr4, j = 0; i < 2*sr4; i++, j++)
|
||||||
outbuf[i] = nco(freqb);
|
outbuf[i] = nco(freqb) * ampshape[j];
|
||||||
for (i = 2*sr4; i < 3*sr4; i++)
|
for (i = 2*sr4, j = 0; i < 3*sr4; i++, j++)
|
||||||
outbuf[i] = nco(freqa);
|
outbuf[i] = nco(freqa) * ampshape[j];
|
||||||
for (i = 3*sr4; i < samplerate; i++)
|
for (i = 3*sr4, j = 0; i < samplerate; i++, j++)
|
||||||
outbuf[i] = nco(freqb);
|
outbuf[i] = nco(freqb) * ampshape[j];
|
||||||
ModulateXmtr(outbuf, samplerate);
|
ModulateXmtr(outbuf, samplerate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue