Skip to content

Commit 1169684

Browse files
committed
Performance fix for Vincenzo's patch
1 parent b5e4c42 commit 1169684

File tree

4 files changed

+60
-27
lines changed

4 files changed

+60
-27
lines changed

Desktop_Interface/asyncdft.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,6 @@ std::unique_ptr<short[]> AsyncDFT::getWindow()
132132
return readData;
133133
}
134134

135-
136135
QVector<double> AsyncDFT::normalizeDFT(double e_maximum, QVector<double> dft)
137136
{
138137
double u_maximum;

Desktop_Interface/isobuffer.cpp

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ isoBuffer::isoBuffer(QWidget* parent, int bufferLen, isoDriver* caller, unsigned
3737
, m_sampleRate_bit(bufferLen/21.0/375*VALID_DATA_PER_375*8)
3838
, m_virtualParent(caller)
3939
{
40+
async_dft = new AsyncDFT();
4041
m_buffer = m_bufferPtr.get();
4142
}
4243

@@ -56,7 +57,9 @@ void isoBuffer::insertIntoBuffer(short item)
5657
{
5758
m_back = 0;
5859
}
59-
async_dft.addSample(item);
60+
61+
if (m_asyncDftActive)
62+
async_dft->addSample(item);
6063

6164
checkTriggered();
6265
}
@@ -169,6 +172,16 @@ void isoBuffer::gainBuffer(int gain_log)
169172
}
170173
}
171174

175+
void isoBuffer::enableDftWrite(bool enable)
176+
{
177+
if ((enable == true) && (m_asyncDftActive == false))
178+
{
179+
delete async_dft;
180+
async_dft = new AsyncDFT();
181+
}
182+
183+
m_asyncDftActive = enable;
184+
}
172185

