📄 rec_signal.h
字号:
//------------------------------------------------------------------------------
//
// REC_signal.h
//
// Purpose:
//
// signal declearation for DSP
//
// Reference:
//
//
// Notes:
//
// This software is protected by national and international copyright.
// Any unauthorized use, reproduction or modificaton is unlawful and
// will be prosecuted. Commercial and non-private application of the
// software in any form is strictly prohibited unless otherwise granted
// by the authors.
//
// The code is provided without any warranty; without even the implied
// warranty of merchantibility or fitness for a particular purpose.
//
// Last modified:
//
// 2007/11/04 YI Weiyong (1st edition)
//
// (c) 2007-2009 YI Weiyong
//
//------------------------------------------------------------------------------
#ifndef INC_SIGNAL_H
#define INC_SIGNAL_H
#include <iostream>
typedef int accuracy;
class CSignal{
public:
friend class CFixedFFT;
// constructor & destructor
CSignal():m_n(0)
{
data = 0;
};
CSignal(unsigned int _n);
CSignal(accuracy *p, unsigned int _n);
CSignal(const CSignal& _sig);
~CSignal();
// Assignment
CSignal& operator=(const accuracy _val);
CSignal& operator=(const CSignal& _sig);
void Set(int *p, unsigned int _n);
// Component access
accuracy operator () (int i) const {return data[i];};
accuracy& operator () (int i) {return data[i];};
// methods
unsigned int size() const {return m_n;};
void Resize(unsigned int _n);
CSignal Resample(double factor);
void Resample(CSignal& ReSampledSig, double factor);
void ZeroPadding(const unsigned int& numberOfZeros = 0);
CSignal slice(int first, int last) const;
void shift(int n);
CSignal PSD();
accuracy Max(int& _Index);
accuracy Max();
int MaxIndex();
void ZeroDC();
accuracy Mean();
void PassFIR(const CSignal& _coef_b);
// friend functions
friend long Correlate(const CSignal& _sig1, const CSignal& _sig2, int delay = 0);
friend std::ostream& operator << (std::ostream& os, const CSignal& Vec);
friend CSignal ShiftProd(const CSignal& _sig1, const CSignal& _sig2, int delay = 0);
friend CSignal Sine(double freq, double fs, double start =0.0, int n = 100, int scale=1024);
friend CSignal Stack(const CSignal& _sig1, const CSignal& _sig2);
friend CSignal operator * (const CSignal& _sig1, const CSignal& _sig2);
friend CSignal operator * (const CSignal& _sig1, const accuracy& _val);
friend CSignal operator + (const CSignal& _sig1, const CSignal& _sig2);
friend CSignal operator - (const CSignal& _sig1, const CSignal& _sig2);
friend CSignal operator - (const CSignal& _sig1, const accuracy& _val);
friend CSignal CACode(unsigned int PRN);
friend CSignal Randn(unsigned int n, double variance=1.0, double scale=1024);
friend CSignal operator - (const CSignal& _sig);
friend CSignal sig_sqrt(const CSignal& _sig);
friend CSignal Magnitude(const CSignal& _sig1, const CSignal& _sig2);
friend CSignal ZeroDC(const CSignal& _sig);
friend void fft(CSignal& _real, CSignal& _imag, int sign=1);
// Elements
private:
unsigned int m_n; // the dimension of the FFT
accuracy *data;
};
int fix_sqrt (int x);
int rss (int a, int b);
int fix_atan2 (int y, int x);
//template <class type1=float>
void fft(float *reel, float *imag, int mm, int sign=1);
//------------------------------------------------------------------------------
//
// CFixedFFaccuracy (class definition)
//
// Purpose:
//
// Fixed point fast fourier transform
//
//------------------------------------------------------------------------------
class CFixedFFT{
public:
// constructor & destructor
CFixedFFT():m_n(0), EXP(0)
{Sinewave = 0; };
CFixedFFT(unsigned int _n);
~CFixedFFT();
// methods
int CFixedFFT::FFT(CSignal& _re, CSignal& _im, short _scale=0);
private:
unsigned int m_n; // the dimension of the FFT
unsigned int EXP; // log2(m_n)
int *Sinewave; // real part of twiddle factor lookup table
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -