# fillgaps
利用自回归模型填补空白
函数库: TySignalProcessing
# 语法
y = fillgaps(x)
y = fillgaps(x, maxlen)
y = fillgaps(x, maxlen, order)
fillgaps(; plotfig = true)
# 说明
y = fillgaps(x) 将信号 x 中的任何 NaN 值替换为对剩余样本进行正向和反向自回归拟合后的估计值。如果 x 是一个矩阵,则函数会将每一列视为一个独立通道。示例
y = fillgaps(x,maxlen) 指定估计中使用的最大样本数。当信号在整个范围内不能很好地被单个自回归过程所描述时,请使用此参数。示例
y = fillgaps(x,maxlen,order) 指定用于重建间隙的自回归模型的阶数。示例
fillgaps(; plotfig = true) 没有输出参数的,绘制原始样本和重建信号。此语法接受前面语法中的任何输入参数。示例
# 示例
填补音频文件中的空白
加载以 Fs = 7418 Hz 的语音信号。文件包含一个女声的录音。
using TyPlot
using TyBase
using TySignalProcessing
using TyMath
pkg_dir = pkgdir(TySignalProcessing)
source_path = pkg_dir * "/examples/Resource/mtlb.mat"
y = load(source_path)
模拟嘈杂的传输信道不可逆转地破坏了部分信号的情况。大约每 500 个样本引入一个随机长度的间隙。重置随机数发生器,以获得可重复的结果。
rng = MT19937ar(1234)
gn = 3
mt = copy(mtlb)
gl = randi([300 600], gn, 1)
for kj in 1:gn
mt[kj .* 1000 .+ randi(100) .+ [1:gl[kj];]] .= NaN
end
绘制原始信号和损坏信号的曲线图。偏移损坏的信号,以便于显示。播放有间隙的信号。
plot([mtlb mt .+ 4])
legend("Original", "Corrupted")
使用自回归过程重构信号。使用默认设置的 fillgaps。再次使用偏移量绘制原始信号和重建信号。播放重建后的信号。
lb = fillgaps(mt, 80, 80)
plot([mtlb lb .+ 4])
legend(["Original", "Reconstructed"])

