GNU Radio 3.6.5 C++ API
|
00001 /* -*- c++ -*- */ 00002 /* 00003 * Copyright 2010,2012 Free Software Foundation, Inc. 00004 * 00005 * GNU Radio is free software; you can redistribute it and/or modify 00006 * it under the terms of the GNU General Public License as published by 00007 * the Free Software Foundation; either version 3, or (at your option) 00008 * any later version. 00009 * 00010 * GNU Radio is distributed in the hope that it will be useful, 00011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 * GNU General Public License for more details. 00014 * 00015 * You should have received a copy of the GNU General Public License 00016 * along with GNU Radio; see the file COPYING. If not, write to 00017 * the Free Software Foundation, Inc., 51 Franklin Street, 00018 * Boston, MA 02110-1301, USA. 00019 */ 00020 00021 00022 #ifndef INCLUDED_ANALOG_CPM_H 00023 #define INCLUDED_ANALOG_CPM_H 00024 00025 #include <analog/api.h> 00026 #include <vector> 00027 00028 namespace gr { 00029 namespace analog { 00030 00031 class ANALOG_API cpm 00032 { 00033 public: 00034 enum cpm_type { 00035 LRC, 00036 LSRC, 00037 LREC, 00038 TFM, 00039 GAUSSIAN, 00040 GENERIC = 999 00041 }; 00042 00043 /*! \brief Return the taps for an interpolating FIR filter (gr_interp_fir_filter_fff). 00044 * 00045 * \details 00046 * These taps represent the phase response \f$g(k)\f$ for use in a CPM modulator, 00047 * see also gr_cpmmod_bc. 00048 * 00049 * \param type The CPM type (Rectangular, Raised Cosine, Spectral Raised Cosine, 00050 * Tamed FM or Gaussian). 00051 * \param samples_per_sym Samples per symbol. 00052 * \param L The length of the phase response in symbols. 00053 * \param beta For Spectral Raised Cosine, this is the rolloff factor. For Gaussian 00054 * phase responses, this the 3dB-time-bandwidth product. For all other 00055 * cases, it is ignored. 00056 * 00057 * Output: returns a vector of length \a K = \p samples_per_sym x \p L. 00058 * This can be used directly in an interpolating FIR filter such as 00059 * gr_interp_fir_filter_fff with interpolation factor \p samples_per_sym. 00060 * 00061 * All phase responses are normalised s.t. \f$ \sum_{k=0}^{K-1} g(k) = 1\f$; this will cause 00062 * a maximum phase change of \f$ h \cdot \pi\f$ between two symbols, where \a h is the 00063 * modulation index. 00064 * 00065 * The following phase responses can be generated: 00066 * - LREC: Rectangular phase response. 00067 * - LRC: Raised cosine phase response, looks like 1 - cos(x). 00068 * - LSRC: Spectral raised cosine. This requires a rolloff factor beta. 00069 * The phase response is the Fourier transform of raised cosine 00070 * function. 00071 * - TFM: Tamed frequency modulation. This scheme minimizes phase change for 00072 * rapidly varying input symbols. 00073 * - GAUSSIAN: A Gaussian phase response. For a modulation index h = 1/2, this 00074 * results in GMSK. 00075 * 00076 * A short description of all these phase responses can be found in [1]. 00077 * 00078 * [1]: Anderson, Aulin and Sundberg; Digital Phase Modulation 00079 */ 00080 static std::vector<float> 00081 phase_response(cpm_type type, unsigned samples_per_sym, unsigned L, double beta=0.3); 00082 }; 00083 } // namespace analog 00084 } // namespace gr 00085 00086 #endif /* INCLUDED_ANALOG_CPM_H */ 00087