GNU Radio 3.5.1 C++ API
|
00001 /* -*- c++ -*- */ 00002 /* 00003 * Copyright 2010 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_GR_CPM_H 00023 #define INCLUDED_GR_CPM_H 00024 00025 #include <gr_core_api.h> 00026 #include <vector> 00027 00028 class GR_CORE_API gr_cpm 00029 { 00030 public: 00031 enum cpm_type { 00032 LRC, 00033 LSRC, 00034 LREC, 00035 TFM, 00036 GAUSSIAN, 00037 GENERIC = 999 00038 }; 00039 00040 /*! \brief Return the taps for an interpolating FIR filter (gr_interp_fir_filter_fff). 00041 * 00042 * These taps represent the phase response \f$g(k)\f$ for use in a CPM modulator, 00043 * see also gr_cpmmod_bc. 00044 * 00045 * \param type The CPM type (Rectangular, Raised Cosine, Spectral Raised Cosine, 00046 * Tamed FM or Gaussian). 00047 * \param samples_per_sym Samples per symbol. 00048 * \param L The length of the phase response in symbols. 00049 * \param beta For Spectral Raised Cosine, this is the rolloff factor. For Gaussian 00050 * phase responses, this the 3dB-time-bandwidth product. For all other 00051 * cases, it is ignored. 00052 * 00053 * Output: returns a vector of length \a K = \p samples_per_sym x \p L. 00054 * This can be used directly in an interpolating FIR filter such as 00055 * gr_interp_fir_filter_fff with interpolation factor \p samples_per_sym. 00056 * 00057 * All phase responses are normalised s.t. \f$ \sum_{k=0}^{K-1} g(k) = 1\f$; this will cause 00058 * a maximum phase change of \f$ h \cdot \pi\f$ between two symbols, where \a h is the 00059 * modulation index. 00060 * 00061 * The following phase responses can be generated: 00062 * - LREC: Rectangular phase response. 00063 * - LRC: Raised cosine phase response, looks like 1 - cos(x). 00064 * - LSRC: Spectral raised cosine. This requires a rolloff factor beta. 00065 * The phase response is the Fourier transform of raised cosine 00066 * function. 00067 * - TFM: Tamed frequency modulation. This scheme minimizes phase change for 00068 * rapidly varying input symbols. 00069 * - GAUSSIAN: A Gaussian phase response. For a modulation index h = 1/2, this 00070 * results in GMSK. 00071 * 00072 * A short description of all these phase responses can be found in [1]. 00073 * 00074 * [1]: Anderson, Aulin and Sundberg; Digital Phase Modulation 00075 */ 00076 static std::vector<float> 00077 phase_response(cpm_type type, unsigned samples_per_sym, unsigned L, double beta=0.3); 00078 }; 00079 00080 #endif /* INCLUDED_GR_CPM_H */ 00081