采样频率变化时,滤波器的性能会变差吗?


一、问题来源

飞控需要采集加速度计与陀螺仪数据进行低通滤波,一般以1kHz频率采集,即采样频率为1kHz。使用二阶巴特沃兹低通滤波器进行滤波,截至频率可设置为20Hz。

滤波器的输入参数一般是采样频率、截至频率及采样数据。在程序实际运行过程中,采样频率可能会变化,比如有时500Hz,有时1.5kHz,如果一致设置为采样频率与截至频率不变,采样频率变化时数据会怎样呢,是否有必要根据时间间隔实时调整采样频率?


二、实验与分析

设计以下三个实验分析,首先统一说明:

  1. 所有滤波器截至频率都是20Hz,不再说明;
  2. 有用信号为周期为

    2

    π

    2\pi

    2π,幅度为

    1

    1

    1 的正弦信号;

  3. 噪声为均匀分布在

    [

    0.1

    ,

    0.1

    ]

    [-0.1, 0.1]

    [0.1,0.1] 之间的白噪声;

2.1 信号采样频率固定,滤波器采样频率变化

设计滤波器采样频率分别为 5kHz,1kHz和200Hz,这样根据采样频率和截至频率,可以设计出三个不同的滤波器。然而,信号的采样频率为1kHz,将信号分别通过这三个滤波器,比较其滤波效果。结果如下:

可见,使用采样率为5kHz设计的滤波器,直线很光滑,但是延迟较大,大约 60ms。使用采样率为200Hz设计的滤波器,延迟小,但噪声大。考虑到噪声的峰峰值为0.2,比如在0.3s附近,带噪声的信号范围为[0.2,0.4],按200Hz设计的滤波器还是有一定的滤波效果。使用1kHz设计的刚好和信号采样频率一致的滤波器,在噪声和延迟间取得了较好的平衡。

2.2 滤波器采用频率固定,信号采样频率变化

设计采样率为1kHz的滤波器,但是输入信号的采样率分别为 5kHz,1kHz和200Hz。将三种信号分别通过此滤波器,其滤波器效果。结果如下:

可见,信号采样频率为5kHz时,延迟小,但噪声大。信号采样频率为200Hz时,数据平滑但是延迟较大,接近60ms。信号采样率与滤波器采样频率匹配,为1kHz时,在噪声和延迟间取得了不错的平衡。

结论刚好和第一种情况相反,因此可以说:

  1. 如果信号采样率 > 滤波器采样率,则延迟小,但噪声大
  2. 如果滤波器采样率 > 信号采样率,则数据平滑,但延迟大
  3. 滤波器采样率 = 信号采样率,在噪声和延迟间取得不错的平衡

2.3 滤波器采样频率与信号频率匹配,采样率变化

上面分析了采样频率不匹配的影响,但是如果采样频率匹配,那么采样频率高低对滤波效果有什么影响呢?设计滤波器采样频率分别为 5kHz,1kHz和200Hz的滤波器,并且对应输入对应频率的信号,滤波效果如下:

可见,采样频率越高,滤波效果越好。单片机采集IMU数据滤波,一般使用1kHz,这也主要是受限于传感器数据输出速率(MPU6050最高为2kHz)和单片机处理能力,而且,1kHz时已经取得不错的效果。

2.4 信号采样率随机变化

回到最开头的问题,假设滤波器采样频率按照 1kHz 设计,信号采样频率在 [500, 1500] 之间变化,服从均匀分布,那么这个变化会影响滤波效果吗?仿真结果如下:

可见,滤波效果并没有明显变差,甚至还有一点变好的迹象。所以实际过程中,如果不能准确按照1kHz采集数据,只要在这附近,影响也不是很大。


三、总结

本文通过仿真,以二阶巴特沃兹低通滤波器为例,分析了信号采样率与滤波器采样率匹配和不匹配时对滤波效果的影响。

本文只是通过仿真直观分析,并没有提供严谨的证明,并不能保证结论完全正确,以后有机会再进行证明。

MATLAB仿真文件如下:

rng(0)                  % 随机数种子,保证每次测试效果相同

fs1 = 5000;             % 信号/滤波器采样频率 5kHz
fs2 = 1000;             % 信号/滤波器采样频率 1kHz
fs3 = 200;              % 信号/滤波器采样频率 200Hz

fc = 20;                % 滤波器截止频率20Hz

%% 测试1,信号频率1kHz,滤波器采样频率分别为 5kHz,1kHz和200Hz
[x, s1, t1] = gene_single(fs2);       % 1kHz采样的信号

xf1 = myfilter(fs1, 20, x);         % 5kHz采样率滤波器
xf2 = myfilter(fs2, 20, x);         % 1kHz采样率滤波器
xf3 = myfilter(fs3, 20, x);         % 200Hz采样率滤波器