173186
void isoBuffer::outputSampleToFile(double averageSample)
174187
{
@@ -350,7 +363,7 @@ void isoBuffer::serialManage(double baudRate, UartParity parity, bool hexDisplay
350363
m_isDecoding = true;
351364
}
352365

353-
m_decoder->m_baudRate = baudRate;
366+
m_decoder->m_baudRate = baudRate;
354367
m_decoder->setParityMode(parity);
355368
m_decoder->setHexDisplay(hexDisplay);
356369
m_decoder->serialDecode();
@@ -399,7 +412,7 @@ double isoBuffer::getDelayedTriggerPoint(double delay)
399412
{
400413
if (m_triggerPositionList.size() == 0)
401414
return 0;
402-
415+
403416
const uint32_t delaySamples = delay * m_samplesPerSecond;
404417

405418
auto isValid = [=](uint32_t index)->bool

Desktop_Interface/isobuffer.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ class isoBuffer : public QWidget
5757
void clearBuffer();
5858
void gainBuffer(int gain_log);
5959

60+
void enableDftWrite(bool enable);
61+
6062
// Advanced buffer operations
6163
private:
6264
template<typename T, typename Function>
@@ -119,7 +121,7 @@ class isoBuffer : public QWidget
119121
uartStyleDecoder* m_decoder = NULL;
120122
bool m_isDecoding = true;
121123
//DFT
122-
AsyncDFT async_dft;
124+
AsyncDFT* async_dft;
123125
private:
124126
// File I/O
125127
bool m_fileIOEnabled = false;
@@ -132,6 +134,8 @@ class isoBuffer : public QWidget
132134
unsigned int m_currentColumn = 0;
133135
uint32_t m_lastTriggerDetlaT = 0;
134136

137+
bool m_asyncDftActive = false;
138+
135139
isoDriver* m_virtualParent;
136140

137141
void addTriggerPosition(uint32_t position);

Desktop_Interface/isodriver.cpp

Lines changed: 39 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -628,6 +628,9 @@ void isoDriver::frameActionGeneric(char CH1_mode, char CH2_mode)
628628
return;
629629
}
630630

631+
internalBuffer375_CH1->enableDftWrite(spectrum);
632+
internalBuffer375_CH2->enableDftWrite(spectrum);
633+
// internalBuffer750->enableDftWrite(spectrum);
631634

632635
//qDebug() << "made it to frameActionGeneric";
633636
if(!paused_CH1 && CH1_mode == - 1){
@@ -688,7 +691,7 @@ void isoDriver::frameActionGeneric(char CH1_mode, char CH2_mode)
688691
* the buffer each time.
689692
* @TODO improve this limitation.
690693
*/
691-
double const_displ_window = ((double)internalBuffer375_CH1->async_dft.n_samples)/(internalBuffer375_CH1->m_samplesPerSecond);
694+
double const_displ_window = ((double)internalBuffer375_CH1->async_dft->n_samples)/(internalBuffer375_CH1->m_samplesPerSecond);
692695
double const_displ_delay = 0;
693696
display.delay = const_displ_delay;
694697
display.window = const_displ_window;
@@ -697,28 +700,38 @@ void isoDriver::frameActionGeneric(char CH1_mode, char CH2_mode)
697700
if(CH1_mode == -1) readData750 = internalBuffer750->readBuffer(display.window,GRAPH_SAMPLES,false, display.delay + triggerDelay);
698701
}
699702
/*Convert data also for spectrum CH1 and CH2*/
700-
std::unique_ptr<short[]> dt_samples1 = internalBuffer375_CH1->async_dft.getWindow();
701-
std::unique_ptr<short[]> dt_samples2 = internalBuffer375_CH2->async_dft.getWindow();
703+
std::unique_ptr<short[]> dt_samples1;
704+
std::unique_ptr<short[]> dt_samples2;
705+
QVector<double> converted_dt_samples1, converted_dt_samples2;
706+
QVector<double> x(GRAPH_SAMPLES), CH1(GRAPH_SAMPLES), CH2(GRAPH_SAMPLES);
702707

708+
if (spectrum)
709+
{
710+
dt_samples1 = internalBuffer375_CH1->async_dft->getWindow();
711+
dt_samples2 = internalBuffer375_CH2->async_dft->getWindow();
712+
converted_dt_samples1.resize(internalBuffer375_CH1->async_dft->n_samples),
713+
converted_dt_samples2.resize(internalBuffer375_CH2->async_dft->n_samples);
714+
}
703715

704-
QVector<double> x(GRAPH_SAMPLES), CH1(GRAPH_SAMPLES), CH2(GRAPH_SAMPLES),
705-
converted_dt_samples1(internalBuffer375_CH1->async_dft.n_samples),
706-
converted_dt_samples2(internalBuffer375_CH2->async_dft.n_samples);
707716

708717
if (CH1_mode == 1){
709718
analogConvert(readData375_CH1.get(), &CH1, 128, AC_CH1, 1);
710-
analogConvert(dt_samples1.get(), &converted_dt_samples1, 128, AC_CH1, 1);
711-
712719
for (int i=0; i < CH1.size(); i++)
713720
{
714721
CH1[i] /= m_attenuation_CH1;
715722
CH1[i] += m_offset_CH1;
716723
}
717-
for (int i=0; i < converted_dt_samples1.size(); i++)
724+
725+
if (spectrum)
718726
{
719-
converted_dt_samples1[i] /= m_attenuation_CH1;
720-
converted_dt_samples1[i] += m_offset_CH1;
727+
analogConvert(dt_samples1.get(), &converted_dt_samples1, 128, AC_CH1, 1);
728+
for (int i=0; i < converted_dt_samples1.size(); i++)
729+
{
730+
converted_dt_samples1[i] /= m_attenuation_CH1;
731+
converted_dt_samples1[i] += m_offset_CH1;
732+
}
721733
}
734+
722735
xmin = (currentVmin < xmin) ? currentVmin : xmin;
723736
xmax = (currentVmax > xmax) ? currentVmax : xmax;
724737
broadcastStats(0);
@@ -729,17 +742,21 @@ void isoDriver::frameActionGeneric(char CH1_mode, char CH2_mode)
729742

730743
if (CH2_mode == 1){
731744
analogConvert(readData375_CH2.get(), &CH2, 128, AC_CH2, 2);
732-
analogConvert(dt_samples2.get(), &converted_dt_samples2, 128, AC_CH2, 2);
733745

734746
for (int i=0; i < GRAPH_SAMPLES; i++)
735747
{
736748
CH2[i] /= m_attenuation_CH2;
737749
CH2[i] += m_offset_CH2;
738750
}
739-
for (int i=0; i < converted_dt_samples2.size(); i++)
751+
752+
if (spectrum)
740753
{
741-
converted_dt_samples2[i] /= m_attenuation_CH1;
742-
converted_dt_samples2[i] += m_offset_CH1;
754+
analogConvert(dt_samples2.get(), &converted_dt_samples2, 128, AC_CH2, 2);
755+
for (int i=0; i < converted_dt_samples2.size(); i++)
756+
{
757+
converted_dt_samples2[i] /= m_attenuation_CH1;
758+
converted_dt_samples2[i] += m_offset_CH1;
759+
}
743760
}
744761
ymin = (currentVmin < ymin) ? currentVmin : ymin;
745762
ymax = (currentVmax > ymax) ? currentVmax : ymax;
@@ -778,24 +795,24 @@ void isoDriver::frameActionGeneric(char CH1_mode, char CH2_mode)
778795
if (spectrum) { /*If frequency spectrum mode*/
779796
try {
780797
/*Creating DFT amplitudes*/
781-
QVector<double> amplitude1 = internalBuffer375_CH1->async_dft.getPowerSpectrum(converted_dt_samples1);
798+
QVector<double> amplitude1 = internalBuffer375_CH1->async_dft->getPowerSpectrum(converted_dt_samples1);
782799
/*Getting array of frequencies for display purposes*/
783-
QVector<double> f = internalBuffer375_CH1->async_dft.getFrequenciyWindow(internalBuffer375_CH1->m_samplesPerSecond);
800+
QVector<double> f = internalBuffer375_CH1->async_dft->getFrequenciyWindow(internalBuffer375_CH1->m_samplesPerSecond);
784801

785802
/*Max amplitude for display purposes*/
786-
double max1 = internalBuffer375_CH1->async_dft.maximum;
803+
double max1 = internalBuffer375_CH1->async_dft->maximum;
787804
double max2 = -1;
788805

789806
if(CH2_mode) {
790-
QVector<double> amplitude2 = internalBuffer375_CH2->async_dft.getPowerSpectrum(converted_dt_samples2);
791-
max2 = internalBuffer375_CH2->async_dft.maximum;
807+
QVector<double> amplitude2 = internalBuffer375_CH2->async_dft->getPowerSpectrum(converted_dt_samples2);
808+
max2 = internalBuffer375_CH2->async_dft->maximum;
792809
/*Normalization with respect to amplitude1*/
793-
amplitude2 = internalBuffer375_CH2->async_dft.normalizeDFT(max1, amplitude2);
810+
amplitude2 = internalBuffer375_CH2->async_dft->normalizeDFT(max1, amplitude2);
794811
axes->graph(1)->setData(f,amplitude2);
795812
}
796813

797814
/*Decision for normalization & display purposes*/
798-
amplitude1 = internalBuffer375_CH1->async_dft.normalizeDFT(max2, amplitude1);
815+
amplitude1 = internalBuffer375_CH1->async_dft->normalizeDFT(max2, amplitude1);
799816
axes->graph(0)->setData(f, amplitude1);
800817
axes->xAxis->setRange(m_spectrumMinX, m_spectrumMaxX);
801818
/*Setting maximum/minimum y-axis 0%-100%*/

0 commit comments

Comments
 (0)