#include <stdio.h> #include <math.h> #define pi 3.1415 #define N 11 //N为滤波器的阶数+1 #define LEN 512 int inputdata[LEN]; //假设数据的长度为512 int outputdata[LEN]; long int yn; //yn为int的话,在运算中数据可能会溢出,从而滤波失败 const int B[N] ={-166, 0, 1374, 0, -9453, 16279, -9453, 0, 1374, 0, -166}; //FIR滤波器的参数,由MATLAB生成 int main(void) { int f1,f2,fs,i,j,n; int *a; f1=100; //频率分量1(Hz) f2=300; //频率分量2(Hz) fs=800; //采样频率(Hz) for(n=0;n<LEN;n++) { inputdata[n]=sin(2*pi*f1*n/fs) + sin(2*pi*f2*n/fs); //产生信号 } for(j=0;j<LEN;j++) //根据公式来进行滤波 { a=&inputdata[j]; yn=0; for(i=0;i<N;i++) { yn=yn+B[i]*(*a++); } outputdata[j]=yn>>16; //滤波后信号 } while(1); }在这个基于DSP的CCS5c语言程序实现的FIR低通滤波器的基础上修改程序,实现其他频率的低通,高通,带通,带阻滤波器
时间: 2024-02-01 15:03:37 浏览: 78
C标准库函数集
5星 · 资源好评率100%
要实现其他频率的滤波器,需要修改滤波器的参数B[N]。以下是各种滤波器的参数,具体实现方法同原程序:
- 低通滤波器:截止频率为f,参数B[N]由MATLAB生成
```c
const int B[N] = { /* 根据MATLAB生成的参数 */ };
```
- 高通滤波器:截止频率为f,参数B[N]由MATLAB生成
```c
const int B[N] = { /* 根据MATLAB生成的参数 */ };
```
- 带通滤波器:截止频率为f1和f2,参数B[N]由MATLAB生成
```c
const int B[N] = { /* 根据MATLAB生成的参数 */ };
```
- 带阻滤波器:截止频率为f1和f2,参数B[N]由MATLAB生成
```c
const int B[N] = { /* 根据MATLAB生成的参数 */ };
```
需要注意的是,修改滤波器参数时需要先使用MATLAB或其他工具生成新的参数,然后将其复制到程序中。
阅读全文