#include"math.h" #define IIRNUMBER 2 #define SIGNAL1F 1000 #define SIGNAL2F 4500 #define SAMPLEF 10000 #define PI 3.1415926 float InputWave(); float IIR(); float fBn[IIRNUMBER]={ 0.0,0.7757 }; float fAn[IIRNUMBER]={ 0.1122,0.1122 }; float fXn[IIRNUMBER]={ 0.0 }; float fYn[IIRNUMBER]={ 0.0 }; float fInput,fOutput; float fSignal1,fSignal2; float fStepSignal1,fStepSignal2; float f2PI; int i; float fIn[256],fOut[256]; int nIn,nOut; main() { nIn=0; nOut=0; f2PI=2*PI; fSignal1=0.0; fSignal2=PI*0.1; // fStepSignal1=2*PI/30; // fStepSignal2=2*PI*1.4; fStepSignal1=2*PI/50; fStepSignal2=2*PI/2.5; while ( 1 ) { fInput=InputWave(); fIn[nIn]=fInput; nIn++; nIn%=256; fOutput=IIR(); fOut[nOut]=fOutput; nOut++; /* 请在此句上设置软件断点 */ if ( nOut>=256 ) { nOut=0; } } } float InputWave() { for ( i=IIRNUMBER-1;i>0;i-- ) { fXn[i]=fXn[i-1]; fYn[i]=fYn[i-1]; } fXn[0]=sin(fSignal1)+cos(fSignal2)/6.0; fYn[0]=0.0; fSignal1+=fStepSignal1; if ( fSignal1>=f2PI ) fSignal1-=f2PI; fSignal2+=fStepSignal2; if ( fSignal2>=f2PI ) fSignal2-=f2PI; return(fXn[0]); } float IIR() { float fSum; fSum=0.0; for ( i=0;i<IIRNUMBER;i++ ) { fSum+=(fXn[i]*fAn[i]); fSum+=(fYn[i]*fBn[i]); } return(fSum); }逐行注释代码
时间: 2023-10-15 13:06:52 浏览: 95
#define宏定义——只替换,不计算! #define VS typedef
注释如下:
```c++
#include "math.h" // 头文件
#define IIRNUMBER 2 // IIR滤波器阶数
#define SIGNAL1F 1000 // 输入信号1频率
#define SIGNAL2F 4500 // 输入信号2频率
#define SAMPLEF 10000 // 采样频率
#define PI 3.1415926 // 圆周率
float InputWave(); // 生成输入信号的函数
float IIR(); // IIR滤波器函数
float fBn[IIRNUMBER] = { 0.0,0.7757 }; // IIR滤波器的b系数
float fAn[IIRNUMBER] = { 0.1122,0.1122 }; // IIR滤波器的a系数
float fXn[IIRNUMBER] = { 0.0 }; // IIR滤波器的x输入缓存
float fYn[IIRNUMBER] = { 0.0 }; // IIR滤波器的y输出缓存
float fInput, fOutput; // 输入和输出信号
float fSignal1, fSignal2; // 输入信号1和2的相位
float fStepSignal1, fStepSignal2; // 输入信号1和2的相位步长
float f2PI; // 2倍圆周率
int i; // 循环变量
float fIn[256], fOut[256]; // 输入和输出信号的缓存
int nIn, nOut; // 输入和输出信号的缓存指针
int main() {
nIn = 0;
nOut = 0;
f2PI = 2 * PI;
fSignal1 = 0.0;
fSignal2 = PI * 0.1;
fStepSignal1 = 2 * PI / 50;
fStepSignal2 = 2 * PI / 2.5;
while (1) {
fInput = InputWave(); // 生成输入信号
fIn[nIn] = fInput; // 存入输入信号缓存
nIn++;
nIn %= 256;
fOutput = IIR(); // IIR滤波器处理输入信号
fOut[nOut] = fOutput; // 存入输出信号缓存
nOut++; // 输出信号缓存指针加1
if (nOut >= 256) {
nOut = 0; // 如果输出信号缓存溢出,则指针重置为0
}
}
}
float InputWave() {
for (i = IIRNUMBER - 1; i > 0; i--) {
fXn[i] = fXn[i - 1]; // 输入信号缓存往后移动一位
fYn[i] = fYn[i - 1]; // 输出信号缓存往后移动一位
}
fXn[0] = sin(fSignal1) + cos(fSignal2) / 6.0; // 生成输入信号
fYn[0] = 0.0;
fSignal1 += fStepSignal1; // 更新输入信号1相位
if (fSignal1 >= f2PI) fSignal1 -= f2PI;
fSignal2 += fStepSignal2; // 更新输入信号2相位
if (fSignal2 >= f2PI) fSignal2 -= f2PI;
return (fXn[0]); // 返回输入信号
}
float IIR() {
float fSum;
fSum = 0.0;
for (i = 0; i < IIRNUMBER; i++) {
fSum += (fXn[i] * fAn[i]); // 计算x输入的加权和
fSum += (fYn[i] * fBn[i]); // 计算y输出的加权和
}
return (fSum); // 返回IIR滤波器输出
}
```
阅读全文