matlab 设计巴特沃茨滤波器,然后在c++中使用

一、用matlab设计巴特沃茨滤波器


%1 低通
fd = 10;%hz  截止频率
fs = 167;%hz  采样频率
wn = fd/(0.5*fs);

%butter 第一个参数为阶数,下面使用的是一阶
[a b]= butter(1,wn,'low')  

%2 高通
fd = 10;%hz  截止频率
fs = 167;%hz  采样频率
wn = fd/(0.5*fs);
[c d]= butter(1,wn,'high')

%小测试
t = 0:1/fs:1;
x = cos(2*pi*45*t);
y = filter(a, b,x);
plot(t,y,'r-');hold on;
plot(t,x,'b-');
grid on;

二、在c++中使用滤波器系数
Eigen::Vector3d bufferLow(const Eigen::Vector3d vec) {
    static Eigen::Vector3d yn_1(0,0,0), xn_1(0,0,0);
    static const double ac[] = { 0.1599 ,   0.1599 };
    static const double bc[] = { 1.0000 ,   -0.6801 };

    Eigen::Vector3d yn = ac[0] * vec + ac[1] * xn_1 - bc[1] * yn_1 ;
    yn_1 = yn;
    xn_1 = vec;
    return yn;
}


Eigen::Vector3d bufferHig(const Eigen::Vector3d vec) {
    static Eigen::Vector3d yn_1(0, 0, 0), xn_1(0, 0, 0);
    static const double ac[] = { 0.8401, - 0.8401 };
    static const double bc[] = { 1.0000 , -0.6801 };

    Eigen::Vector3d yn =   ac[0] * vec + ac[1] * xn_1 - bc[1] * yn_1;
    yn_1 = yn;
    xn_1 = vec;
    return yn;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值