JAVA实现MATLAB中的 filter函数

MATLAB中的filter(1维数字滤波器)函数

 1、语法:

             y = filter(b,a,x)

 2、说明:

       y = filter(b,a,x) 使用由分子和分母系数 b 和 a 定义的有理传递函数 对输入数据 x 进行滤波。
如果 a(1) 不等于 1,则 filter 按 a(1) 对滤波器系数进行归一化。因此,a(1) 必须是非零值。
       1. 如果 x 为向量,则 filter 将滤波后数据以大小与 x 相同的向量形式返回。
       2. 如果 x 为矩阵,则 filter 沿着第一维度操作并返回每列的滤波后的数据。
       3. 如果 x 为多维数组,则 filter 沿大小不等于 1 的第一个数组维度进行计算。

3、输入参数

3.1、b — 有理传递函数的分子系数
向量

有理传递函数的分子系数,指定为向量。

数据类型: 

double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical
复数支持: 

3.2、a — 有理传递函数的分母系数
向量

有理传递函数的分母系数,指定为向量。

数据类型: 

double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical
复数支持: 

3.3、x — 输入数据
向量 | 矩阵 | 多维数组

输入数据,指定为向量、矩阵或多维数组。

数据类型: 

double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical
复数支持: 

4、有理传递函数

Z 变换域中这种 filter 运算的输入-输出说明是一种有理传递函数。有理传递函数采用如下形式:

,可同时处理 FIR 和 IIR 滤波器 [1]na 是反馈滤波器阶数,nb 是前馈滤波器阶数。由于归一化,假定 a(1) = 1。

还可以将有理传递函数表示为以下差分方程:

此外,也可以使用如下图所示的 direct-form II 转置实现表示有理传递函数。此处,

na = nb = n-1。

Block diagram that illustrates the direct-form II transposed implementation of an IIR digital filter with order n-1.

filter 在样本 m 处的运算由时域差分方程给定

 5、MATLAB实例

matlab代码:

clear;
close all;
clc;
%选择要用的数据并导入
filepath=strcat('******');
x=xlsread(filepath,"***");
y=x;
%对数据进行归一化处理
y= y/max(y); 
%采样频率
samplerate = 25600;
%带通截止频率
fbpl = 10; 
fbph = samplerate/2-1;
%带通滤波器
w1=fbpl/(samplerate/2);
w2=fbph/(samplerate/2);
[b2,a2]=butter(2,[w1 w2],'bandpass');
%进行带通滤波
outData=filter(b2,a2,y); 

 运行如上代码:

         注:右侧数据为导入数据

 运行结果:

        注:右侧为给导入数据做带通滤波后的数据

 下面让我们来看JAVA代码:

如图所示:我们导入了和MATLAB一致的数据

 运行:

double[] litFilter=filter2(BandpassB,BandpassA,MaxList);后的结果如下图:

//带通滤波参数
        double[] BandpassA=new double[5];
        double[] BandpassB=new double[5];
        if (SampleRate==25600){
            BandpassA[0]=1;
            BandpassA[1]=0.003123898595380;
            BandpassA[2]=-1.996177032017240;
            BandpassA[3]=-0.003111993949613;
            BandpassA[4]=0.996189177160662;
            BandpassB[0]=0.998092769815188;
            BandpassB[1]=0;
            BandpassB[2]=-1.996185539630380;
            BandpassB[3]=0;
            BandpassB[4]=0.998092769815188;
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Demon丶翊宸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值