从非周期性离散时间信号中删除未知的DC偏移

时间:2011-08-09 09:28:06

标签: matlab signal-processing

是否有某些过程可以确定/消除非周期性离散时间信号的未知DC偏移?

相关信号的采样率为25Hz,感兴趣的谐波介于0.25和3 Hz之间。

我尝试使用高通滤波器混合结果,首先我使用了具有Fc = 0Hz的10阶guassian,这确实很好地消除了偏移但是它严重衰减了AC,尽管它确实保持了信号形状的完整性,接下来我使用了一个168阶的均衡器,其阻带频率为0Hz,通带频率为0.25Hz,相移太严重,信号形状太失真,如果通带降低到0.1Hz,失真可能会降低,但这样会只需进一步增加相移,我需要保持最低限度。

在应用x-LPF(x)之前和之后,如Paul R所建议的

enter image description here

5 个答案:

答案 0 :(得分:10)

我建议在DC使用陷波滤波器并使用filtfilt使其为零相位。

a = [1 , -0.98]; b = [1,-1];

y = filtfilt(b,a,x);

a的第二个值越接近-1,你的缺口越窄。

答案 1 :(得分:9)

DC偏移意味着向信号添加了一些常数值(该名称源自向模拟AC信号添加DC电压)。如果直流分量实际上是恒定的(并且没有真正缓慢变化),那么您不必设计一些高阶(并且可能不稳定)的高通滤波器 - 您可以从信号中减去信号的平均值 - 当然,这也是一个高通滤波器(平均值是一种低通滤波器,'1减去平均值'是高速滤波器)---但是非常简单。

另一方面,如果您有理由相信直流分量不是真正的直流分量,而是具有极低频率的交流电压,那么您最好平均信号的分段,而不是信号。整体,与使用脉冲响应低于信号长度的低通滤波器相同。在这种情况下,您必须对“DC”组件做出一些假设。

答案 2 :(得分:3)

不是直接实现高通滤波器(对于非常低的频率可能相当棘手 - 最终会出现大量系数以及稳定性和通带纹波等各种问题),您可能会考虑实施低通滤波器,它将为您提供DC偏移值的估计值,然后从信号中减去此滤波后的偏移量,即:而不是:

y = HPF(x)

这样做:

y = x - LPF(x)

低通滤波器可能只是一个相当少数项的简单滤波器。这种实现的最大优点是,由于相位,纹波等原因,您的高频分量不应该有任何不需要的伪像,因为您所做的只是从样本中减去几乎静止的DC值。

唯一潜在的缺点是,如果DC偏移很大,则在DC偏移估计值准确之前可能会有相当长的初始建立时间(尽管直接高通滤波器等任何其他实现也是如此)当然)。如果您有任何先验知道偏移值可能是什么(例如,如果它在运行之间没有太大变化,并且您知道前一次运行的值)那么您可以使用它来优化建立时间,方法是将LPF状态变量初始化为合适的值而不是0。

答案 3 :(得分:1)

正如其他人所说,要删除DC偏移,您可以简单地减去平均值。您的信号不需要是周期性的,但确实需要足够长的时间来估算直流分量。

如果您仍希望采用过滤方法,则可以使用filtfilt消除由于相位滞后引起的严重失真。此功能在向前方向上过滤一次时间序列,然后在反向方向上过滤一次,以便消除相位失真。

答案 4 :(得分:1)

您可以将对称FIR滤波器设计为估算DC的低通滤波器,然后减去输入信号的输出。此过滤器具有恒定的群延迟。