void SigTranmit::Lpf (){ int i;float a=(N-1)/2;float Wn1[N]{};float H10[N]{};switch(Getc()){ case 0:{ for(i=0;i<N;i++)Wn1[i]=1;}break;case 1:{ for(i=0;i<N;i++){ Wn1[i]=0.5*(1.0-cos(2.0PIi/(N-1)));}}break;case 2:{for(i=0;i<N;i++)Wn1[i]=0.54-0.46cos(2.0PIi/(N-1));}break;case 3:{ for(i=0;i<N;i++)Wn1[i]=0.42-0.5cos(2.0PIi/(N-1))+0.08cos(4.0PIi/(N-1));};}for(i=0;i<N;i++) //生成理想低通滤波器的单位取样响应{if(i==a) H10[i]=0.1;else H10[i]=sin(2PIfh/freq(i-a))/(float)(PI*(i-a));} for(i=0;i<N;i++) H10[i]=H10[i]Wn1[i]; for(i=0;i<N;i++) H1[i]=H10[i];Conv(Sa,GetH1());//卷积Dft(Sa,21M);}
时间: 2023-06-23 20:43:29 浏览: 200
这段代码是一个C++函数,以下是对其的简要注释:
- `void SigTranmit::Lpf ()` 是函数的定义,返回值为空,属于类 `SigTranmit` 的成员函数 `Lpf`。
- `int i;float a=(N-1)/2;float Wn1[N]{};float H10[N]{};` 定义了3个变量:整型变量 i,浮点型变量 a,以及两个长度为 N 的浮点型数组 Wn1 和 H10,它们都初始化为 0。
- `switch(Getc()){...}` 是一个 switch 语句,根据函数 `Getc()` 的返回值来执行不同的分支。在每个分支中,对数组 Wn1 进行不同的赋值操作。
- `for(i=0;i<N;i++) {...}` 是一个 for 循环,用于生成理想低通滤波器的单位取样响应 H10。其中,if 分支用于处理取样点为 a 时的情况,else 分支则用于处理其他取样点的情况。在 else 分支中,对 H10 数组进行赋值操作。
- `for(i=0;i<N;i++) H10[i]=H10[i]*Wn1[i];` 是一个 for 循环,用于将 H10 数组和 Wn1 数组进行元素级别的乘法运算。
- `for(i=0;i<N;i++) H1[i]=H10[i];Conv(Sa,GetH1());Dft(Sa,21*M);` 是一系列函数调用,用于进行卷积和傅里叶变换的操作。其中,函数 `Conv` 用于对输入信号和滤波器进行卷积运算,函数 `GetH1` 返回 H10 数组的指针。函数 `Dft` 用于对卷积结果进行 M 点的傅里叶变换,其中 M=21*N。
阅读全文