1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2025-02-03 09:44:01 -05:00

Test source: basic pulse test pattern

This commit is contained in:
f4exb 2018-10-23 14:34:56 +02:00
parent f813c0134e
commit 30e36157a8
5 changed files with 59 additions and 1 deletions

View File

@ -480,6 +480,11 @@
<string>FM</string> <string>FM</string>
</property> </property>
</item> </item>
<item>
<property name="text">
<string>Pul</string>
</property>
</item>
</widget> </widget>
</item> </item>
<item> <item>

View File

@ -29,7 +29,7 @@
const PluginDescriptor TestSourcePlugin::m_pluginDescriptor = { const PluginDescriptor TestSourcePlugin::m_pluginDescriptor = {
QString("Test Source input"), QString("Test Source input"),
QString("4.1.0"), QString("4.2.4"),
QString("(c) Edouard Griffiths, F4EXB"), QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"), QString("https://github.com/f4exb/sdrangel"),
true, true,

View File

@ -37,6 +37,7 @@ struct TestSourceSettings {
ModulationNone, ModulationNone,
ModulationAM, ModulationAM,
ModulationFM, ModulationFM,
ModulationPulse,
ModulationLast ModulationLast
} Modulation; } Modulation;

View File

@ -38,6 +38,11 @@ TestSourceThread::TestSourceThread(SampleSinkFifo* sampleFifo, QObject* parent)
m_amModulation(0.5f), m_amModulation(0.5f),
m_fmDeviationUnit(0.0f), m_fmDeviationUnit(0.0f),
m_fmPhasor(0.0f), m_fmPhasor(0.0f),
m_pulseWidth(150),
m_pulseSampleCount(0),
m_pulsePatternCount(0),
m_pulsePatternCycle(8),
m_pulsePatternPlaces(3),
m_samplerate(48000), m_samplerate(48000),
m_log2Decim(4), m_log2Decim(4),
m_fcPos(0), m_fcPos(0),
@ -262,6 +267,48 @@ void TestSourceThread::generate(quint32 chunksize)
m_buf[i++] = (int16_t) (im * (float) m_amplitudeBitsQ); m_buf[i++] = (int16_t) (im * (float) m_amplitudeBitsQ);
} }
break; break;
case TestSourceSettings::ModulationPulse:
{
if (m_pulseSampleCount < m_pulseWidth) // sync pattern: 0
{
m_buf[i++] = m_amplitudeBitsDC;
m_buf[i++] = 0;
}
else if (m_pulseSampleCount < 2*m_pulseWidth) // sync pattern: 1
{
m_buf[i++] = (int16_t) (m_amplitudeBitsI + m_amplitudeBitsDC);
m_buf[i++] = (int16_t) (m_phaseImbalance * (float) m_amplitudeBitsQ);
}
else if (m_pulseSampleCount < 3*m_pulseWidth) // sync pattern: 0
{
m_buf[i++] = m_amplitudeBitsDC;
m_buf[i++] = 0;
}
else if (m_pulseSampleCount < (3+m_pulsePatternPlaces)*m_pulseWidth) // binary pattern
{
uint32_t patPulseSampleCount = m_pulseSampleCount - 3*m_pulseWidth;
uint32_t patPulseIndex = patPulseSampleCount / m_pulseWidth;
float patFigure = (m_pulsePatternCount & (1<<patPulseIndex)) != 0 ? 0.1 : 0.0; // make binary pattern -20dB vs sync pattern
m_buf[i++] = (int16_t) (patFigure * (float) m_amplitudeBitsI) + m_amplitudeBitsDC;
m_buf[i++] = (int16_t) (patFigure * (float) m_phaseImbalance * m_amplitudeBitsQ);
}
if (m_pulseSampleCount < (4+m_pulsePatternPlaces)*m_pulseWidth - 1)
{
m_pulseSampleCount++;
}
else
{
if (m_pulsePatternCount < m_pulsePatternCycle - 1) {
m_pulsePatternCount++;
} else {
m_pulsePatternCount = 0;
}
m_pulseSampleCount = 0;
}
}
break;
case TestSourceSettings::ModulationNone: case TestSourceSettings::ModulationNone:
default: default:
{ {

View File

@ -94,6 +94,11 @@ private:
float m_amModulation; float m_amModulation;
float m_fmDeviationUnit; float m_fmDeviationUnit;
float m_fmPhasor; float m_fmPhasor;
uint32_t m_pulseWidth; //!< pulse width in number of samples
uint32_t m_pulseSampleCount;
uint32_t m_pulsePatternCount;
uint32_t m_pulsePatternCycle;
uint32_t m_pulsePatternPlaces;
int m_samplerate; int m_samplerate;
unsigned int m_log2Decim; unsigned int m_log2Decim;