巴特沃斯滤波器c语言

合集下载

低通巴特沃斯滤波C语言实现

低通巴特沃斯滤波C语言实现

低通巴特沃斯滤波C语言实现巴特沃斯滤波是一种常见的信号处理滤波器,能够将高频信号从输入信号中滤除,只保留低频信号。

它在信号处理、音频信号处理、图像处理等领域有广泛的应用。

下面是一个使用C语言实现的低通巴特沃斯滤波器的例子。

首先,我们需要定义一些常量和变量来表示滤波器的参数和状态。

我们将使用一个全局变量来保存滤波器的历史输入和输出数据:```c#define FILTER_ORDER 4 // 滤波器阶数#define FILTER_CUTOFF 200 // 截止频率,单位为Hzdouble input[FILTER_ORDER + 1]; // 输入历史数据double output[FILTER_ORDER + 1]; // 输出历史数据```接下来,我们需要初始化滤波器的历史数据。

这里使用一个函数来完成初始化操作:```cvoid initFiltefor (int i = 0; i <= FILTER_ORDER; i++)input[i] = 0.0;output[i] = 0.0;}```接下来,我们需要定义一个滤波函数来实现滤波的操作。

这里使用递归计算方式来实现滤波:```cdouble filter(double x)//更新历史输入数据for (int i = FILTER_ORDER; i > 0; i--)input[i] = input[i-1];}input[0] = x;//更新历史输出数据for (int i = FILTER_ORDER; i > 0; i--)output[i] = output[i-1];}//计算输出output[0] = (input[0] + 2 * input[1] + input[2] -(0.7408 * output[1]) - (0.2042 * output[2])) /1.3403;return output[0];```在上面的代码中,我们使用了巴特沃斯低通滤波器的差分方程来实现滤波。

巴特沃斯滤波器c语言

巴特沃斯滤波器c语言

1. 模拟滤波器的设计1.1巴特沃斯滤波器的次数根据给定的参数设计模拟滤波器,然后进行变数变换,求取数字滤波器的方法,称为滤波器的间接设计。

做为数字滤波器的设计基础的模拟滤波器,称之为原型滤波器。

这里,我们首先介绍的是最简单最基础的原型滤波器,巴特沃斯低通滤波器。

由于IIR滤波器不具有线性相位特性,因此不必考虑相位特性,直接考虑其振幅特性。

在这里,N是滤波器的次数,Ωc是截止频率。

从上式的振幅特性可以看出,这个是单调递减的函数,其振幅特性是不存在纹波的。

设计的时候,一般需要先计算跟所需要设计参数相符合的次数N。

首先,就需要先由阻带频率,计算出阻带衰减将巴特沃斯低通滤波器的振幅特性,直接带入上式,则有最后,可以解得次数N为当然,这里的N只能为正数,因此,若结果为小数,则舍弃小数,向上取整。

1.2巴特沃斯滤波器的传递函数巴特沃斯低通滤波器的传递函数,可由其振幅特性的分母多项式求得。

其分母多项式根据S解开,可以得到极点。

这里,为了方便处理,我们分为两种情况去解这个方程。

当N 为偶数的时候,这里,使用了欧拉公式。

同样的,当N为奇数的时候,同样的,这里也使用了欧拉公式。

归纳以上,极点的解为上式所求得的极点,是在s平面内,在半径为Ωc的圆上等间距的点,其数量为2N个。

为了使得其IIR滤波器稳定,那么,只能选取极点在S平面左半平面的点。

选定了稳定的极点之后,其模拟滤波器的传递函数就可由下式求得。

1.3巴特沃斯滤波器的实现(C语言)首先,是次数的计算。

次数的计算,我们可以由下式求得。

其对应的C语言程序为1.N = Ceil(0.5*( log10 ( pow (10, Stopband_attenuation/10) - 1) /2. log10 (Stopband/Cotoff) ));然后是极点的选择,这里由于涉及到复数的操作,我们就声明一个复数结构体就可以了。

