2026a

# iscola


确定窗口重叠组合是否符合 COLA标准

函数库: TySignalProcessing

# 语法

b = iscola(window,noverlap)
b = iscola(window,noverlap,method)
b,m= iscola(___)
b,m,maxDeviation = iscola(___)

# 说明

b = iscola(window,noverlap) 检查指定的窗口和重叠是否满足恒定重叠相加 (COLA) 约束,以确保逆短时傅立叶变换对未修改的光谱产生完美的重建。


b = iscola(window,noverlap,method) 指定要使用的反演方法。


b,m = iscola(___) 还返回 COLA 总和的中位数。 您可以将这些输出参数与任何先前的输入语法一起使用。


b,m,maxDeviation = iscola(___) 返回与中位数 m 的最大偏差。

# 示例

检查 Root-Hann 窗口的 COLA 合规性

创建一个长度为 120 的周期性 root-Hann 窗口。测试该窗口是否符合 COLA 的 50% 重叠。

using TySignalProcessing
win = sqrt.(hann(120,"periodic"))
noverlap = 60

检查窗口是否符合 COLA 的 50% 重叠。

b, = iscola(win,noverlap)
b = true
检查 Hamming 窗的 COLA 合规性
using TySignalProcessing
window = hamming(256,"periodic")
method = "ola"
noverlap = 128

测试窗口是否符合 COLA 的 50% 重叠。 还要计算 COLA 总和的中位数以及与该总和的最大偏差。

b,m,maxDeviation =  iscola(window,noverlap,method)
b = true

m = 1.08

maxDeviation = 2.220446049250313e-16

# 输入参数

window - 分析窗口
向量

分析窗口,指定为向量。

示例: win = bartlett(120) 是长度为 120 的 Bartlett 窗口。

数据类型: Float

noverlap - 重叠样本数
正标量

重叠样本数,指定为小于 window 长度的正整数。

数据类型: Int

method - 重叠相加法
"wola" (默认) | "ola"

重叠相加的方法,指定为:

1、"wola" —— 加权重叠相加。

2、"ola" —— 重叠相加。

# 输出参数

b - COLA 合规性
逻辑量

COLA 合规性,作为逻辑量返回。如果函数返回 true,则窗口和重叠长度满足 COLA 约束。

m - 中位数
实标量

COLA 总和的中位数,以实数标量形式返回。 如果输入符合 COLA,则 m 等于 COLA 求和常数。

maxDeviation -最大偏差
实标量

与中位数 m 的最大偏差。如果 window 和 noverlap 符合 COLA,则 maxDeviation 接近 COLA 求和的预期数值精度误差。

TIP

如果 m = 1 且 maxDeviation 接近数值精度误差,可以得出强 COLA 合规性。

# 详细信息

逆短时傅立叶变换

逆短时傅立叶变换是通过对 STFT 的每个 DFT 向量进行 IFFT 并重叠相加反相信号来计算的。ISTFT 计算如下:

其中 R 是连续 DFT 之间的跳跃大小, 是以时间 mR 和 为中心的加窗数据的 DFTs。逆 STFT 是对原始信号的完美重构,只要 其中分析窗口 g(n) 用于对原始信号进行加窗,c 是一个常数。

恒定重叠相加 (COLA) 约束

为确保成功重建未修改的光谱,分析窗口必须满足 COLA 约束。 一般来说,如果分析窗口满足条件 该窗口被认为符合 COLA。 此外,可将 COLA 合规性描述为弱或强。

1、弱 COLA 合规性意味着分析窗口的傅立叶变换在帧速率谐波处为零,使得

频谱修改会干扰混叠消除。弱 COLA 依赖于频域中的别名消除。因此,只要信号没有经过任何光谱修改,就可以使用弱 COLA 兼容窗口进行完美的重建。

2、对于强 COLA 遵从性,窗口的傅立叶变换必须与帧速率下采样一致地进行带宽限制,使得

该等式表明强 COLA 约束不允许混叠。 此外,对于强 COLA 合规性,常数 c 的值必须等于 1。通常,如果以任何方式修改短时频谱,则首选更强的 COLA 合规窗口。

可以使用 iscola 函数来检查弱 COLA 合规性。用于检查 COLA 合规性的求和次数由窗口长度和跃点大小决定。一般来说,通常使用 a = 1 在 对于加权重叠相加(WOLA),对于重叠相加(OLA)a=0。 默认情况下,istft 使用 WOLA 方法,通过在执行重叠相加方法之前应用合成窗口。

一般来说,合成窗口与分析窗口相同。 您可以通过取强 OLA 窗口的平方根来构造有用的 WOLA 窗口。 您可以将此方法用于所有非负 OLA 窗口。例如,root-Hann 窗就是 WOLA 窗的一个很好的例子。

完美重构

通常,计算输入信号的 STFT 并将其反转并不会导致完美的重建。 如果想让 ISTFT 的输出尽可能与原始输入信号匹配,信号和窗口必须满足以下条件:

1、输入大小 - 如果使用 istft 反转 stft 的输出并希望结果与输入信号 x 的长度相同,则 必须是整数。

2、COLA 兼容 — 使用 COLA 兼容窗口,假设尚未修改信号的短时傅立叶变换。

3、填充 - 如果输入信号的长度使得 k 的值不是整数,则在计算短时傅立叶变换之前对信号进行零填充。 反转信号后去除多余的零。

# 参考文献

[1] Allen, J. B. "Short Term Spectral Analysis, Synthesis, and Modification by Discrete Fourier Transform." IEEE Transactions on Acoustics, Speech and Signal Processing. Vol. 25, Number 3, June 1977, pp. 235–238.

[2] Griffin, Daniel W., and Jae S. Lim. "Signal Estimation from Modified Short-Time Fourier Transform." IEEE Transactions on Acoustics, Speech and Signal Processing. Vol. 32, Number 2, April 1984, pp. 236–243.

[3] Sharpe, Bruce. Invertibility of Overlap-Add Processing. https://gauss256.github.io/blog/cola.html, accessed July 2019.

[4] Smith, Julius Orion. Spectral Audio Signal Processing. https://ccrma.stanford.edu/~jos/sasp/, online book, 2011 edition, accessed Nov 2018.

# 另请参阅

istft | bartlett