#include "tdrbandpass.h" #include "Traces/fftcomplex.h" #include using namespace Math; using namespace std; TDRBandpass::TDRBandpass() { } TraceMath::DataType TDRBandpass::outputType(TraceMath::DataType inputType) { if(inputType == DataType::Frequency) { return DataType::Time; } else { return DataType::Invalid; } } QString TDRBandpass::description() { return "TDR (bandpass mode)"; } void TDRBandpass::edit() { // nothing to do for now } QWidget *TDRBandpass::createExplanationWidget() { return new QLabel("Test"); } void TDRBandpass::inputSamplesChanged(unsigned int begin, unsigned int end) { Q_UNUSED(begin); const double PI = 3.141592653589793238463; if(input->rData().size() >= 2) { // TDR is computationally expensive, only update at the end of sweep if(end != input->rData().size()) { // not the end, do nothing return; } // create vector for frequency data vector> dft(end); // window data and perform FFTshift ("zero"-bin expected at index 0 but is in the middle of input data) for(unsigned int i=0;irData()[i].y * hamming; // swap upper and lower half if(i < end/2) { dft[i + (end+1)/2] = windowed; } else { dft[i - end/2] = windowed; } } // perform IFT operation on data Fft::transform(dft, true); // calculate sample distance auto freqStep = input->rData()[1].x - input->rData()[0].x; auto timeStep = 1.0 / (freqStep * end); // copy DFT data to output data data.resize(dft.size()); for(unsigned int i=0;i