最重要的是,极点的计算含有自然指数函数,这点对于计算机来讲,不是太方便,所以,我们将其替换为三角函数,这样的话,实部与虚部就还可以分开来计算。

二维巴特沃斯滤波器c语言

二维巴特沃斯滤波器c语言

二维巴特沃斯滤波器1. 简介二维巴特沃斯滤波器是一种常用的图像处理方法,用于对图像进行频域滤波。

它基于巴特沃斯滤波器的原理,在频域中对图像进行平滑或增强。

本文将详细介绍二维巴特沃斯滤波器的原理、实现步骤以及应用案例。

2. 巴特沃斯滤波器原理巴特沃斯滤波器是一种频率域滤波器,通过调整截止频率和阶数来控制信号的频率响应。

其传输函数可以表示为:H (u,v )=11+(D (u,v )D 0)2n其中,D (u,v ) 是图像中每个点到中心点的距离,D 0 是截止频率,n 是阶数。

当 n 取不同值时,巴特沃斯滤波器可以实现不同程度的平滑或增强效果。

当 n >1 时,增加了阶数可以使得低频信号更加平坦;当 n <1 时,减小了阶数可以使得低频信号更加突出。

3. 实现步骤二维巴特沃斯滤波器的实现步骤如下:步骤 1:读取图像首先,需要从文件中读取待处理的图像。

可以使用 C 语言中的图像处理库,如 OpenCV ,来实现图像读取功能。

#include <opencv2/opencv.hpp>int main() {// 读取图像cv::Mat image = cv::imread("input.jpg", cv::IMREAD_GRAYSCALE);// 其他处理步骤...return 0;}步骤 2:进行傅里叶变换将读取的图像进行傅里叶变换,得到频域表示。

可以使用 OpenCV 提供的函数dft 来实现傅里叶变换。

#include <opencv2/opencv.hpp>int main() {// 读取图像cv::Mat image = cv::imread("input.jpg", cv::IMREAD_GRAYSCALE);// 进行傅里叶变换cv::Mat frequencyDomain;cv::dft(image, frequencyDomain, cv::DFT_COMPLEX_OUTPUT);// 其他处理步骤...return 0;}步骤 3:生成巴特沃斯滤波器根据巴特沃斯滤波器的传输函数公式,可以生成巴特沃斯滤波器的频域表示。

二阶巴特沃斯低通滤波器 c语言

二阶巴特沃斯低通滤波器 c语言

二阶巴特沃斯低通滤波器 c语言二阶巴特沃斯低通滤波器是一种常用的电子滤波器,主要用于信号处理和电路设计中。

它可以有效地滤除高频信号,保留低频信号,使得输出信号更加平滑和稳定。

本文将介绍二阶巴特沃斯低通滤波器的原理和C语言实现方法。

一、二阶巴特沃斯低通滤波器原理巴特沃斯滤波器是一种无失真滤波器,其特点是在通带中具有最大平坦度,而在阻带中具有最小衰减。

二阶巴特沃斯低通滤波器是一种二阶滤波器,可以通过调整参数来实现不同的滤波效果。

二阶巴特沃斯低通滤波器的传输函数为:H(s) = 1 / (s^2 + s/Q + 1)其中,s为复变量,Q为质量因子,决定了滤波器的带宽和阻带衰减。

通过调整Q的值,可以实现不同的滤波器响应。

