📄 freqsyncacq.h
字号:
/******************************************************************************\ * Technische Universitaet Darmstadt, Institut fuer Nachrichtentechnik * Copyright (c) 2001 * * Author(s): * Volker Fischer * * Description: * See FreqSyncAcq.cpp * ****************************************************************************** * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software * Foundation; either version 2 of the License, or (at your option) any later * version. * * 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 General Public License along with * this program; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *\******************************************************************************/#if !defined(FREQSYNC_H__3B0BA660EDOINBEROUEBGF4344_BB2B_23E7912__INCLUDED_)#define FREQSYNC_H__3B0BA660EDOINBEROUEBGF4344_BB2B_23E7912__INCLUDED_#include "../Parameter.h"#include "../util/Modul.h"#include "../matlib/Matlib.h"#include "../util/Utilities.h"#ifdef HAVE_DRFFTW_H# include <drfftw.h>#else# include <rfftw.h>#endif/* Definitions ****************************************************************//* Bound for peak detection between filtered signal (in frequency direction) and the unfiltered signal. Define different bounds for different relative search window sizes */#define PEAK_BOUND_FILT2SIGNAL_1 ((CReal) 9)#define PEAK_BOUND_FILT2SIGNAL_0_042 ((CReal) 7)/* This value MUST BE AT LEAST 2, because otherwise we would get an overrun when we try to add a complete symbol to the buffer! */#ifdef USE_FRQOFFS_TRACK_GUARDCORR# define NUM_BLOCKS_4_FREQ_ACQU 30 /* Accuracy must be higher */#else# define NUM_BLOCKS_4_FREQ_ACQU 6#endif/* Number of block used for averaging */#define NUM_BLOCKS_USED_FOR_AV 3/* Lambda for IIR filter for estimating noise floor in frequency domain */#define LAMBDA_FREQ_IIR_FILT ((CReal) 0.87)/* Ratio between highest and second highest peak at the frequency pilot positions in the PSD estimation (after peak detection) */#define MAX_RAT_PEAKS_AT_PIL_POS_HIGH ((CReal) 0.99)/* Ratio between highest and lowest peak at frequency pilot positions (see above) */#define MAX_RAT_PEAKS_AT_PIL_POS_LOW ((CReal) 0.8)/* Number of blocks storing the squared magnitude of FFT used for averaging */#define NUM_FFT_RES_AV_BLOCKS (NUM_BLOCKS_4_FREQ_ACQU * (NUM_BLOCKS_USED_FOR_AV - 1) + 1)/* Classes ********************************************************************/class CFreqSyncAcq : public CReceiverModul<_REAL, _COMPLEX>{public: CFreqSyncAcq() : bSyncInput(FALSE), bAquisition(FALSE), rWinSize((_REAL) SOUNDCRD_SAMPLE_RATE / 2), veciTableFreqPilots(3), /* 3 freqency pilots */ rCenterFreq((_REAL) SOUNDCRD_SAMPLE_RATE / 4), bUseRecFilter(FALSE) {} virtual ~CFreqSyncAcq() {} void SetSearchWindow(_REAL rNewCenterFreq, _REAL rNewWinSize); void StartAcquisition(); void StopAcquisition() {bAquisition = FALSE;} _BOOLEAN GetAcquisition() {return bAquisition;} void SetRecFilter(const _BOOLEAN bNewF) {bUseRecFilter = bNewF;} _BOOLEAN GetRecFilter() {return bUseRecFilter;} /* To set the module up for synchronized DRM input data stream */ void SetSyncInput(_BOOLEAN bNewS) {bSyncInput = bNewS;}protected: CVector<int> veciTableFreqPilots; CShiftRegister<fftw_real> vecrFFTHistory; CFftPlans FftPlan; CRealVector vecrFFTInput; CRealVector vecrSqMagFFTOut; CRealVector vecrHammingWin; CMovingAv<CRealVector> vvrPSDMovAv; int iFrAcFFTSize; int iHistBufSize; int iFFTSize; _BOOLEAN bAquisition; int iAquisitionCounter; int iAverageCounter; _BOOLEAN bSyncInput; _REAL rCenterFreq; _REAL rWinSize; int iStartDCSearch; int iEndDCSearch; _REAL rPeakBoundFiltToSig; CRealVector vecrPSDPilCor; int iHalfBuffer; int iSearchWinSize; CRealVector vecrFiltResLR; CRealVector vecrFiltResRL; CRealVector vecrFiltRes; CVector<int> veciPeakIndex; _COMPLEX cCurExp; _REAL rInternIFNorm; CDRMBandpassFilt BPFilter; _BOOLEAN bUseRecFilter; virtual void InitInternal(CParameter& ReceiverParam); virtual void ProcessDataInternal(CParameter& ReceiverParam);};#endif // !defined(FREQSYNC_H__3B0BA660EDOINBEROUEBGF4344_BB2B_23E7912__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -