/** * @file cusdr_chirpProcessor.h * @brief chirp processor header file * @author Hermann von Hasseln, DL3HVH * @version 0.1 * @date 2011-09-22 */ /* * Copyright 2011 Hermann von Hasseln, DL3HVH * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Library General Public License version 2 as * published by the Free Software Foundation * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _CUSDR_CHIRPPROCESSOR_H #define _CUSDR_CHIRPPROCESSOR_H //#include //#include //#include //#include //#include //#include //#include //#include #include "cusdr_settings.h" #include "QtDSP/qtdsp_qComplex.h" #include "QtDSP/qtdsp_filter.h" #include "QtDSP/qtdsp_fft.h" #ifdef LOG_CHIRP_PROCESSOR # define CHIRP_PROCESSOR_DEBUG qDebug().nospace() << "ChirpProcessor::\t" #else # define CHIRP_PROCESSOR_DEBUG nullDebug() #endif #define FULL_BUFFERSIZE 16384//65536 #define HALF_BUFFERSIZE 32768 #define BUFFERSIZE 2048 class ChirpProcessor : public QObject { Q_OBJECT public: ChirpProcessor(THPSDRParameter *ioData = 0); ~ChirpProcessor(); public slots: void stop(); void processChirpData(); void generateLocalChirp(); private slots: void matchedFilterFIRFilter(QList data); void samplingRateChanged(QObject *sender, int value); void setSpectras(const float *distance, const float *chirpfft); void setDistSpectrumAvgLength(int value); void setChirpFFTShow(bool value); void setChirpSideband(bool value); void setFilterLowerFrequency(int value); void setFilterUpperFrequency(int value); private: Settings *set; QMutex m_mutex; QString m_message; QFFT *m_chirpFFT; QFFT *m_matchedFFT; QFilter *m_filter; CPX m_tmp0; CPX m_tmp1; CPX m_tmp2; CPX m_tmp3; CPX m_tmpDec; CPX m_cpxRxFFT; CPX m_cpxChirpIn; CPX m_cpxChirpTmp; CPX m_cpxChirpOut; CPX m_cpxIn; CPX m_cpxInFilt; CPX m_cpxOut; THPSDRParameter *io; QQueue > average_queue; float m_tmpBuf[FULL_BUFFERSIZE]; float m_outBuf[FULL_BUFFERSIZE]; float m_spectrumBuffer[FULL_BUFFERSIZE]; float m_fftSpectrumBuffer[FULL_BUFFERSIZE]; float m_spectrumBufferFull[FULL_BUFFERSIZE]; float *m_window; volatile bool m_stopped; float m_specMax; float m_specMin; float m_scale; int m_sampleRate; int m_downSampleRate; int m_downRate; int m_specBufferSize; int m_specAvgLength; float m_filterLowerFrequency; float m_filterUpperFrequency; bool m_switch; bool m_showChirpFFT; qint64 m_chirpBufferLength; qreal m_chirpSidebandFactor; void setupConnections(); void decimate(const CPX &in, CPX &out, int size, int downrate); void decimate(const QList &data, CPX &out, int downrate); void spectrumAveraging(qint64 length, const float *buffer); int setSpectrumBufferSize(int size); signals: void messageEvent(QString message); }; #endif // _CUSDR_CHIRPPROCESSOR_H