二、C语言实现二阶巴特沃斯低通滤波器下面是一个简单的C语言实现二阶巴特沃斯低通滤波器的代码示例:#include <stdio.h>#include <math.h>#define PI 3.1415926typedef struct{double a0, a1, a2; // 分子系数double b0, b1, b2; // 分母系数double x1, x2; // 输入延时double y1, y2; // 输出延时} BiquadFilter;void BiquadFilter_init(BiquadFilter* filter, double cutoff_freq, double sample_rate){double w0 = 2 * PI * cutoff_freq / sample_rate;double alpha = sin(w0) / 2;double a0 = 1 + alpha;double a1 = -2 * cos(w0);double a2 = 1 - alpha;double b0 = (1 - cos(w0)) / 2;double b1 = 1 - cos(w0);double b2 = (1 - cos(w0)) / 2;filter->a0 = b0 / a0;filter->a1 = b1 / a0;filter->a2 = b2 / a0;filter->b1 = -a1 / a0;filter->b2 = -a2 / a0;filter->x1 = 0;filter->x2 = 0;filter->y1 = 0;filter->y2 = 0;}double BiquadFilter_process(BiquadFilter* filter, double input) {double output = filter->a0 * input + filter->a1 * filter->x1 + filter->a2 * filter->x2 - filter->b1 * filter->y1 - filter->b2 * filter->y2;filter->x2 = filter->x1;filter->x1 = input;filter->y2 = filter->y1;filter->y1 = output;return output;}int main(){double cutoff_freq = 1000; // 截止频率double sample_rate = 44100; // 采样率BiquadFilter filter;BiquadFilter_init(&filter, cutoff_freq, sample_rate);double input = 0;double output = 0;// 生成输入信号for (int i = 0; i < 1000; i++){input = sin(2 * PI * 1000 * i / sample_rate);// 进行滤波处理output = BiquadFilter_process(&filter, input);// 输出滤波结果printf("%f\n", output);}return 0;}以上代码实现了一个简单的二阶巴特沃斯低通滤波器。

巴特沃斯滤波器代码

巴特沃斯滤波器代码

巴特沃斯滤波器代码巴特沃斯滤波器是一种常用的信号处理工具,主要用于滤除信号中不需要的频率成分,从而实现信号的去噪或频率调整的目的。

巴特沃斯滤波器的设计和实现都可以通过代码来完成。

下面我们将介绍一种常见的巴特沃斯滤波器的代码实现方法。

巴特沃斯滤波器代码的实现主要包括两个部分:滤波器设计和滤波器应用。

滤波器设计主要是确定滤波器的参数,包括滤波器阶数、截止频率等;滤波器应用则是将滤波器应用到信号上进行滤波处理。

我们需要确定巴特沃斯滤波器的阶数和截止频率。

阶数决定了滤波器的陡峭程度,阶数越高,滤波器的陡峭程度越大;截止频率决定了滤波器的频率特性,截止频率越高,滤波器的通带范围越宽。

然后,我们可以利用巴特沃斯滤波器的设计公式来计算滤波器的系数。

巴特沃斯滤波器的设计公式可以通过巴特沃斯滤波器的特性方程来推导得到。

特性方程是一个一阶或二阶的差分方程,可以表示滤波器的频率响应。

接下来,我们可以编写代码来实现巴特沃斯滤波器的设计。

在代码中,我们可以使用一维数组来存储滤波器的系数,使用循环结构来计算滤波器的系数。

在计算系数的过程中,我们可以利用巴特沃斯滤波器的特性方程来进行计算。

完成滤波器设计后,我们就可以将滤波器应用到信号上进行滤波处理了。

在代码中,我们可以使用循环结构来遍历信号的每个采样点,并根据巴特沃斯滤波器的差分方程来进行滤波处理。

在滤波处理过程中,我们可以使用一维数组来存储滤波后的信号。

我们可以将滤波后的信号进行输出或保存。

在代码中,我们可以使用文件操作或者输出函数来将滤波后的信号输出到文件或者屏幕上。

巴特沃斯滤波器的代码实现可以帮助我们更好地理解和应用巴特沃斯滤波器。

通过自己编写代码来实现滤波器的设计和应用,我们可以更加灵活地调整滤波器的参数,满足不同的滤波要求。

同时,通过代码实现,我们也可以更好地理解滤波器的原理和工作方式,为信号处理的应用提供更多的可能性。

巴特沃斯滤波器的代码实现是一项重要的信号处理技术,在很多领域都有广泛的应用。

