📄 rrcfilter.cpp
字号:
/******************************************************************************
* RRcFilter -- simulates a root raised cosine filter(64 taps, RECT. window) *
* Functions -- conv() *
* Returns -- the corresponding output *
******************************************************************************/
/* Impulse response of a root raised cosine filter */
const NumTabs = 64;
const double h[NumTabs]= { -0.2446, -0.1844, 0.0000, 0.2108,
0.3199, 0.2433, 0.0000, -0.2841,
-0.4362, -0.3360, 0.0000, 0.4037,
0.6301, 0.4942, 0.0000, -0.6190,
-0.9901, -0.7983, 0.0000, 1.0692,
1.7822, 1.5079, 0.0000, -2.2912,
-4.1584, -3.9206, 0.0000, 8.4012,
20.7919, 35.2850, 48.9898, 58.8084,
58.8084, 48.9898, 35.2850, 20.7919,
8.4012, 0.0000, -3.9206, -4.1584,
-2.2912, 0.0000, 1.5079, 1.7822,
1.0692, 0.0000, -0.7983, -0.9901,
-0.6190, 0.0000, 0.4942, 0.6301,
0.4037, 0.0000, -0.3360, -0.4362,
-0.2841, 0.0000, 0.2433, 0.3199,
0.2108, 0.0000, -0.1844, -0.2446
}; /* 64 taps; T=1/2400 */
class RRcFilter
{
private:
double ProcessingBuffer[NumTabs];
void LeftShift(double x);
public:
RRcFilter()
{ for (int i=0; i<NumTabs; ++i) ProcessingBuffer[i]=0; }
double conv(double x);
};
void RRcFilter::LeftShift(double x)
{ for (int i=0; i<(NumTabs-1); ++i) ProcessingBuffer[i]=ProcessingBuffer[i+1];
ProcessingBuffer[NumTabs-1]=x;
}
double RRcFilter::conv(double x)
{ double temp=0;
LeftShift(x); /* left shift one sample */
for (int i=0; i<NumTabs; ++i) temp=temp+h[i]*ProcessingBuffer[NumTabs-1-i];
return temp;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -