2026a

# extractsigroi


提取感兴趣的信号区域

函数库: TySignalProcessing

# 语法

sigroi = extractsigroi(x, roilims)
sigroi = extractsigroi(x, roilims, concat)

# 说明

sigroi = extractsigroi(x, roilims) 基于在 rolims 中指定的 ROI 限制提取输入信号向量 x 的感兴趣区域(ROI)。 示例


sigroi = extractsigroi(x, roilims, concat) 基于在 rolims 中指定的 ROI 限制提取输入信号向量 x 的感兴趣区域(ROI)。 示例

# 示例

提取关注信号区域

考虑表示 45 样本随机信号的可能感兴趣区域的两列矩阵。提取与感兴趣区域相对应的信号样本。

using TyPlot 
using TySignalProcessing
using TyMath
rng = MT19937ar(1234)
x = randn(rng, 45)
roilims = [5 10; 15 25; 30 35]
sigroi = extractsigroi(x, roilims)

绘制信号并突出显示感兴趣的区域。

plot(1:length(x), x)
hold("on")
for kj in 1:length(sigroi)
    plot(roilims[kj, 1]:roilims[kj, 2], sigroi[kj])
end
hold("off")
从数据中提取关注区域

考虑一组由办公楼内的温度计收集的大约四个月的温度数据。该设备每半小时读取一次读数。因此,采样率为 48 次测量/天。将温度转换为摄氏度并绘制数据。

using TyPlot 
using TyBase
using TySignalProcessing
using TyMath
pkg_dir = pkgdir(TySignalProcessing)
source_path = pkg_dir * "/examples/Resource/officetemp.mat"
officetemp = load(source_path)
temp = officetemp["temp"]
tempC = @. (temp - 32) * 5 / 9
fs = 48
t = [0:(length(tempC) - 1);] / fs
plot(t, tempC)
xlabel("Time (days)")
ylabel("Temperature °C ")

创建感兴趣的区域限制,将温度数据分为29天。

roilims = [1 30; 31 60; 61 90; 91 120]

提取感兴趣的区域。计算每个周期的平均温度并显示值。

sigroi = extractsigroi(tempC, roilims)
mean.(sigroi)
ans = 4-element Vector{Float64}:
 23.796296296296298
 23.14814814814815
 23.46296296296296
 23.074074074074076
提取并连接关注信号区域

考虑表示 45 样本随机信号的可能感兴趣区域的两列矩阵。提取与感兴趣区域相对应的信号样本。将样本连接到单个向量中。

using TyPlot 
using TySignalProcessing
using TyMath
rng = MT19937ar(1234)
x = randn(rng, 45)
roilims = [5 10; 15 25; 30 35]
sigroi = extractsigroi(x, roilims, true)

绘制信号并突出显示感兴趣的区域。

plot(x)
y = fill(NaN, size(x))
for kj in 1:size(roilims, 1)
    global roi = roilims[kj, 1]:roilims[kj, 2]
    y[roi] = sigroi[1:length(roi)]
    deleteat!(sigroi, 1:length(roi))
end
hold("on")
plot(y)
hold("off")
从数据中提取并连接关注区域

考虑一组由办公楼内的温度计收集的四个月的温度数据。该设备每半小时读取一次读数。因此,采样率为 48 次测量/天。将温度转换为摄氏度。

using TyBase
using TySignalProcessing
using TyMath
using TyPlot
pkg_dir = pkgdir(TySignalProcessing)
source_path = pkg_dir * "/examples/Resource/officetemp.mat"

officetemp = load(source_path)
temp = officetemp["temp"]

tempC = @. (temp - 32) * 5 / 9
fs = 48

创建感兴趣区域(ROI)限制,该限制对应于五个随机的两周时间段,间隔至少 24 小时。使用这些天的温度读数进行审计。

r = 5
w = 14 * fs
s = 1 * fs

rng = MT19937ar(1234)
hq, = histcounts(
    randi(rng, r + 1, length(tempC) - r * w - (r - 1) * s),
    [1:(r + 2);] .- 1 ./ 2;
    nargout=2,
)

t = 1 .+ [0:(r - 1);] .* (w + s) .+ cumsum(hq[1:r])
roilims = [t t .+ w .- 1]

提取感兴趣的区域。计算每个审计关注区域的平均温度并显示值。

sigroi = extractsigroi(tempC, roilims)
mean.(sigroi)
ans = 5-element Vector{Float64}:
 22.795138888888886
 22.227182539682538
 22.427248677248677
 22.938161375661373
 23.134920634920643

再次提取感兴趣的区域,但现在将样本连接到单个向量中。计算审核区域的平均温度。

sigroic = extractsigroi(tempC, roilims, true)
avgTFc = mean(sigroic)
m = sigroi2binmask(roilims, length(tempC))
m = 5584-element BitVector:
 0
 0
 0
 0
 0
 ⋮
 0
 0
 0
 0

# 输入参数

x - 输入信号
向量

输入信号,指定为向量。

示例 : chirp(0 : 1/1e3 : 1, 25, 1, 50) 指定以 1 kHz采样的扫频余弦信号。

roilims - 感兴趣区域限制
两列正整数矩阵

感兴趣区域限制,指定为两列正整数矩阵。第 i 行感兴趣区域限制包含与信号的第 i 个感兴趣区域的开始和结束样本相对应的非递减指数。

concat - 连接提取的信号区域的选项
false(默认值)| true

连接提取的信号区域的选项,指定为逻辑值。

# 输出参数

sigroi - 感兴趣的信号区域
数值向量组成的向量 | 数值向量

感兴趣的信号区域,作为数值向量组成的向量或数值向量返回。

  • 如果 concat 设置为 false,则 sigroi 是一个数值向量组成的向量。sigroi 的第 i 个单元包含与 roilims 中指定的第 i 感兴趣区域相对应的信号样本;
  • 如果 concat 设置为 true,sigroi 是连接所有提取的信号样本的向量。

# 另请参阅

mergesigroi | removesigroi