二维巴特沃斯滤波器c语言

二维巴特沃斯滤波器c语言

二维巴特沃斯滤波器c语言二维巴特沃斯滤波器:c语言巴特沃斯滤波器是数字信号处理中常用的滤波器之一,它可以用于将输入信号中的高频噪声滤除,从而得到更清晰的信号。

在本文中,我将介绍如何使用c语言实现二维巴特沃斯滤波器。

巴特沃斯滤波器是一种基于极点和零点的滤波器,使用一些预定义的参数来确定滤波器的特性。

对于二维信号,我们可以分别对其行和列进行滤波操作,即实现二维滤波。

首先,我们需要定义滤波器的参数,包括截止频率和阶数。

截止频率是指在该频率以上的信号将被滤除,而阶数则决定了滤波器的衰减速度。

在c语言中,我们可以使用结构体来定义滤波器的参数,如下所示:```ctypedef struct {float cutoff_freq; // 截止频率int order; // 阶数} ButterworthFilterParams;```接下来,我们可以编写一个函数来计算巴特沃斯滤波器的系数。

这个函数将根据给定的截止频率和阶数计算出滤波器的各个系数。

这些系数将用于滤波器的频域计算。

以下是计算系数的函数示例:```cvoid computeButterworthCoefficients(ButterworthFilterParams params, float *b,float *a) {float f = tanf(M_PI * params.cutoff_freq);float r = powf(2.0, 1.0 / params.order);// 计算系数for (int i = 0; i < params.order; i++) {float theta = M_PI * (0.5 + 2.0 * (float)i / (2.0 * params.order));a[i] = 1.0;b[i] = 1.0;b[i] *= powf(f, 2.0);a[i] *= 2.0 * r * cosf(theta) * f;b[i] *= powf(f, 2.0);a[i] /= powf(r, 2.0) + powf((f / params.cutoff_freq), 2.0);b[i] /= powf(r, 2.0) + powf((f / params.cutoff_freq), 2.0f);}}```接下来,我们需要编写一个函数来应用滤波器。

c语言 巴特沃斯带通滤波器 输出分子分母

c语言 巴特沃斯带通滤波器 输出分子分母

C语言巴特沃斯带通滤波器输出分子分母解析一、概述1. 巴特沃斯带通滤波器是信号处理中常用的一种滤波器,其设计和实现需要通过C语言来完成。

二、巴特沃斯带通滤波器概述2. 巴特沃斯滤波器是一种常用的滤波器,其主要特点是在通带内的波形通过它时不至于变得模糊,同时能够很好的抑制噪声和干扰。

3. 带通滤波器是常用的一种滤波器类型,其能够通过设置上下截止频率来保留一定范围内的信号频率。

三、C语言实现巴特沃斯带通滤波器4. C语言是一种高级编程语言,其结构化编程的特点使得其非常适合用于信号处理和滤波器设计。

5. 巴特沃斯带通滤波器的设计和实现需要通过C语言来完成,可以通过设定滤波器的阶数、通带频率和阻带频率来完成。

6. C语言的数学函数库中包括了各种数学函数,如sin、cos等函数,这些函数可以方便地用于巴特沃斯滤波器的设计和实现。

四、巴特沃斯带通滤波器输出的分子分母解析7. 巴特沃斯带通滤波器的传递函数可以表示为一个分子多项式和一个分母多项式的比值,通常用H(s)表示。

8. 巴特沃斯带通滤波器的传递函数可以表示为以下形式:H(s) = K * (s^n / [(s^2 + p1*s + p1^2)*(s^2 + p2*s +p2^2)*...*(s^2 + pn*s + pn^2)])其中,K为常数,n为滤波器阶数,p1、p2、…、pn为阻带频率对应的复数根。

9. 分子多项式和分母多项式分别为滤波器的分子和分母传递函数,它们的值决定了滤波器的性能和特性。

10. 对于巴特沃斯带通滤波器的输出分子分母解析,需要通过C语言编程来完成分母多项式和分子多项式的运算和求解,从而得到滤波器的传递函数。

五、总结11. 巴特沃斯带通滤波器的设计和实现是一个复杂的过程,需要结合C 语言的编程能力和信号处理的知识来完成。

12. 通过C语言实现巴特沃斯带通滤波器的输出分子分母解析,可以更好地理解滤波器的工作原理和性能特性,在实际应用中具有重要意义。

巴特沃斯滤波器c语言实现

巴特沃斯滤波器c语言实现

巴特沃斯滤波器c语言实现一、巴特沃斯滤波器的原理巴特沃斯滤波器是一种常见的滤波器,用于信号处理领域。

它的特点是在通带的频率范围内具有平坦的幅频特性,而在阻带的频率范围内具有陡峭的衰减特性。

巴特沃斯滤波器的设计基于巴特沃斯函数,该函数是一种理想的滤波器幅频响应函数。

通过对巴特沃斯函数进行归一化,我们可以得到具体的巴特沃斯滤波器传递函数。

二、巴特沃斯滤波器的C语言实现下面我们将介绍如何使用C语言来实现巴特沃斯滤波器。

1. 首先,我们需要定义巴特沃斯滤波器的一些参数,包括滤波器阶数、截止频率等。

这些参数可以根据实际需求进行调整。

2. 接下来,我们需要计算巴特沃斯滤波器的传递函数的系数。

这可以通过巴特沃斯函数的表达式进行计算。

在计算过程中,我们可以使用一些数学库函数来辅助计算。

3. 然后,我们需要编写滤波器函数,该函数接受输入信号和滤波器参数作为输入,输出滤波后的信号。

在函数内部,我们可以使用巴特沃斯滤波器的传递函数来实现信号的滤波。

4. 最后,我们可以编写一个主函数来测试巴特沃斯滤波器的性能。

在主函数中,我们可以生成一个测试信号,并调用滤波器函数对该信号进行滤波。

然后,我们可以将滤波后的信号保存到文件中,以便后续的分析和处理。

三、总结本文介绍了巴特沃斯滤波器的原理和C语言实现。

巴特沃斯滤波器是一种常见的滤波器,具有平坦的幅频特性和陡峭的衰减特性。

通过使用C语言,我们可以方便地实现巴特沃斯滤波器,用于信号处理和相关领域。

通过阅读本文,读者可以了解巴特沃斯滤波器的原理和C语言实现的基本步骤。

读者可以根据自己的需求和实际情况,进行巴特沃斯滤波器的参数调整和性能优化。

希望本文对读者能够有所帮助,对巴特沃斯滤波器的理解和应用有所启发。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1. 模拟滤波器的设计1.1巴特沃斯滤波器的次数根据给定的参数设计模拟滤波器,然后进行变数变换,求取数字滤波器的方法,称为滤波器的间接设计。

做为数字滤波器的设计基础的模拟滤波器,称之为原型滤波器。

这里,我们首先介绍的是最简单最基础的原型滤波器,巴特沃斯低通滤波器。

由于IIR滤波器不具有线性相位特性,因此不必考虑相位特性,直接考虑其振幅特性。

在这里,N是滤波器的次数,Ωc是截止频率。

从上式的振幅特性可以看出,这个是单调递减的函数,其振幅特性是不存在纹波的。

设计的时候,一般需要先计算跟所需要设计参数相符合的次数N。

首先,就需要先由阻带频率,计算出阻带衰减将巴特沃斯低通滤波器的振幅特性,直接带入上式,则有最后,可以解得次数N为当然,这里的N只能为正数,因此,若结果为小数,则舍弃小数,向上取整。

1.2巴特沃斯滤波器的传递函数巴特沃斯低通滤波器的传递函数,可由其振幅特性的分母多项式求得。

其分母多项式根据S解开,可以得到极点。

