mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-02-03 09:44:01 -05:00
Tx ph.1: fixed AM modulator
This commit is contained in:
parent
8f70840561
commit
9f1b801d1a
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,5 +1,5 @@
|
|||||||
CMakeLists.txt.user*
|
CMakeLists.txt.user*
|
||||||
build/*
|
build*
|
||||||
qtbuild/*
|
qtbuild/*
|
||||||
sdriq/*
|
sdriq/*
|
||||||
presets/*
|
presets/*
|
||||||
|
@ -55,9 +55,9 @@ AMMod::~AMMod()
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void AMMod::configure(MessageQueue* messageQueue, Real rfBandwidth, Real afBandwidth, int modPercent, bool audioMute)
|
void AMMod::configure(MessageQueue* messageQueue, Real rfBandwidth, Real afBandwidth, float modFactor, bool audioMute)
|
||||||
{
|
{
|
||||||
Message* cmd = MsgConfigureAMMod::create(rfBandwidth, afBandwidth, modPercent, audioMute);
|
Message* cmd = MsgConfigureAMMod::create(rfBandwidth, afBandwidth, modFactor, audioMute);
|
||||||
messageQueue->push(cmd);
|
messageQueue->push(cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -75,7 +75,7 @@ void AMMod::pull(Sample& sample)
|
|||||||
m_carrierNco.getIQ(m_modSample);
|
m_carrierNco.getIQ(m_modSample);
|
||||||
Real t = m_toneNco.get();
|
Real t = m_toneNco.get();
|
||||||
|
|
||||||
m_modSample *= (t+1.0f) * m_running.m_modFactor * 16384.0f; // modulate carrier
|
m_modSample *= (t+1.0f) * m_running.m_modFactor * 16384.0f; // modulate and scale carrier
|
||||||
|
|
||||||
m_interpolatorDistanceRemain += m_interpolatorDistance;
|
m_interpolatorDistanceRemain += m_interpolatorDistance;
|
||||||
}
|
}
|
||||||
@ -150,7 +150,7 @@ void AMMod::apply()
|
|||||||
|
|
||||||
if(m_config.m_inputFrequencyOffset != m_running.m_inputFrequencyOffset)
|
if(m_config.m_inputFrequencyOffset != m_running.m_inputFrequencyOffset)
|
||||||
{
|
{
|
||||||
m_carrierNco.setFreq(-m_config.m_inputFrequencyOffset, m_config.m_audioSampleRate);
|
m_carrierNco.setFreq(m_config.m_inputFrequencyOffset, m_config.m_audioSampleRate);
|
||||||
}
|
}
|
||||||
|
|
||||||
if((m_config.m_outputSampleRate != m_running.m_outputSampleRate) ||
|
if((m_config.m_outputSampleRate != m_running.m_outputSampleRate) ||
|
||||||
|
@ -35,7 +35,7 @@ public:
|
|||||||
AMMod();
|
AMMod();
|
||||||
~AMMod();
|
~AMMod();
|
||||||
|
|
||||||
void configure(MessageQueue* messageQueue, Real rfBandwidth, Real afBandwidth, int modPercent, bool audioMute);
|
void configure(MessageQueue* messageQueue, Real rfBandwidth, Real afBandwidth, float modFactor, bool audioMute);
|
||||||
|
|
||||||
virtual void pull(Sample& sample);
|
virtual void pull(Sample& sample);
|
||||||
virtual void start();
|
virtual void start();
|
||||||
@ -54,9 +54,9 @@ private:
|
|||||||
float getModFactor() const { return m_modFactor; }
|
float getModFactor() const { return m_modFactor; }
|
||||||
bool getAudioMute() const { return m_audioMute; }
|
bool getAudioMute() const { return m_audioMute; }
|
||||||
|
|
||||||
static MsgConfigureAMMod* create(Real rfBandwidth, Real afBandwidth, int modPercent, bool audioMute)
|
static MsgConfigureAMMod* create(Real rfBandwidth, Real afBandwidth, float modFactor, bool audioMute)
|
||||||
{
|
{
|
||||||
return new MsgConfigureAMMod(rfBandwidth, afBandwidth, modPercent, audioMute);
|
return new MsgConfigureAMMod(rfBandwidth, afBandwidth, modFactor, audioMute);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -175,6 +175,7 @@ void DSPDeviceSinkEngine::work()
|
|||||||
sampleFifo->getWriteIterator(writeBegin);
|
sampleFifo->getWriteIterator(writeBegin);
|
||||||
SampleVector::iterator writeAt = writeBegin;
|
SampleVector::iterator writeAt = writeBegin;
|
||||||
Sample s;
|
Sample s;
|
||||||
|
int sourceOccurence = 0;
|
||||||
|
|
||||||
if ((m_threadedBasebandSampleSources.size() + m_basebandSampleSources.size()) > 0)
|
if ((m_threadedBasebandSampleSources.size() + m_basebandSampleSources.size()) > 0)
|
||||||
{
|
{
|
||||||
@ -185,7 +186,14 @@ void DSPDeviceSinkEngine::work()
|
|||||||
{
|
{
|
||||||
(*it)->pull(s);
|
(*it)->pull(s);
|
||||||
s /= (m_threadedBasebandSampleSources.size() + m_basebandSampleSources.size());
|
s /= (m_threadedBasebandSampleSources.size() + m_basebandSampleSources.size());
|
||||||
(*writeAt) += s;
|
|
||||||
|
if (sourceOccurence == 0) {
|
||||||
|
(*writeAt) = s;
|
||||||
|
} else {
|
||||||
|
(*writeAt) += s;
|
||||||
|
}
|
||||||
|
|
||||||
|
sourceOccurence++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// pull data from direct sources and merge them in the device sample FIFO
|
// pull data from direct sources and merge them in the device sample FIFO
|
||||||
@ -194,9 +202,18 @@ void DSPDeviceSinkEngine::work()
|
|||||||
(*it)->pull(s);
|
(*it)->pull(s);
|
||||||
s /= (m_threadedBasebandSampleSources.size() + m_basebandSampleSources.size());
|
s /= (m_threadedBasebandSampleSources.size() + m_basebandSampleSources.size());
|
||||||
(*writeAt) += s;
|
(*writeAt) += s;
|
||||||
|
|
||||||
|
if (sourceOccurence == 0) {
|
||||||
|
(*writeAt) = s;
|
||||||
|
} else {
|
||||||
|
(*writeAt) += s;
|
||||||
|
}
|
||||||
|
|
||||||
|
sourceOccurence++;
|
||||||
}
|
}
|
||||||
|
|
||||||
sampleFifo->bumpIndex(writeAt);
|
sampleFifo->bumpIndex(writeAt);
|
||||||
|
sourceOccurence = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// feed the mix to the sinks normally just the main spectrum vis
|
// feed the mix to the sinks normally just the main spectrum vis
|
||||||
|
Loading…
Reference in New Issue
Block a user