滤波器设计--C语言实现
2017-05-14 21:37
288 查看
本文简单介绍,在差分方程已知或滤波器框图给出的情况下,使用C语言实现滤波器的方法。
一. 对一个p阶FIR滤波器(无反馈):
差分方程:
滤波器框图:
float fir_filt(float x, const float *b, float *s, int p) { y = b[0] * x; //对输出y赋初值 for(int i = 0; i <= p; i++) //输出 y += b[i+1] * s[i]; for(int i = p; i > 0; i++) //更新寄存器 s[i] = s[i-1]; s[0] = x; return y; }
二. 对于一个IIR滤波器:
差分方程:
滤波器框图:
float IIR_filt(float x, const float *c, float *s) { float y = c[0] * x + s[0]; //对y赋初值(输出) s[0] = s[1] + c[1]*x - c[3] * y; //更新 s[1] = c[2] * x - c[4] * y; return y; }
三. MATLAB中,Filter函数的C语言实现
在MATLAB中,有这样一个函数dsp.ColoredNoise,从名字看出,该函数用来生成不同颜色的噪声,使用方法:H = dsp.ColoredNoise returns a colored noise generator, H, with default settings. Calling step with the default property settings generates a pink noise signal.
系数取不同值,生成不同色噪:
An InverseFrequencyPower value of 1 generates a pink noise. This is the default value. An InverseFrequencyPower value of 2 generates a Brownian process. An InverseFrequencyPower value of 0 generates a white noise process with a flat PSD. An InverseFrequencyPower value of -1 generates a blue noise process. An InverseFrequencyPower value of -2 generates a violet (purple) noise process.
当value = 1,生成粉噪,根据粉噪生成的原理,将白噪声通过一个全极点滤波器,即可生成粉噪,这里我们讨论如何设计这个IIR全极点(All-poles)滤波器:
差分方程:
滤波器框图:
float all-pole(float *x, float *y, float *s, const float *a, int n, int p) { y = x - a[0] * s[0]; //对y赋初值 for(int i = 0; i < p; i++) //输出 y -= a[i+1] * s[i+1]; for(int i = p; i > 0; i--) //更新 s[i] = s[i-1]; s[0] = y; return y; }
相关文章推荐
- C语言-实现简单的车辆管理系统-课程设计
- 数据结构 c语言设计队列 实现桶式排序和基数排序 测试性能
- C语言实现状态设计模式
- 基于模型设计的FPGA开发与实现:滤波器设计与实现(二)Matlab中滤波器的定点化
- C语言实现设计模式之简单工厂模式(无内存泄露)
- 嵌入式设计模式:有限状态自动机的C语言实现
- 基于C语言的内存池的设计与实现
- 基于C语言的通讯管理系统的设计与实现
- C语言-函数实现模块化设计-函数的递归调用
- 设计模式初探 行为模式 观察者模式 c语言 版本实现
- C语言停车场模拟管理程序的设计与实现
- 椭圆曲线密码的C语言设计与实现
- 单片机中(C语言)IIR滤波器的实现
- 通用线程池的设计和实现[C语言]
- 基于C语言的内存池的设计与实现
- 用Matlab及C语言实现低通滤波器的设计
- 文件传输协议的简单设计与实现(c语言)
- 设计巴特沃思滤波器matlab实现[转载]
- 通过冒泡排序(C语言实现)学习回调函数设计原理
- [置顶] c语言文件读取 学生成绩管理系统的设计与实现