# 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 之间的跳跃大小,
恒定重叠相加 (COLA) 约束
为确保成功重建未修改的光谱,分析窗口必须满足 COLA 约束。 一般来说,如果分析窗口满足条件
1、弱 COLA 合规性意味着分析窗口的傅立叶变换在帧速率谐波处为零,使得
频谱修改会干扰混叠消除。弱 COLA 依赖于频域中的别名消除。因此,只要信号没有经过任何光谱修改,就可以使用弱 COLA 兼容窗口进行完美的重建。
2、对于强 COLA 遵从性,窗口的傅立叶变换必须与帧速率下采样一致地进行带宽限制,使得
该等式表明强 COLA 约束不允许混叠。 此外,对于强 COLA 合规性,常数 c 的值必须等于 1。通常,如果以任何方式修改短时频谱,则首选更强的 COLA 合规窗口。
可以使用 iscola 函数来检查弱 COLA 合规性。用于检查 COLA 合规性的求和次数由窗口长度和跃点大小决定。一般来说,通常使用 a = 1 在
一般来说,合成窗口与分析窗口相同。 您可以通过取强 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.