主要内容

补偿滤波器带来的延迟和失真

对信号进行滤波会产生延迟。这意味着输出信号相对于输入在时间上移位。

当位移为常数时,可以通过及时移动信号来修正延迟。

有时滤波器对某些频率分量的延迟比对其他频率分量的延迟更大。这种现象叫做相位失真。为了补偿这种影响,可以使用filtfilt函数。

取500hz采样心电图读数1秒。添加随机噪声。重置随机数发生器可重现的结果

Fs = 500;N = 500;rng默认的xn = ecg(N)+0.1*randn([1 N]);tn = (0:N-1)/Fs;

使用一个滤波器来消除一些噪音,使频率停止在75赫兹以上。使用designfilt设计了一个70阶FIR滤波器。

nir = 70;Fst = 75;Firf = designfilt(“lowpassfir”“FilterOrder”Nfir,...“CutoffFrequency”置,“SampleRate”Fs);

对信号进行滤波并绘制图像。结果比原来的平滑,但落后于它。

Xf = filter(firf,xn);情节(tn, xn、tn、xf)标题“心电图”包含“时间(s)”传奇(“原始”“冷杉过滤”网格)

图中包含一个轴对象。标题为Electrocardiogram的axis对象包含2个类型为line的对象。这些对象表示原始的,FIR过滤的。

使用grpdelay检查由滤波器引起的延迟是否等于滤波器顺序的一半。

grpdelay (firf N Fs)

{

延迟= mean(grpdelay(firf))
延迟= 35

排列数据。通过移除第一个信号来移动过滤后的信号延迟样本。删除最后一个延迟原向量和时间向量的样本。

Tt = tn(1:end-delay);Sn = xn(1:end-delay);Sf = xf;Sf(1:延迟)= [];

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

情节(tt、锡、tt、科幻)标题“心电图”包含(“时间(s)”)传说(原始信号的“滤波移位信号”网格)

图中包含一个轴对象。标题为Electrocardiogram的axis对象包含2个类型为line的对象。这些对象表示原始信号,滤波移位信号。

使用7阶IIR滤波器重复计算。

Niir = 7;Iir = designfilt(“lowpassiir”“FilterOrder”Niir,...“HalfPowerFrequency”置,“SampleRate”Fs);

过滤信号。过滤后的信号比原始信号更清晰,但相对于原始信号有时间上的滞后。由于滤波器的非线性相位也会引起失真。

Xfilter = filter(iir,xn);情节(tn、xn tn, xfilter)标题“心电图”包含“时间(s)”传奇(“原始”“过滤”)轴([0.25 0.55 -1 1.5]

图中包含一个轴对象。标题为Electrocardiogram的axis对象包含2个类型为line的对象。这些对象表示原始的、过滤的。

通过观察滤波器引入的群时延,可以看出时延是频率相关的。

grpdelay (iir, N, Fs)

{

使用filtfilt.有效地消除了时延和失真。使用filtfilt当保持信号相位信息的完整性至关重要时。

Xfiltfilt = filtfilt(iir,xn);情节(tn, xn)Plot (tn,xfilter) Plot (tn,xfiltfilt)标题“心电图”包含“时间(s)”传奇(“原始”“过滤”“filtfilt”)轴([0.25 0.55 -1 1.5]

图中包含一个轴对象。标题为Electrocardiogram的axis对象包含3个类型为line的对象。这些对象代表Original, 'filter', 'filtfilt'。