这个例子展示了如何通过插值、抗混叠滤波和自回归建模来重建缺失的数据。
随着廉价数据采集硬件的出现,您通常可以访问正常间隔快速采样的信号。这允许您获得底层信号的精细近似。但是,当您测量的数据时会发生什么粗略采样或以其他方式缺少重要部分?如何将信号的信号值推断在您知道的样本之间的点数?
线性插值是迄今为止在采样点之间推断值的最常见方法。默认情况下,当您在MATLAB中绘制向量时,您会看到直线连接的点。您需要在非常精细的细节下对信号进行示例,以便近似真实信号。
在这个例子中,一个正弦信号的采样具有细分辨率和粗分辨率。当绘制在图表上时,经过精心采样的正弦曲线非常类似于真正的连续正弦曲线。因此,您可以使用它作为“真实信号”的模型。在下面的图中,粗采样信号的样本显示为由直线连接的圆。
tTrueSignal = 0:0.01:20;xTrueSignal =罪(2 *π* 2 * tTrueSignal / 7);tSampled = 0:20;xSampled =罪(2 *π* 2 * tSampled / 7);情节(tTrueSignal xTrueSignal,'-',...tSampled xSampled,'O-')传说('真的信号',“样本”)
以相同的方式恢复中间样本很简单阴谋
进行插值。这可以用线性方法来实现interp1.
功能。
tResampled = 0:0.1:20;xLinear = interp1 (tSampled xSampled tResampled,“线性”);情节(tTrueSignal xTrueSignal,'-',...tSampled xSampled,'O-',...tResampled xLinear,'.-')传说('真的信号',“样本”,“interp1(线性))
线性插值的问题是结果不是很平滑。其他插值方法可以产生更平滑的近似。
许多物理信号就像正弦曲线,因为它们是连续的并且具有连续的衍生物。您可以通过使用立方样条插值来重建此类信号,这确保了内插信号的第一和第二导数在每个数据点都是连续的:
xSpline = interp1 (tSampled xSampled tResampled,样条的);情节(tTrueSignal xTrueSignal,'-',...tSampled xSampled,“o”,...tResampled xLinear,'.-',...TresAmpled,Xspline,'.-')传说('真的信号',“样本”,“interp1(线性),“interp1(花键)”)
三次样条在插值由正弦组成的信号时特别有效。然而,还有其他技术可以用来获得对具有非常高阶连续导数的物理信号的更高保真度。
的重组
信号处理工具箱中的函数提供了另一种填补缺失数据的技术。重组
能以极低的失真重建低频的正弦分量。
xressample = ressample (xSampled, 10, 1);tResample = 0.1 *(1:元素个数(xResample)) 1);情节(tTrueSignal xTrueSignal,'-',...TresAmpled,Xspline,“。”,...tResample xResample,“。”)传说('真的信号',“interp1(花键)”,'重新取出')
像其他方法一样,重组
有一些困难重建端点。另一方面,重构信号的中心部分与真实信号吻合得很好。
xlim (10 [6])
重组
可以适应非均匀采样信号。该技术在信号以高速率采样时效果最好。
在下面的例子中,我们创建一个缓慢移动的正弦曲线,删除一个样本,并放大到缺失样本的附近。
ttruesignal = 0:.1:20;Xtruesignal = Sin(2 * Pi * 2 * TtrueIgnal / 15);tx = 0:20;tmissing = tx(10);Tx(10)= [];X = SIN(2 * PI * 2 * TX / 15);xmissing = sin(2 * pi * 2 * tmissing / 15);[y,ty] =重组(x,tx,10,样条的);绘图(TTRUESIGNAL,Xtresignal,'-',...tmissing,xmissing,'X ',...Tx x,'o',...泰,y,'。')传说('真的信号',缺失的样本,'剩下的样品','用''vidhine''重新取样'') ylim([-1.2 1.2]) xlim([6 14])
重建的正弦曲面可以合理地追踪真实信号的形状,只有缺少样本附近的轻微误差。
然而,重组
当信号存在较大间隙时,就不能很好地工作。例如,考虑一个中间部分缺失的衰减正弦:
tTrueSignal = (0:199) / 199;xTrueSignal = exp (-0.5 * tTrueSignal)。*罪(2 *π* 5 * tTrueSignal);tm = tTrueSignal;xMissing = xTrueSignal;tm (50:140) = [];xMissing (50:140) = [];[y,Ty] = ressample (xMissing, tMissing, 200,样条的);情节(tTrueSignal xTrueSignal,'-',...tm、xMissing“o”,...泰,y,“。”)传说('真的信号',“样本”,'用''vidhine''重新取样'')
在这里重组
确保重建信号是连续的并且在缺失点附近具有连续的衍生物。但是,它无法充分重建缺失部分。
如上所述,单独的过滤和立方插值可能不足以处理大的间隙。然而,对于某些类型的采样信号,例如观察振荡现象时出现的那些采样信号,您通常可以基于紧接在或之后的间隙的数据来推断缺失样本的值。
的填充
功能可以替换丢失的样本(指定南
)通过将自回归模型拟合到围绕间隙的样品并从两个方向外推到间隙中的样品中,以其他方式均匀采样信号。
tTrueSignal = (0:199) / 199;xTrueSignal = exp(闲置* tTrueSignal)。*罪(2 *π* 5 * tTrueSignal);gapSignal = xTrueSignal;gapSignal(50:140) =南;y = fillgaps (gapSignal);情节(tTrueSignal xTrueSignal,'-',...ttruesignal,gapsignal,“o”,...tTrueSignal y“。”)传说('真的信号',“样本”,重构信号的)
这种技术之所以有效,是因为自回归信号的信息分布在许多样本上。只需在任意段内进行少量采样,即可完全重构出完整的信号。
这种重构方法可以用于估计更复杂信号的缺失样本。考虑一个拨动吉他琴弦的采样音频信号,在拨动之后立即去掉600个样本:
[y,fs] = audioread(“guitartune.wav”);x = y(1:3500);X(2000:2600)=南;y2 = fillgaps (x);情节(1:3500,Y(1:3500),'-',...1:3500 x,“。”,...1:3500,Y2,'-')传说(原始信号的,“样本”,重构信号的,...“位置”,'最好的')
当已知间隙附近的信号可以用单一的自回归过程建模时,就可以直接在间隙内填充数据。当信号包含一个非常自回归过程时,可以通过限制计算模型参数的区域来缓解问题。这是有用的,当你试图填补空白的“振铃”期间的一个共振出现前或后,另一个更强的共振。
x = y (350001:370000);x(6000:6950) =南;y2 = fillgaps (x);y3 = fillgaps (x, 1500);情节(1:20000,y (350001:370000),'-',...1:20000 x,“。”,...1:20000, y2,'-',...1:20000 y3,'-')XLIM([2200 10200])传奇(原始信号的,“样本”,'fillgaps(全部)','FILLGAPS(本地化)',...“位置”,'最好的')
在上面的绘图中,波形丢失在大谐振之前的一部分。像之前一样,填充
用于使用所有可用数据推断到间隙区域。第二个电话填充
在间隙的两边只使用1500个样本来执行建模。这减轻了样品7500之后吉他拨动的影响。
您已经看到了几种通过插值、重采样和自回归建模从邻近的样本值中重建缺失数据的方法。
插值和重采样工作缓慢变化的信号。用抗混叠滤波器进行重采样通常能更好地重建由低频成分组成的信号。对于重建振荡信号中的大间隙,在间隙附近的自回归建模可以特别有效。
有关均匀和非均匀重采样的更多信息,请参见