figure(1);
plot(t1, xf1, t1, xf2, t1, xf3, t1, s1, 'linewidth',1)
legend('$f_s=5\rm{kHz}$', '$f_s = 1\rm{kHz}$','$f_s = 200\rm{Hz}$', '理想值', 'Interpreter', 'latex');
title('信号频率1kHz, 滤波器采样频率变化'); xlabel('时间 t(s)'); ylabel('滤波器输出值');axis([0.3 0.8 0.2  0.8])


%% 测试2,滤波器采样频率为1kHz,信号采样频率分别为 5kHz,1kHz和500Hz

[x1, s1, t1] = gene_single(fs1);         % 5kHz采样的信号
[x2, s2, t2] = gene_single(fs2);         % 1kHz采样的信号
[x3, s3, t3] = gene_single(fs3);         % 200Hz采样的信号

xf1 = myfilter(fs2, fc, x1);         % 1kHz采样率滤波器
xf2 = myfilter(fs2, fc, x2);         % 1kHz采样率滤波器
xf3 = myfilter(fs2, fc, x3);         % 1kHz采样率滤波器

figure(2);
plot(t1, xf1, t2, xf2, t3, xf3, t1, s1, 'linewidth',1)
legend('$f_s=5\rm{kHz}$', '$f_s = 1\rm{kHz}$','$f_s = 200\rm{Hz}$', '理想值', 'Interpreter', 'latex');
title('滤波器采样率1kHz,信号频率变化');xlabel('时间 t(s)'); ylabel('滤波器输出值');axis([0.3 0.8 0.2  0.8])

%% 测试3,信号频率与滤波器采样频率匹配,两者分别为 5kHz,1kHz和500Hz

[x1, s1, t1] = gene_single(fs1);         % 5kHz采样的信号
[x2, s2, t2] = gene_single(fs2);         % 1kHz采样的信号
[x3, s3, t3] = gene_single(fs3);         % 200Hz采样的信号

xf1 = myfilter(fs1, fc, x1);         % 5kHz采样率滤波器
xf2 = myfilter(fs2, fc, x2);         % 1kHz采样率滤波器
xf3 = myfilter(fs3, fc, x3);         % 200Hz采样率滤波器

figure(3)
plot(t1, xf1, t2, xf2, t3, xf3, t1, s1, 'linewidth',1);
legend('$f_s = 5\rm{kHz}$', '$f_s = 1\rm{kHz}$','$f_s = 200\rm{Hz}$', '理想值', 'Interpreter', 'latex');
title('信号采样频率=滤波器采样率');xlabel('时间 t(s)'); ylabel('滤波器输出值');axis([0.3 0.8 0.2  0.8])

%% 测试4,信号采样频率在不断变化

N = length(0:0.001:2*pi);
fs = 1000 + 1000 * (rand(1, N) - 0.5);
t1 = cumsum(1./ fs);
s1 = sin(t1);
n1 = 0.2 * (rand(size(t1)) - 0.5);
x1 = s1 + n1;

[x2,s2,t2] = gene_single(fs2);

xf1 = myfilter(fs2, fc, x1);
xf2 = myfilter(fs2, fc, x2);

figure(4)
plot(t1, xf1, t2, xf2, t2, s2, 'linewidth', 2)
legend('信号采样率 500-1500Hz', '信号采样率恒为1kHz','理想值');
title('信号采样频率变化分析');xlabel('时间 t(s)'); ylabel('滤波器输出值');axis([0.3 0.8 0.2  0.8])


%% 产生指定频率的带噪声正弦信号
% 输入:信号采样频率 fs
% 输出:产生带噪声的信号x,无噪声时的信号s,采样时间序列t

% 信号:正弦信号周期 2*pi,幅度 1
% 噪声:均匀分布 [-0.1, 0.1]

function [x, s, t] = gene_single(fs)

dt = 1 / fs;            % 时间间隔
t = 0:dt:2*pi;
s = sin(t);
n = 0.2 * (rand(size(t)) - 0.5);
x = s + n;

end

%% 二阶巴特沃兹滤波器
% 输入:采样频率fs,截止频率fc,滤波器信号x
% 输出:滤波后信号 xf

function xf = myfilter(fs, fc, x)
    [b, a] = butter(2, fc / (fs/2));
    xf = filter(b, a, x);
end

版权声明:本文为CSDN博主「大强强小强强」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_41869763/article/details/120688797

生成海报
点赞 0

大强强小强强

我还没有学会写个人说明!

暂无评论

相关推荐

hnu 数字电路 实验5 CPU大综合

一、设计目的 完整、连贯地运用《数字逻辑》所学到的知识,熟练掌握 EDA 工具基本使用方法,为学习好后续《计算机原理》课程做铺垫。 二、设计内容 ① 按照给定的数据通路、数据格式和指令系统,使用 ED

USB的红绿黑白线详解

USB的红绿黑白线详解 USB的红绿黑白线详解: USB是一种常用的pc接口,它只有4根线,两根电源两根信号,故信号是串行传输的,usb接口也称为串行口,usb2.0的速