填补二维数据中的空白
加载一个文件,其中包含一个用于铸造美国便士的模具的深度测量数据。这些数据由美国国家标准与技术研究院采集,在 128 x 128 的网格上采样。
using TyPlot
using TyBase
using TySignalProcessing
pkg_dir = pkgdir(TySignalProcessing)
source_path = pkg_dir * "/examples/Resource/penny.mat"
load(source_path)
用 25 条铜色等高线绘制等高线图。
nc = 25
c = contour(P, nc)
colormap(c, "copper")
axis("ij", "square")
在数据中引入四个 10×10 的间隙。绘制损坏信号的等高线图。
P[50:60, 80:90] .= NaN
P[100:110, 20:30] .= NaN
P[100:110, 100:110] .= NaN
P[20:30, 110:120] .= NaN
c = contour(P, nc)
colormap(c, "copper")
axis("ij", "square")
使用 fillgaps 重建数据,将每一列视为一个独立通道。指定一个 8 阶自回归模型,从两端各 30 个样本进行外推。绘制重建的等值线图。
q = fillgaps(P, 30, 8)
c = contour(q, nc)
colormap(c, "copper")
axis("ij", "square")
填补函数空白
生成一个由两个正弦曲线和一条洛伦兹曲线组成的函数。函数以 200 Hz 的频率采样,持续 2 秒。绘制结果。
using TyPlot
using TySignalProcessing
x = -1:0.005:1
f = @. 1 / (1 + 10 * x^2) + sin(2 * pi * 3 * x) / 10 + cos(25 * pi * x) / 10
plot(x, f)
在间隔 (-0.8,-0.6)、(-0.2,0.1) 和 (0.4,0.7) 处插入间隙。
h = copy(f)
h[@. x > -0.8 && x < -0.6] .= NaN
h[@. x > -0.2 && x < 0.1] .= NaN
h[@. x > 0.4 && x < 0.7] .= NaN
使用 fillgaps 的默认设置填补空白。绘制原始函数和重建函数。
y = fillgaps(h)
plot(x, f, ".", x, y)
legend(["Original", "Reconstructed"])
重复计算,但现在指定最大预测序列长度为 3 个样本,模型阶数为 1。在最简单的情况下,fillgaps 会进行线性拟合。
y = fillgaps(h, 3, 1)
plot(x, f, ".", x, y)
legend(["Original", "Reconstructed"])
指定最大预测序列长度为 80 个样本,模型阶数为 40。绘制原始函数和重建函数图。
y = fillgaps(h, 80, 40)
plot(x, f, ".", x, y)
legend(["Original", "Reconstructed"])
将模型阶数改为 60。绘制原始函数和重建函数。
y = fillgaps(h, 80, 60)
plot(x, f, ".", x, y)
legend(["Original", "Reconstructed"])
填补 Chirp 中的空白
生成一个多通道信号,其中包括两个以 1 千赫采样、持续 1 秒的 Chirp 信号。Chirp 信号的频率在 0.3 秒时为零,然后线性增加,最终达到 40 赫兹。每个实例都有不同的直流值。
using TySignalProcessing
using TyPlot
Fs = 1000
t = 0:(1 / Fs):(1 - 1 / Fs)
r = chirp(t .- 0.3, 0, 0.7, 40)
f = 1.1
q = [r .- f r .+ f]
在信号中引入间隙。其中一个间隙覆盖低频区域,另一个间隙覆盖高频区域。
gap = (460:720)
q[gap .- 300, 1] .= NaN
q[gap .+ 200, 2] .= NaN
使用默认参数填补空白。
y = fillgaps(q)
通过对信号拟合 14 阶自回归模型来填补空白。限制模型在每个间隙的末端包含 15 个样本。使用 fillgaps 的功能绘制重建图。
figure()
fillgaps(q, 15, 14; plotfig=true)
将估算中使用的样本数量增加到 150 个。将模型顺序增加到 140。
figure()
fillgaps(q, 100, 90; plotfig=true)
提示
不同机器运行结果可能不同。
# 输入参数
x - 输入信号向量 | 矩阵
输入信号,指定为向量或矩阵。如果 x 是矩阵,则其列被视为独立通道。
示例: cos.(pi ./ 4 .* (0:159)) .+ reshape(ones(32,1) .* [0 NaN 0 NaN 0], 160) 是一个缺失 40% 采样的单通道行矢量信号。
示例: cos.(pi ./ [4 2] .* (0:159)) .+ reshape(ones(64,1) .* [0 NaN 0 NaN 0], 160, 2) 是一个具有较大间隙的双通道信号。
maxlen - 预测序列的最大长度正整数
预测序列的最大长度,指定为正整数。如果不指定 maxlen,则 fillgaps 会使用所有以前的点迭代拟合自回归模型,进行正向估计,并使用所有未来的点进行反向估计。
order - 自回归模型阶数"aic"(默认) | 正整数
自回归模型阶数,指定为 "aic" 或正整数。如果阶数为无穷大或可用样本不足,阶数会被截断。如果指定阶数为 "aic" 或不指定,那么 fillgaps 会选择能使 Akaike 信息准则最小化的阶数。
# 输出参数
y - 重建信号矩阵
重建信号,以矢量或矩阵形式返回。
# 参考文献
[1] Akaike, Hirotugu. "Fitting Autoregressive Models for Prediction." Annals of the Institute of Statistical Mathematics. Vol. 21, 1969, pp. 243–247.
[2] Kay, Steven M. Modern Spectral Estimation: Theory and Application. Englewood Cliffs, NJ: Prentice Hall, 1988.
[3] Orfanidis, Sophocles J. Optimum Signal Processing: An Introduction. 2nd Edition. New York: McGraw-Hill, 1996.