设计FIR滤波器,编写滤波的C语言程序 1.在Matlab中设计FIR滤波器(fdatool)(15阶) 2.在Matlab中生成信号(1024点) 3.在CCS中编写C语言滤波程序,并对上述数据进行滤波
时间: 2024-04-30 09:18:02 浏览: 140
1. 在Matlab中设计FIR滤波器(fdatool)(15阶)
步骤如下:
1) 打开MATLAB
2) 输入“fdatool”命令,打开 Filter Design and Analysis 工具箱
3) 在 Filter Type 中选择 FIR
4) 在 Design Method 中选择 Parks-McClellan Algorithm
5) 在 Sampling Frequency 中输入信号的采样频率
6) 在 Passband Ripple 中输入通带最大衰减量
7) 在 Stopband Attenuation 中输入阻带最小衰减量
8) 在 Frequency Specifications 中输入通带和阻带的频率范围
9) 在 Design Parameters 中选择滤波器的阶数
10) 单击 Design 按钮,生成滤波器系数
2. 在Matlab中生成信号(1024点)
在MATLAB中输入以下代码生成长度为1024的正弦信号:
```matlab
Fs = 1000; %采样频率
t = 0:1/Fs:1-1/Fs; %时间向量
f = 50; %信号频率
x = 0.7*sin(2*pi*f*t); %生成正弦信号
```
3. 在CCS中编写C语言滤波程序,并对上述数据进行滤波
在CCS中编写C语言滤波程序,将上述生成的滤波器系数导入程序中,并对生成的信号进行滤波,代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 1024 // 信号长度
// FIR滤波器系数
float h[15] = {0.0103, 0.0251, 0.0446, 0.0622, 0.0706, 0.0622, 0.0446, 0.0251, 0.0103};
int main(void)
{
float x[N]; // 输入信号
float y[N]; // 输出信号
// 生成信号
float Fs = 1000; //采样频率
float t = 0; //时间变量
float f = 50; //信号频率
float dt = 1/Fs; //采样时间间隔
for(int i=0; i<N; i++)
{
x[i] = 0.7*sin(2*M_PI*f*t); //生成正弦信号
t += dt;
}
// FIR滤波器
for(int i=0; i<N; i++)
{
y[i] = 0;
for(int j=0; j<15; j++)
{
if(i-j >= 0)
{
y[i] += h[j] * x[i-j];
}
}
}
// 输出结果
for(int i=0; i<N; i++)
{
printf("%f\n", y[i]);
}
return 0;
}
```
运行程序后,程序会输出滤波后的信号。
阅读全文