- removed profiling -pg
- receiver uses Downsampler, PolyPhase, Farrow - removed Lagrange git-svn-id: http://moon:8086/svn/software/trunk/projects/mpsk_rx_gui@98 b431acfa-c32f-4a4a-93f1-934dc6c82436
This commit is contained in:
@@ -19,7 +19,7 @@ ifeq ($(CONFIG),Debug)
|
||||
endif
|
||||
|
||||
CPPFLAGS := $(DEPFLAGS) -std=c++11 -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "radio_float_t=float" -D "fir_float_t=float" -D "JUCER_LINUX_MAKE_7346DA2A=1" -D "JUCE_APP_VERSION=1.0.0" -D "JUCE_APP_VERSION_HEX=0x10000" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../JuceLibraryCode/modules -I ../../../../libsrc -I ../../../../libsrc/cpp -I ../../Source -I /usr/local/include/eigen3
|
||||
CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 -std=c++11 -pg
|
||||
CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 -std=c++11 -msse2
|
||||
CXXFLAGS += $(CFLAGS)
|
||||
LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -L../../../../libsrc/build/linux -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt -lradio -lfir -lcrc
|
||||
LDDEPS :=
|
||||
@@ -39,12 +39,12 @@ ifeq ($(CONFIG),Release)
|
||||
TARGET_ARCH := -march=native
|
||||
endif
|
||||
|
||||
CPPFLAGS := $(DEPFLAGS) -std=c++11 -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "radio_float_t=float" -D "fir_float_t=float" -D "JUCER_LINUX_MAKE_7346DA2A=1" -D "JUCE_APP_VERSION=1.0.0" -D "JUCE_APP_VERSION_HEX=0x10000" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../JuceLibraryCode/modules -I ../../../../libsrc -I ../../../../libsrc/cpp -I ../../Source -I /usr/local/include/eigen3
|
||||
CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O3 -std=c++11 -pg
|
||||
CPPFLAGS := $(DEPFLAGS) -std=c++11 -D "LINUX=1" -D "NDEBUG" -D "radio_float_t=float" -D "fir_float_t=float" -D "JUCER_LINUX_MAKE_7346DA2A=1" -D "JUCE_APP_VERSION=1.0.0" -D "JUCE_APP_VERSION_HEX=0x10000" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../JuceLibraryCode/modules -I ../../../../libsrc -I ../../../../libsrc/cpp -I ../../Source -I /usr/local/include/eigen3
|
||||
CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3 -std=c++11 -msse2
|
||||
CXXFLAGS += $(CFLAGS)
|
||||
LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -L../../../../libsrc/build/linux -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt -lradio -lfir -lcrc
|
||||
LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -L../../../../libsrc/build/linux -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt -lradio -lfir -lcrc
|
||||
LDDEPS :=
|
||||
RESFLAGS := -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "radio_float_t=float" -D "fir_float_t=float" -D "JUCER_LINUX_MAKE_7346DA2A=1" -D "JUCE_APP_VERSION=1.0.0" -D "JUCE_APP_VERSION_HEX=0x10000" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../JuceLibraryCode/modules -I ../../../../libsrc -I ../../../../libsrc/cpp -I ../../Source -I /usr/local/include/eigen3
|
||||
RESFLAGS := -D "LINUX=1" -D "NDEBUG" -D "radio_float_t=float" -D "fir_float_t=float" -D "JUCER_LINUX_MAKE_7346DA2A=1" -D "JUCE_APP_VERSION=1.0.0" -D "JUCE_APP_VERSION_HEX=0x10000" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../JuceLibraryCode/modules -I ../../../../libsrc -I ../../../../libsrc/cpp -I ../../Source -I /usr/local/include/eigen3
|
||||
TARGET := M-PSK\ Receiver
|
||||
BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH)
|
||||
CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR)
|
||||
|
||||
@@ -35,14 +35,14 @@
|
||||
</MAINGROUP>
|
||||
<EXPORTFORMATS>
|
||||
<LINUX_MAKE targetFolder="Builds/Linux" externalLibraries="radio fir crc "
|
||||
extraDefs="" extraCompilerFlags="-std=c++11 -pg">
|
||||
extraDefs="" extraCompilerFlags="-std=c++11 -msse2 ">
|
||||
<CONFIGURATIONS>
|
||||
<CONFIGURATION name="Debug" libraryPath="/usr/X11R6/lib/ ../../../../libsrc/build/linux ../../../../libsrc/build/linux ../../../../libsrc/build/linux"
|
||||
isDebug="1" optimisation="1" targetName="M-PSK Receiver" headerPath="../../../../libsrc ../../../../libsrc/cpp ../../Source /usr/local/include/eigen3"
|
||||
defines="radio_float_t=float fir_float_t=float"/>
|
||||
<CONFIGURATION name="Release" libraryPath="/usr/X11R6/lib/ ../../../../libsrc/build/linux ../../../../libsrc/build/linux ../../../../libsrc/build/linux"
|
||||
isDebug="1" optimisation="3" targetName="M-PSK Receiver" headerPath="../../../../libsrc ../../../../libsrc/cpp ../../Source /usr/local/include/eigen3"
|
||||
defines="radio_float_t=float fir_float_t=float"/>
|
||||
isDebug="0" optimisation="3" targetName="M-PSK Receiver" headerPath="../../../../libsrc ../../../../libsrc/cpp ../../Source /usr/local/include/eigen3"
|
||||
defines="radio_float_t=float fir_float_t=float NDEBUG "/>
|
||||
</CONFIGURATIONS>
|
||||
<MODULEPATHS>
|
||||
<MODULEPATH id="juce_audio_basics" path="/home/jens/JUCE/modules"/>
|
||||
|
||||
@@ -55,7 +55,6 @@ MainComponent::MainComponent ()
|
||||
|
||||
//[Constructor] You can add your own custom stuff here..
|
||||
m_samplerate = 48000;
|
||||
// m_pTransmitter = new Transmitter();
|
||||
m_pTransmitterControl = m_pTransmitter;
|
||||
|
||||
m_TextEditor->setMultiLine (true);
|
||||
|
||||
+34
-744
@@ -10,12 +10,11 @@
|
||||
#endif
|
||||
|
||||
/***************************************************************/
|
||||
const uint32_t LPF_OVERSAMPLING = 32; // Arm-Filter: oversampling
|
||||
const uint32_t LPF_OVERSAMPLING = 8; // Arm-Filter: oversampling
|
||||
const radio_float_t LPF_OMEGA = (radio_float_t)0.48; // Arm-Filter: RC Roll-off
|
||||
const uint32_t RCF_OVERSAMPLING = 16; // RCF_TYPE_POLYPHASE_DISCRETE: oversampling
|
||||
const radio_float_t RCF_ROLLOFF = (radio_float_t)0.35; // RCF_TYPE_POLYPHASE_DISCRETE: RC Roll-off
|
||||
const uint32_t RCF_NUM_PHASES = 256; // RCF_TYPE_POLYPHASE_DISCRETE: number of discrete phases
|
||||
const uint32_t LAGRANGE_IP_ORDER = 16; // RCF_TYPE_LAGRANGE: degree of polynomial
|
||||
|
||||
const radio_float_t CPR_GAIN_LEAD_AQU = (radio_float_t)5.0E-5; // 3E-5
|
||||
const radio_float_t CPR_GAIN_LAG_AQU = (radio_float_t)0.4E-6; // 1E-6
|
||||
@@ -49,18 +48,8 @@ Receiver::Receiver(LogHandler *pLogHandler)
|
||||
, m_ReceiverEnable(false)
|
||||
, m_pDataListener(0)
|
||||
, m_frameReceiver(this)
|
||||
, m_pFirArm(0)
|
||||
, m_pFirDownArm(0)
|
||||
, m_pFirRcf(0)
|
||||
, m_pSymMapper(0)
|
||||
, m_pPolyphaseInterpolator(0)
|
||||
, m_pLagrangeInterpolator(0)
|
||||
{
|
||||
m_stateArm_I = nullptr;
|
||||
m_stateArm_Q = nullptr;
|
||||
m_coefArm = nullptr;
|
||||
m_coefRCF = nullptr;
|
||||
|
||||
m_params.numBitsPerSymbol = 2;
|
||||
m_params.samplerate = 192000;
|
||||
m_params.symbolrate = m_params.samplerate/4;
|
||||
@@ -94,6 +83,9 @@ void Receiver::setBufSize(uint32 size)
|
||||
|
||||
if (m_bufsize != size)
|
||||
{
|
||||
m_passbandBuffer.resize(size);
|
||||
m_basebandBuffer.resize(size);
|
||||
|
||||
if (m_pPassbandBuffer)
|
||||
delete m_pPassbandBuffer;
|
||||
|
||||
@@ -263,569 +255,6 @@ void Receiver::init()
|
||||
|
||||
// --------------------------------------
|
||||
// Eval
|
||||
#if 0
|
||||
sl_mean_t slMean;
|
||||
sl_minmax_t sl_min;
|
||||
sl_minmax_t sl_max;
|
||||
fifo_t fifo;
|
||||
uint32_t y;
|
||||
radio_float_t mean;
|
||||
radio_float_t min;
|
||||
radio_float_t max;
|
||||
radio_float_t soll_min;
|
||||
radio_float_t soll_max;
|
||||
radio_float_t x;
|
||||
|
||||
SlidingMeanInit(&slMean, 4);
|
||||
SlidingMinMaxInit(&sl_min, 1000, (radio_float_t)1E12, -1);
|
||||
SlidingMinMaxInit(&sl_max, 1000, (radio_float_t)1E12, +1);
|
||||
|
||||
for (int k=0; k < 4; k++)
|
||||
{
|
||||
mean = SlidingMeanProcess(&slMean, 2);
|
||||
}
|
||||
for (int k=0; k < 4; k++)
|
||||
{
|
||||
mean = SlidingMeanProcess(&slMean, 4);
|
||||
}
|
||||
for (int k=0; k < 4; k++)
|
||||
{
|
||||
mean = SlidingMeanProcess(&slMean, 0);
|
||||
}
|
||||
|
||||
FifoInit(&fifo, 10);
|
||||
for (int k=0; k < 10; k++)
|
||||
{
|
||||
FifoPushBack(&fifo, (uint32_t)k);
|
||||
}
|
||||
for (int k=0; k < 5; k++)
|
||||
{
|
||||
y = FifoFront(&fifo);
|
||||
FifoPopFront(&fifo);
|
||||
}
|
||||
for (int k=0; k < 8; k++)
|
||||
{
|
||||
FifoPushBack(&fifo, (uint32_t)k+10);
|
||||
}
|
||||
FifoPushFront(&fifo, (uint32_t)123);
|
||||
for (int k=0; k < 10; k++)
|
||||
{
|
||||
y = FifoFront(&fifo);
|
||||
FifoPopFront(&fifo);
|
||||
}
|
||||
FifoPushBack(&fifo, (uint32_t)456);
|
||||
y = FifoFront(&fifo);
|
||||
|
||||
// Sliding min
|
||||
soll_min = 1000;
|
||||
for (int k=0; k < 1000; k++)
|
||||
{
|
||||
x = 2*(0.5-(float)rand()/RAND_MAX);
|
||||
if (x < soll_min)
|
||||
soll_min = x;
|
||||
|
||||
SlidingMinMaxProcess(&sl_min, x);
|
||||
}
|
||||
min = SlidingMinMaxGet(&sl_min);
|
||||
|
||||
// Sliding max
|
||||
soll_max = -1000;
|
||||
for (int k=0; k < 1000; k++)
|
||||
{
|
||||
x = 2*(0.5-(float)rand()/RAND_MAX);
|
||||
if (x > soll_max)
|
||||
soll_max = x;
|
||||
|
||||
SlidingMinMaxProcess(&sl_max, x);
|
||||
}
|
||||
max = SlidingMinMaxGet(&sl_max);
|
||||
|
||||
SlidingMeanFree(&slMean);
|
||||
FifoFree(&fifo);
|
||||
SlidingMinMaxFree(&sl_min);
|
||||
SlidingMinMaxFree(&sl_max);
|
||||
|
||||
MinMaxLemire minMax(100);
|
||||
std::vector<float>data(100);
|
||||
std::vector<float>minValues;
|
||||
std::vector<float>maxValues;
|
||||
|
||||
for (int k=0; k < data.size(); k++)
|
||||
{
|
||||
data[k] = (float)k+1;
|
||||
}
|
||||
minMax.process(data);
|
||||
minValues = minMax.getminvalues();
|
||||
maxValues = minMax.getmaxvalues();
|
||||
for (int k=0; k < data.size(); k++)
|
||||
{
|
||||
data[k] = (float)k+1+50;
|
||||
}
|
||||
minMax.process(data);
|
||||
minValues = minMax.getminvalues();
|
||||
maxValues = minMax.getmaxvalues();
|
||||
// --------------------------------------
|
||||
// Eval
|
||||
UnitFrameReceiver rx(10);
|
||||
UnitFrameTransmitter tx(10, &rx);
|
||||
tx.process();
|
||||
|
||||
//---------------------------
|
||||
// ComplexVector
|
||||
//---------------------------
|
||||
CVec cv1(4);
|
||||
CVec cv2(4);
|
||||
CVec cv3(4);
|
||||
|
||||
cv1.at(0) = CVec(1,2);
|
||||
cv1.at(1) = CVec(3,4);
|
||||
cv1.at(2) = CVec(5,6);
|
||||
cv1.at(3) = CVec(7,8);
|
||||
cv2.at(0) = CVec(11,12);
|
||||
cv2.at(1) = CVec(13,14);
|
||||
cv2.at(2) = CVec(15,16);
|
||||
cv2.at(3) = CVec(17,18);
|
||||
|
||||
const CVec &c = -cv1;
|
||||
cv3 = c;
|
||||
|
||||
//---------------------------
|
||||
// cv3 = cv1 <op> cv2
|
||||
//---------------------------
|
||||
cv3 = cv1 + cv2;
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = cv1 - cv2;
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = cv1 * cv2;
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = cv1 / cv2;
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
|
||||
//---------------------------
|
||||
// cv3 = -cv1 <op> cv2
|
||||
//---------------------------
|
||||
cv3 = -cv1 + cv2;
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = -cv1 - cv2;
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = -cv1 * cv2;
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = -cv1 / cv2;
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
|
||||
//---------------------------
|
||||
// cv3 = cv1 <op> -cv2
|
||||
//---------------------------
|
||||
cv3 = cv1 + -cv2;
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = cv1 - -cv2;
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = cv1 * -cv2;
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = cv1 / -cv2;
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
|
||||
//---------------------------
|
||||
// cv3 = -cv1 <op> -cv2
|
||||
//---------------------------
|
||||
cv3 = -cv1 + -cv2;
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = -cv1 - -cv2;
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = -cv1 * -cv2;
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = -cv1 / -cv2;
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
|
||||
//---------------------------
|
||||
// cv3 = cv1* <op> cv2
|
||||
//---------------------------
|
||||
cv3 = cv1.conj() + cv2;
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = cv1.conj() - cv2;
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = cv1.conj() * cv2;
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = cv1.conj() / cv2;
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
|
||||
//---------------------------
|
||||
// cv3 = cv1 <op> cv2*
|
||||
//---------------------------
|
||||
cv3 = cv1 + cv2.conj();
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = cv1 - cv2.conj();
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = cv1 * cv2.conj();
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = cv1 / cv2.conj();
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
|
||||
//---------------------------
|
||||
// cv3 = cv1* <op> cv2*
|
||||
//---------------------------
|
||||
cv3 = cv1.conj() + cv2.conj();
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = cv1.conj() - cv2.conj();
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = cv1.conj() * cv2.conj();
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = cv1.conj() / cv2.conj();
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
|
||||
//---------------------------
|
||||
// cv3 = -cv1* <op> cv2
|
||||
//---------------------------
|
||||
cv3 = -cv1.conj() + cv2;
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = -cv1.conj() - cv2;
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = -cv1.conj() * cv2;
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = -cv1.conj() / cv2;
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
|
||||
//---------------------------
|
||||
// cv3 = cv1* <op> -cv2
|
||||
//---------------------------
|
||||
cv3 = cv1.conj() + -cv2;
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = cv1.conj() - -cv2;
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = cv1.conj() * -cv2;
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = cv1.conj() / -cv2;
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
|
||||
//---------------------------
|
||||
// cv3 = -cv1* <op> -cv2
|
||||
//---------------------------
|
||||
cv3 = -cv1.conj() + -cv2;
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = -cv1.conj() - -cv2;
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = -cv1.conj() * -cv2;
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = -cv1.conj() / -cv2;
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
|
||||
//---------------------------
|
||||
// cv3 = -cv1 <op> cv2*
|
||||
//---------------------------
|
||||
cv3 = -cv1 + cv2.conj();
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = -cv1 - cv2.conj();
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = -cv1 * cv2.conj();
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = -cv1 / cv2.conj();
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
|
||||
//---------------------------
|
||||
// cv3 = cv1 <op> -cv2*
|
||||
//---------------------------
|
||||
cv3 = cv1 + -cv2.conj();
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = cv1 - -cv2.conj();
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = cv1 * -cv2.conj();
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = cv1 / -cv2.conj();
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
|
||||
//---------------------------
|
||||
// cv3 = -cv1 <op> -cv2*
|
||||
//---------------------------
|
||||
cv3 = -cv1 + -cv2.conj();
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = -cv1 - -cv2.conj();
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = -cv1 * -cv2.conj();
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = -cv1 / -cv2.conj();
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
|
||||
//---------------------------
|
||||
// cv3 = -cv1* <op> cv2*
|
||||
//---------------------------
|
||||
cv3 = -cv1.conj() + cv2.conj();
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = -cv1.conj() - cv2.conj();
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = -cv1.conj() * cv2.conj();
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = -cv1.conj() / cv2.conj();
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
|
||||
//---------------------------
|
||||
// cv3 = cv1* <op> -cv2*
|
||||
//---------------------------
|
||||
cv3 = cv1.conj() + -cv2.conj();
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = cv1.conj() - -cv2.conj();
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = cv1.conj() * -cv2.conj();
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = cv1.conj() / -cv2.conj();
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
|
||||
//---------------------------
|
||||
// cv3 = -cv1* <op> -cv2*
|
||||
//---------------------------
|
||||
cv3 = -cv1.conj() + -cv2.conj();
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = -cv1.conj() - -cv2.conj();
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = -cv1.conj() * -cv2.conj();
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
cv3 = -cv1.conj() / -cv2.conj();
|
||||
cv1.print("cv1");
|
||||
cv2.print("cv2");
|
||||
cv3.print("cv3");
|
||||
|
||||
//---------------------------
|
||||
// Test
|
||||
//---------------------------
|
||||
CVec w(32);
|
||||
CVec w_conj(32);
|
||||
CVec e(32);
|
||||
CVec x(32);
|
||||
|
||||
w = CVec(1, 1);
|
||||
w_conj = CVec(0.f, 0.f);
|
||||
e = CVec (0.5f, 0.4f);
|
||||
x = CVec(2.f, 2.f);
|
||||
x *= CVec(10.f, 0);
|
||||
x += CVec(0.5f, 0);
|
||||
x -= CVec(5.f, 0);
|
||||
x += w + w_conj;
|
||||
|
||||
w.print("w");
|
||||
x.print("x");
|
||||
e.print("e");
|
||||
UpdateWeigths(x, e, w, w_conj, 0.08);
|
||||
|
||||
//---------------------------
|
||||
// RealVector
|
||||
//---------------------------
|
||||
RVec rv1(4, 0);
|
||||
RVec rv2(4, 0);
|
||||
RVec rv3(4, 0);
|
||||
|
||||
rv1 = 10.f;
|
||||
rv2 = 20.f;
|
||||
|
||||
const RVec &r = -rv1;
|
||||
rv3 = r;
|
||||
rv3 = -rv1;
|
||||
rv3 = -rv1 * rv2 * rv2;
|
||||
rv3 = (rv1 * rv2) / (rv1 + rv2) * (rv1 - rv2);
|
||||
|
||||
rv1.print("v1");
|
||||
rv2.print("v2");
|
||||
rv3.print("v3");
|
||||
|
||||
rv3 = (rv1 * -rv2) / (rv1 + rv2);
|
||||
|
||||
rv1.print("v1");
|
||||
rv2.print("v2");
|
||||
rv3.print("v3");
|
||||
|
||||
rv3 *= -rv2;
|
||||
rv1.print("v1");
|
||||
rv2.print("v2");
|
||||
rv3.print("v3");
|
||||
|
||||
rv3 += -rv2;
|
||||
rv1.print("v1");
|
||||
rv2.print("v2");
|
||||
rv3.print("v3");
|
||||
|
||||
rv3 -= -rv2;
|
||||
rv1.print("v1");
|
||||
rv2.print("v2");
|
||||
rv3.print("v3");
|
||||
|
||||
rv3 *= -(rv1 + rv2);
|
||||
rv1.print("v1");
|
||||
rv2.print("v2");
|
||||
rv3.print("v3");
|
||||
|
||||
rv3 += -(rv1 + rv2);
|
||||
rv1.print("v1");
|
||||
rv2.print("v2");
|
||||
rv3.print("v3");
|
||||
|
||||
rv3 -= -(rv1 + rv2);
|
||||
rv1.print("v1");
|
||||
rv2.print("v2");
|
||||
rv3.print("v3");
|
||||
|
||||
rv3 = (rv1 + -rv2);
|
||||
rv1.print("v1");
|
||||
rv2.print("v2");
|
||||
rv3.print("v3");
|
||||
|
||||
rv3 = (-rv1 + rv2);
|
||||
rv1.print("v1");
|
||||
rv2.print("v2");
|
||||
rv3.print("v3");
|
||||
|
||||
rv3 = (-rv1 + -rv2);
|
||||
rv1.print("v1");
|
||||
rv2.print("v2");
|
||||
rv3.print("v3");
|
||||
|
||||
rv3 = (-rv1 - rv2);
|
||||
rv1.print("v1");
|
||||
rv2.print("v2");
|
||||
rv3.print("v3");
|
||||
|
||||
rv3 = (rv1 - -rv2);
|
||||
rv1.print("v1");
|
||||
rv2.print("v2");
|
||||
rv3.print("v3");
|
||||
|
||||
rv3 = (-rv1 - -rv2);
|
||||
rv1.print("v1");
|
||||
rv2.print("v2");
|
||||
rv3.print("v3");
|
||||
|
||||
rv3 = (-(rv1 * -rv2) * (1.f + 3.f))/(-rv3) + -6.f;
|
||||
rv1.print("v1");
|
||||
rv2.print("v2");
|
||||
rv3.print("v3");
|
||||
rv3 += -(rv1 * -rv2);
|
||||
rv1.print("v1");
|
||||
rv2.print("v2");
|
||||
rv3.print("v3");
|
||||
#endif
|
||||
|
||||
TraceOpen(&m_trace, "D:\\home\\jens\\Dokumente\\trace.txt");
|
||||
|
||||
@@ -839,61 +268,6 @@ void Receiver::free()
|
||||
|
||||
m_ReceiverEnable = false;
|
||||
|
||||
if (m_stateArm_I != nullptr)
|
||||
delete m_stateArm_I;
|
||||
|
||||
m_stateArm_I = nullptr;
|
||||
|
||||
if (m_stateArm_Q != nullptr)
|
||||
delete m_stateArm_Q;
|
||||
|
||||
m_stateArm_Q = nullptr;
|
||||
|
||||
if (m_coefArm != nullptr)
|
||||
delete m_coefArm;
|
||||
|
||||
m_coefArm = nullptr;
|
||||
|
||||
if (m_coefRCF != nullptr)
|
||||
delete m_coefRCF;
|
||||
|
||||
m_coefRCF = nullptr;
|
||||
|
||||
if (m_pFirArm)
|
||||
{
|
||||
FirCpxFree(m_pFirArm);
|
||||
delete m_pFirArm;
|
||||
}
|
||||
m_pFirArm = nullptr;
|
||||
|
||||
if (m_pFirDownArm)
|
||||
{
|
||||
FirCpxMultirateFree(m_pFirDownArm);
|
||||
delete m_pFirDownArm;
|
||||
}
|
||||
m_pFirDownArm = nullptr;
|
||||
|
||||
if (m_pFirRcf)
|
||||
{
|
||||
FirCpxFree(m_pFirRcf);
|
||||
delete m_pFirRcf;
|
||||
}
|
||||
m_pFirRcf = nullptr;
|
||||
|
||||
if (m_pPolyphaseInterpolator)
|
||||
{
|
||||
PolyPhaseCpxIpFree(m_pPolyphaseInterpolator);
|
||||
delete m_pPolyphaseInterpolator;
|
||||
}
|
||||
m_pPolyphaseInterpolator = nullptr;
|
||||
|
||||
if (m_pLagrangeInterpolator)
|
||||
{
|
||||
LGCpxIpFree(m_pLagrangeInterpolator);
|
||||
delete m_pLagrangeInterpolator;
|
||||
}
|
||||
m_pLagrangeInterpolator = nullptr;
|
||||
|
||||
NCO_Free(&m_nco_ddc);
|
||||
NCO_Free(&m_nco_cpr);
|
||||
|
||||
@@ -1018,10 +392,19 @@ void Receiver::processPassband(float *pRF, uint32_t len)
|
||||
// Digital Down Converter
|
||||
// @samplerate
|
||||
NCO_MixRealComplexV(&m_nco_ddc, m_pPassbandBuffer, pRF, 2/*m_params.agcGain[0]*/, len);
|
||||
|
||||
for (uint32_t i=0; i < len; i++)
|
||||
{
|
||||
m_passbandBuffer[i] = ComplexScalar(m_pPassbandBuffer[i].real, m_pPassbandBuffer[i].imag);
|
||||
}
|
||||
|
||||
// Arm Filtering and downsampling
|
||||
// len_down = FirCpxProcessReal(m_pFirArm, m_coefArm, m_pPassbandBuffer, m_pBasebandBuffer, len);
|
||||
len_down = FirCpxDownProcess(m_pFirDownArm, m_pPassbandBuffer, m_pBasebandBuffer, len);
|
||||
len_down = m_firArmDown.process(m_basebandBuffer, m_passbandBuffer, len);
|
||||
for (uint32_t i=0; i < len_down; i++)
|
||||
{
|
||||
m_pBasebandBuffer[i].real = m_basebandBuffer[i].real();
|
||||
m_pBasebandBuffer[i].imag = m_basebandBuffer[i].imag();
|
||||
}
|
||||
processBaseband(m_pBasebandBuffer, len_down);
|
||||
}
|
||||
|
||||
@@ -1082,7 +465,8 @@ void Receiver::processBaseband(cpx_t *pIF, uint32_t len)
|
||||
if (RCF_TYPE == RCF_TYPE_POLYPHASE_DISCRETE)
|
||||
{
|
||||
// Matched filtering and interpolation
|
||||
PolyPhaseCpxIpFeed(m_pPolyphaseInterpolator, 1, pIF[n]);
|
||||
// PolyPhaseCpxIpFeed(m_pPolyphaseInterpolator, 1, pIF[n]);
|
||||
m_polyPhase.feed(toComplexScalar(pIF[n]), 1);
|
||||
}
|
||||
|
||||
if (RCF_TYPE == RCF_TYPE_POLYPHASE_FARROW)
|
||||
@@ -1102,7 +486,9 @@ void Receiver::processBaseband(cpx_t *pIF, uint32_t len)
|
||||
|
||||
if (RCF_TYPE == RCF_TYPE_POLYPHASE_DISCRETE)
|
||||
{
|
||||
IQ_mf = PolyPhaseCpxIpInterpolate(m_pPolyphaseInterpolator, !TimingCorrectorIsStuff(&m_timing_corrector), TimingCorrectorGetMu(&m_timing_corrector));
|
||||
// IQ_mf = PolyPhaseCpxIpInterpolate(m_pPolyphaseInterpolator, !TimingCorrectorIsStuff(&m_timing_corrector), TimingCorrectorGetMu(&m_timing_corrector));
|
||||
ComplexScalar __IQ_mf = m_polyPhase.process(TimingCorrectorGetMu(&m_timing_corrector), !TimingCorrectorIsStuff(&m_timing_corrector));
|
||||
IQ_mf = toCpx(__IQ_mf);
|
||||
}
|
||||
|
||||
if (RCF_TYPE == RCF_TYPE_POLYPHASE_FARROW)
|
||||
@@ -1303,32 +689,6 @@ void Receiver::processBaseband(cpx_t *pIF, uint32_t len)
|
||||
}
|
||||
}
|
||||
|
||||
cpx_t Receiver::processMatchedFilter(cpx_t x, int32_t m, radio_float_t mu)
|
||||
{
|
||||
cpx_t y = x;
|
||||
cpx_t z;
|
||||
|
||||
// Matched filtering and interpolation
|
||||
if (RCF_TYPE == RCF_TYPE_POLYPHASE_DISCRETE)
|
||||
{
|
||||
// Polyphase matched filter
|
||||
// y = PolyPhaseCpxIpProcess(m_pPolyphaseInterpolator, x, m, mu);
|
||||
}
|
||||
if (RCF_TYPE == RCF_TYPE_POLYPHASE_FARROW)
|
||||
{
|
||||
// Polyphase matched farraow filter
|
||||
// y = FarrowPPIPCpxProcess2(m_pFarrowInterpolator, x, 0, 0, mu);
|
||||
}
|
||||
if (RCF_TYPE == RCF_TYPE_LAGRANGE)
|
||||
{
|
||||
// Matched filter followed by Lagrange interpolator
|
||||
FirCpxProcessReal(m_pFirRcf, m_coefRCF, &x, &z, 1);
|
||||
y = LGCpxIpProcess(m_pLagrangeInterpolator, z, m, mu);
|
||||
}
|
||||
|
||||
return y;
|
||||
}
|
||||
|
||||
void Receiver::initDDC()
|
||||
{
|
||||
NCO_Init(&m_nco_ddc, m_params.ddc_freq/m_params.samplerate, 0);
|
||||
@@ -1370,54 +730,12 @@ void Receiver::initSymbolMapper()
|
||||
|
||||
void Receiver::initFilterRcf()
|
||||
{
|
||||
m_nrcf = (uint32_t)(RCF_OVERSAMPLING*m_params.samplerate/m_params.symbolrate)+1;
|
||||
uint32_t nrcf = (uint32_t)(RCF_OVERSAMPLING*m_params.samplerate/m_params.symbolrate)+1;
|
||||
|
||||
if (m_coefRCF)
|
||||
delete m_coefRCF;
|
||||
|
||||
m_coefRCF = new radio_float_t[m_nrcf];
|
||||
|
||||
// Polyphase matched filter
|
||||
if (RCF_TYPE == RCF_TYPE_LAGRANGE)
|
||||
{
|
||||
m_log.log("Calculating %d-tap SRRC matched Filter",m_nrcf, m_nrcf);
|
||||
|
||||
CalcFirSRRC(m_coefRCF, NUM_BASEBAND_SAMPLES_PER_SYM, (radio_float_t)NUM_BASEBAND_SAMPLES_PER_SYM, RCF_ROLLOFF, m_nrcf);
|
||||
// Calc Raised Cosine Matched Filter
|
||||
if (m_pFirRcf)
|
||||
{
|
||||
FirCpxFree(m_pFirRcf);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_pFirRcf = new fir_cpx_t();
|
||||
}
|
||||
FirCpxInit(m_pFirRcf, m_nrcf, 1, 1);
|
||||
|
||||
if (m_pLagrangeInterpolator)
|
||||
{
|
||||
LGCpxIpFree(m_pLagrangeInterpolator);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_pLagrangeInterpolator = new lgip_cpx_t();
|
||||
}
|
||||
LGCpxIpInit(m_pLagrangeInterpolator, LAGRANGE_IP_ORDER);
|
||||
}
|
||||
|
||||
if (RCF_TYPE == RCF_TYPE_POLYPHASE_DISCRETE)
|
||||
{
|
||||
m_log.log("Calculating %d-tap %d-phase SRRC matched Filter (total %d coefficients)",m_nrcf, RCF_NUM_PHASES, m_nrcf*RCF_NUM_PHASES);
|
||||
|
||||
if (m_pPolyphaseInterpolator)
|
||||
{
|
||||
PolyPhaseCpxIpFree(m_pPolyphaseInterpolator);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_pPolyphaseInterpolator = new ppip_cpx_t();
|
||||
}
|
||||
PolyPhaseCpxIpInit(m_pPolyphaseInterpolator, NUM_BASEBAND_SAMPLES_PER_SYM, (radio_float_t)NUM_BASEBAND_SAMPLES_PER_SYM, RCF_ROLLOFF, m_nrcf, RCF_NUM_PHASES);
|
||||
m_log.log("Calculating %d-tap %d-phase SRRC matched Filter (total %d coefficients)",nrcf, RCF_NUM_PHASES, nrcf*RCF_NUM_PHASES);
|
||||
m_polyPhase.init(NUM_BASEBAND_SAMPLES_PER_SYM, (radio_float_t)NUM_BASEBAND_SAMPLES_PER_SYM, RCF_ROLLOFF, nrcf, RCF_NUM_PHASES);
|
||||
}
|
||||
|
||||
// SRRC poly-phase matched filter with Lagrange interpolator (Farrow)
|
||||
@@ -1432,52 +750,24 @@ void Receiver::initFilterRcf()
|
||||
|
||||
void Receiver::initFilterArm()
|
||||
{
|
||||
uint32_t m_down;
|
||||
uint32_t down;
|
||||
|
||||
m_narm = (uint32_t)(LPF_OVERSAMPLING*m_params.samplerate/m_params.symbolrate)+1;
|
||||
|
||||
if (m_stateArm_I)
|
||||
delete m_stateArm_I;
|
||||
|
||||
if (m_stateArm_Q)
|
||||
delete m_stateArm_Q;
|
||||
|
||||
if (m_coefArm)
|
||||
delete m_coefArm;
|
||||
|
||||
m_stateArm_I = new radio_float_t[m_narm];
|
||||
m_stateArm_Q = new radio_float_t[m_narm];
|
||||
m_coefArm = new radio_float_t[m_narm];
|
||||
|
||||
memset(m_stateArm_I, 0, sizeof (m_narm*sizeof(radio_float_t)));
|
||||
memset(m_stateArm_Q, 0, sizeof (m_narm*sizeof(radio_float_t)));
|
||||
|
||||
if (m_pFirArm)
|
||||
{
|
||||
FirCpxFree(m_pFirArm);
|
||||
delete m_pFirArm;
|
||||
}
|
||||
|
||||
m_pFirArm = new fir_cpx_t();
|
||||
FirCpxInit(m_pFirArm, m_narm, 1, (uint32_t)(m_params.samplerate/(2*m_params.symbolrate)));
|
||||
|
||||
if (m_pFirDownArm)
|
||||
{
|
||||
FirCpxMultirateFree(m_pFirDownArm);
|
||||
delete m_pFirDownArm;
|
||||
}
|
||||
|
||||
m_pFirDownArm = new fir_cpx_multirate_t();
|
||||
uint32_t narm;
|
||||
RealScalar *coefArm;
|
||||
|
||||
narm = (uint32_t)(LPF_OVERSAMPLING*m_params.samplerate/m_params.symbolrate)+1;
|
||||
coefArm = new RealScalar[narm];
|
||||
|
||||
// FIR Arm filters
|
||||
m_log.log("Calculating %d-tap Arm LP-Filter fc = %g Hz",m_narm, NUM_PASSBAND_SAMPLES_PER_SYM*LPF_OMEGA*m_params.symbolrate);
|
||||
FIRCalcLowpass((radio_float_t)(NUM_PASSBAND_SAMPLES_PER_SYM*LPF_OMEGA*m_params.symbolrate/m_params.samplerate), m_coefArm, m_narm);
|
||||
m_log.log("Calculating %d-tap Arm LP-Filter fc = %g Hz",narm, NUM_PASSBAND_SAMPLES_PER_SYM*LPF_OMEGA*m_params.symbolrate);
|
||||
FIRCalcLowpass((radio_float_t)(NUM_PASSBAND_SAMPLES_PER_SYM*LPF_OMEGA*m_params.symbolrate/m_params.samplerate), coefArm, narm);
|
||||
// m_log.log("Calculating %d-tap Arm BP-Filter fc = %g Hz, bw=%g Hz",m_narm, m_params.symbolrate, 4*m_params.symbolrate/3);
|
||||
// FIRCalcBandpass((radio_float_t)(m_params.symbolrate/m_params.samplerate), 4*(m_params.symbolrate/m_params.samplerate)/3, m_coefArm, m_narm);
|
||||
|
||||
m_down = (uint32_t)(m_params.samplerate/(2*m_params.symbolrate) + 0.5);
|
||||
FirCpxMultirateDownInit(m_pFirDownArm, m_coefArm, m_narm, m_down);
|
||||
down = (uint32_t)(m_params.samplerate/(2*m_params.symbolrate) + 0.5);
|
||||
m_firArmDown.init(down, coefArm, narm);
|
||||
|
||||
delete [] coefArm;
|
||||
}
|
||||
|
||||
// Interface
|
||||
|
||||
+7
-17
@@ -27,11 +27,10 @@ using namespace Radio;
|
||||
#define MODE_PROCESS_BASEBAND 1
|
||||
#define RCF_TYPE_POLYPHASE_DISCRETE 0
|
||||
#define RCF_TYPE_POLYPHASE_FARROW 1
|
||||
#define RCF_TYPE_LAGRANGE 2
|
||||
|
||||
#define EQ_ENABLE 1
|
||||
#define MODULATION_TYPE MAP_MODE_QAM
|
||||
#define RCF_TYPE RCF_TYPE_POLYPHASE_FARROW
|
||||
#define RCF_TYPE RCF_TYPE_POLYPHASE_DISCRETE
|
||||
#define MAX_NUMBITS_PERSYM 16
|
||||
// ---------------------------------------------------
|
||||
enum eq_mode
|
||||
@@ -286,6 +285,9 @@ private:
|
||||
CriticalSection m_lock;
|
||||
cpx_t *m_pPassbandBuffer;
|
||||
cpx_t *m_pBasebandBuffer;
|
||||
CVec m_passbandBuffer;
|
||||
CVec m_basebandBuffer;
|
||||
|
||||
sym_err_t *m_pSymbolBuffer;
|
||||
uint32_t m_numSymsInBuffer;
|
||||
uint32_t m_bufsize;
|
||||
@@ -294,23 +296,12 @@ private:
|
||||
pfd_t m_pfdCpr;
|
||||
cpx_t m_trackers_[4];
|
||||
cpx_t m_trackers[4];
|
||||
|
||||
|
||||
// Filter
|
||||
uint32_t m_narm;
|
||||
uint32_t m_nrcf;
|
||||
radio_float_t *m_stateArm_I;
|
||||
radio_float_t *m_stateArm_Q;
|
||||
radio_float_t *m_coefArm;
|
||||
radio_float_t *m_coefRCF;
|
||||
|
||||
fir_cpx_t *m_pFirArm;
|
||||
fir_cpx_multirate_t *m_pFirDownArm;
|
||||
|
||||
fir_cpx_t *m_pFirRcf;
|
||||
Interpolation::DownSampler m_firArmDown;
|
||||
|
||||
// Interpolators
|
||||
ppip_cpx_t *m_pPolyphaseInterpolator;
|
||||
lgip_cpx_t *m_pLagrangeInterpolator;
|
||||
Interpolation::PolyPhase m_polyPhase;
|
||||
Interpolation::Farrow m_farrow;
|
||||
|
||||
// NCOs
|
||||
@@ -340,7 +331,6 @@ private:
|
||||
// Blind EQ
|
||||
Equalizer::Cma m_cma2;
|
||||
|
||||
|
||||
// Symbol demapper
|
||||
sym_map_t *m_pSymMapper;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user