这里,为了方便处理,我们分为两种情况去解这个方程。

当N为偶数的时候,这里,使用了欧拉公式。

同样的,当N为奇数的时候,同样的,这里也使用了欧拉公式。

归纳以上,极点的解为上式所求得的极点,是在s平面内,在半径为Ωc的圆上等间距的点,其数量为2N个。

为了使得其IIR滤波器稳定,那么,只能选取极点在S平面左半平面的点。

选定了稳定的极点之后,其模拟滤波器的传递函数就可由下式求得。

1.3巴特沃斯滤波器的实现(C语言)首先,是次数的计算。

次数的计算,我们可以由下式求得。

其对应的C语言程序为[cpp]view plaincopy1.N = Ceil(0.5*( log10 ( pow (10, Stopband_attenuation/10) - 1) /2. log10 (Stopband/Cotoff) ));然后是极点的选择,这里由于涉及到复数的操作,我们就声明一个复数结构体就可以了。

最重要的是,极点的计算含有自然指数函数,这点对于计算机来讲,不是太方便,所以,我们将其替换为三角函数,这样的话,实部与虚部就还可以分开来计算。

其代码实现为[cpp]view plaincopy1.typedef struct2.{3.double Real_part;4.double Imag_Part;5.} COMPLEX;6.7.PLEX poles[N];9.10.for(k = 0;k <= ((2*N)-1) ; k++)11.{12.if(Cotoff*cos((k+dk)*(pi/N)) < 0)13. {14. poles[count].Real_part = -Cotoff*cos((k+dk)*(pi/N));15.poles[count].Imag_Part= -Cotoff*sin((k+dk)*(pi/N));16. count++;17.if (count == N) break;18. }19.}计算出稳定的极点之后,就可以进行传递函数的计算了。

传递的函数的计算,就像下式一样这里,为了得到模拟滤波器的系数,需要将分母乘开。

很显然,这里的极点不一定是整数,或者来说,这里的乘开需要做复数运算。

其复数的乘法代码如下,[cpp]view plaincopy1.int Complex_Multiple(COMPLEX a,COMPLEX b,2.double *Res_Real,double *Res_Imag)3.4.{5. *(Res_Real) = (a.Real_part)*(b.Real_part) - (a.Imag_Part)*(b.Imag_Part);6. *(Res_Imag)= (a.Imag_Part)*(b.Real_part) + (a.Real_part)*(b.Imag_Part);7.return (int)1;8.}有了乘法代码之后,我们现在简单的情况下,看看其如何计算其滤波器系数。

我们做如下假设这个时候,其传递函数为将其乘开,其大致的关系就像下图所示一样。

计算的关系一目了然,这样的话,实现就简单多了。

高阶的情况下也一样,重复这种计算就可以了。

