首页 > 其他分享 >补偿 FIR 滤波器引入的延迟

补偿 FIR 滤波器引入的延迟

时间:2023-11-14 13:01:54浏览次数:31  
标签:FIR 滤波器 tn delay 采样 信号 延迟


补偿 FIR 滤波器引入的延迟

对信号进行滤波会引入延迟。这意味着相对于输入,输出信号在时间上有所偏移。此示例向您说明如何抵消这种影响。

有限冲激响应滤波器经常将所有频率分量延迟相同的时间量。这样,我们就很容易通过对信号进行时移处理来针对延迟进行校正。

以 500 Hz 的频率对心电图读数采样,采样时间为 1 秒。添加随机噪声。重置随机数生成器以获得可再现性。

Fs = 500;
N = 500;
rng default

xn = ecg(N)+0.25*randn([1 N]);
tn = (0:N-1)/Fs;

使用滤波器阻挡 75 Hz 以上的频率,以消除一部分噪声。使用 designfilt 设计一个阶数为 70 的滤波器。

nfilt = 70;
Fst = 75;

d = designfilt('lowpassfir','FilterOrder',nfilt, ...
               'CutoffFrequency',Fst,'SampleRate',Fs);

对信号进行滤波并绘图。与原始信号相比,结果更平滑,但存在滞后。

xf = filter(d,xn);

plot(tn,xn)
hold on, plot(tn,xf,'-r','linewidth',1.5), hold off
title 'Electrocardiogram'
xlabel 'Time (s)', legend('Original Signal','Filtered Signal')

补偿 FIR 滤波器引入的延迟_信号处理

使用 grpdelay 检查滤波器造成的延迟是否等于滤波器阶数的一半。

grpdelay(d,N,Fs)

补偿 FIR 滤波器引入的延迟_信号处理_02

delay = mean(grpdelay(d))


delay = 35


对滤波后的信号进行时移以对齐数据。删除信号的前 delay 个采样。删除原始采样和时间向量的最后 delay 个采样。

tt = tn(1:end-delay);
sn = xn(1:end-delay);

sf = xf;
sf(1:delay) = [];

对信号绘图,并验证它们是否对齐。

plot(tt,sn)
hold on, plot(tt,sf,'-r','linewidth',1.5), hold off
title 'Electrocardiogram'
xlabel('Time (s)'), legend('Original Signal','Filtered Shifted Signal')

补偿 FIR 滤波器引入的延迟_算法_03

另请参阅

designfilt | filter | filtfilt | grpdelay

相关主题

标签:FIR,滤波器,tn,delay,采样,信号,延迟
From: https://blog.51cto.com/oliverHuang/8366166

相关文章

  • 补偿 IIR 滤波器引入的延迟
    补偿IIR滤波器引入的延迟对信号进行滤波会引入延迟。这意味着相对于输入,输出信号在时间上有所偏移。无限冲激响应滤波器对某些频率分量的延迟可能比其他频率分量更长。它们会使输入信号呈现明显失真。函数 filtfilt 可补偿此类滤波器引入的延迟,从而校正滤波器失真。这种“零相......
  • 数字滤波器设计---IIR 滤波器设计
    数字滤波器设计---IIR滤波器设计IIR与FIR滤波器的比较与FIR滤波器相比,IIR滤波器的主要优点是,要满足同一组设定,它的滤波器阶数通常远远低于FIR滤波器。虽然IIR滤波器具有非线性相位,但MATLAB® 软件中的数据处理通常是“离线”执行的,即整个数据序列在滤波之前是可用的。......
  • CentOS 7.9 防火墙启动报错--Process: 12848 ExecStart=/usr/sbin/firewalld --nofork
    原因:配置防火墙策略过程中,多次启停防火墙,导致防火墙启动报错报错截图: 排查:python版本是一致的,有一个遗留的防火墙进程防火墙正常关闭后没有这个进程 解决办法:杀掉这个进程,启动防火墙  ......
  • .Net6 and VsCode CodeFirst开发和迁移使用
    ------------VsCode开发.net6----------------------------------干货如下:C#BaselanguagesupportforC#包含vscode的调试C#DevKitC#ExtensionsIntelliCodeIntelliCodeAPIUsageExamplesIntelliCodeCompletionsIntelliCodeforC#DevKitIntelliCodeInsi......
  • Spring Boot中使用RabbitMQ完成延迟功能
    MQ-消息队列简单来说就是将“消息”放到“队列”中,然后慢慢处理队列中的消息。完成延迟功能总体的思路是将消息放到队列中,为消息设置过期时间,不直接处理这个队列中的消息,等到消息过期,将它转到另一个队列进行处理,从而完成延迟功能。基本概念1.队列队列是RabbitMQ的内部对象,用......
  • C# EntityFramework+SQLite CodeFirst 创建数据库和数据表
    1、安装NuGet包System.Data.SQLite(System.Data.SQLite.Core、System.Data.SQLite.EF6、System.Data.SQLite.Linq)SQLite.CodeFirstEntityFramework2、配置App.config<?xmlversion="1.0"encoding="utf-8"?><configuration><configSe......
  • The Javascript alert, confirm, and prompt boxes
    Thealert,confirm,andpromptboxesThethree"commands"involvedincreatingalert,confirm,andpromptboxesare:window.alert()window.confirm()window.prompt()Letslookatthemindetail.Thefirstoneis:window.alert()Thiscommandpopsu......
  • python语言合法命名规则:my_first_python_program
    示例示例Python语言合法命名规则:命名只能使用字母、数字和下划线,不能使用其他符号;Python语言合法命名规则:1.命名只能使用字母、数字和下划线,不能使用其他符号;2.不能以数字开头;3.不能使用Python关键字;4.命名应该有意义,尽量不要使用缩写;5.命名应该具有可读性,尽量使用驼峰命名法,......
  • 关闭fireFox浏览器自动更新提示
    打开火狐浏览器并在地址栏中输入“about:config”。点击“接受风险并继续”按钮。在搜索栏输入“app.update.auto”并按下回车键。将“app.update.auto”设置为“false”。找到“app.update.enabled”并将其设置为“false”。app.update.auto.migrated是火狐浏览器的一个......
  • webrtc 低通滤波器
     #include"low_pass_filter.h"  doubleprev_output=0.0;doubleprev_input=0.0;  //去噪 WebRtcNsx_Process(webrtc_nsx,&g_aecmAudio,1,&g_ns); if(WebRtcAgc_Process(webrtc_agc,&g_ns,1,160,&pBuff,in_mic_......