其代码为[cpp]view plaincopy1. Res[0].Real_part = poles[0].Real_part;2. Res[0].Imag_Part= poles[0].Imag_Part;3. Res[1].Real_part = 1;4. Res[1].Imag_Part= 0;5.6.for(count_1 = 0;count_1 < N-1;count_1++)7.{8.for(count = 0;count <= count_1 + 2;count++)9. {10.if(0 == count)11.{12. Complex_Multiple(Res[count], poles[count_1+1],13. &(Res_Save[count].Real_part),14. &(Res_Save[count].Imag_Part));15. }16.else if((count_1 + 2) == count)17. {18. Res_Save[count].Real_part += Res[count - 1].Real_part;19.Res_Save[count].Imag_Part += Res[count - 1].Imag_Part;20. }21.else22.{23. Complex_Multiple(Res[count], poles[count_1+1],24. &(Res_Save[count].Real_part),25. &(Res_Save[count].Imag_Part));26.1 Res_Save[count].Real_part += Res[count - 1].Real_part;27. Res_Save[count].Imag_Part += Res[count - 1].Imag_Part;28.}29. }30.*(b+N) = *(a+N);到此,我们就可以得到一个模拟滤波器巴特沃斯低通滤波器了。

2.双1次z变换2.1双1次z变换的原理我们为了将模拟滤波器转换为数字滤波器的,可以用的方法很多。

这里着重说说双1次z变换。

我们希望通过双1次z变换,建立一个s平面到z平面的映射关系,将模拟滤波器转换为数字滤波器。

和之前的例子一样,我们假设有如下模拟滤波器的传递函数。

将其做拉普拉斯逆变换,可得到其时间域内的连续微分方程式,其中,x(t)表示输入,y(t)表示输出。

然后我们需要将其离散化,假设其采样周期是T,用差分方程去近似的替代微分方程,可以得到下面结果然后使用z变换,再将其化简。

可得到如下结果从而,我们可以得到了s平面到z平面的映射关系,即由于所有的高阶系统都可以视为一阶系统的并联,所以,这个映射关系在高阶系统中,也是成立的。

然后,将关系式带入上式,可得到这里,我们可以就可以得到Ω与ω的对应关系了。

这里的Ω与ω的对应关系很重要。

我们最终的目的设计的是数字滤波器,所以,设计时候给的参数必定是数字滤波器的指标。

而我们通过间接设计设计IIR滤波器时候,首先是要设计模拟滤波器,再通过变换,得到数字滤波器。

那么,我们首先需要做的,就是将数字滤波器的指标,转换为模拟滤波器的指标,基于这个指标去设计模拟滤波器。

另外,这里的采样时间T的取值很随意,为了方便计算,一般取1s就可以。

2.2双1次z变换的实现(C语言)我们设计好的巴特沃斯低通滤波器的传递函数如下所示。

我们将其进行双1次z变换,我们可以得到如下式子可以看出,我们还是需要将式子乘开,进行合并同类项,这个跟之前说的算法相差不大。

其代码为。

[cpp]view plaincopy1.for(Count = 0;Count<=N;Count++)2. {3.for(Count_Z = 0;Count_Z <= N;Count_Z++)4. {5. Res[Count_Z] = 0;6. Res_Save[Count_Z] = 0;7. }8. Res_Save [0] = 1;9.for(Count_1 = 0; Count_1 < N-Count;Count_1++)10. {11.for(Count_2 = 0; Count_2 <= Count_1+1;Count_2++)12. {13.if(Count_2 == 0) Res[Count_2] += Res_Save[Count_2];14.else if((Count_2 == (Count_1+1))&&(Count_1 != 0))15. Res[Count_2] += -Res_Save[Count_2 - 1];16.else Res[Count_2] += Res_Save[Count_2] - Res_Save[Count_2 - 1];17.for(Count_Z = 0;Count_Z<= N;Count_Z++)18.{19. Res_Save[Count_Z] = Res[Count_Z] ;20.Res[Count_Z] = 0;21.}22. }23.for(Count_1 = (N-Count); Count_1 < N;Count_1++)24. {25.for(Count_2 = 0; Count_2 <= Count_1+1;Count_2++)26. {27.if(Count_2 == 0) Res[Count_2] += Res_Save[Count_2];28.else if((Count_2 == (Count_1+1))&&(Count_1 != 0))29. Res[Count_2] += Res_Save[Count_2 - 1];30.else31. Res[Count_2] += Res_Save[Count_2] + Res_Save[Count_2 - 1];32.}33.for(Count_Z = 0;Count_Z<= N;Count_Z++)34. {35. Res_Save[Count_Z] = Res[Count_Z] ;36. Res[Count_Z] = 0;37. }38. }39.for(Count_Z = 0;Count_Z<= N;Count_Z++)40. {41. *(az+Count_Z) += pow(2,N-Count) * (*(as+Count)) *42.Res_Save[Count_Z];43. *(bz+Count_Z) += (*(bs+Count)) * Res_Save[Count_Z];44. }45. }到此,我们就已经实现了一个数字滤波器。

相关文档
最新文档