短时傅里叶变换 (STFT) 的最小二乘再合成

信息处理 matlab 算法 stft 时频 最小二乘
2021-12-31 22:24:53

使用我自己的短时傅里叶变换 (STFT) 的 MATLAB 实现,我设法为分析步骤编写代码,其中一维时域信号s[t]逐渐加窗,进入傅里叶域并排列在二维矩阵中S[t,ω]. 二维矩阵中的每个元素都是时间的函数t和频率ω.

演示文稿是对 STFT 的一个相当不错的概述,并提供了一些详细说明分析和重新综合步骤的方程。

但是,我希望能够任意修改S[t,ω],然后使用重新合成返回s[t].

我相信我应该能够改变S[t,ω]以我想要的任何方式,然后获得s[t]通过重新合成程序。这似乎与相位声码器的想法非常相似。

如演示文稿第 3.1 节所述,时域信号s[t]可以使用最小二乘法重新组合。这在Griffin 和 Lim的 1984 年论文中作为公式 (6) 给出

在以下情况下需要应用最小二乘法S[t,ω]以某种方式进行了修改。

问题

  • Griffin 和 Lim 论文的公式 (6) 是什么意思?
  • 我要遵循哪些步骤来以数值方式实现等式 (6)?

在演示文稿中,方程的写法略有不同:

x(n)=l=w(nlI)y(lI,n)l=w(nlI)2

注意x(n)是重新合成的时域序列,w(n)是窗函数,并且y(n)是二维矩阵的一列的时域版本。

脚步:

从演示文稿中,我认为进行重新合成所需的步骤如下:

  1. w_n是离散窗口向量,是使用 IFFT 在2D 矩阵y_n(:,k)的列上计算的时域向量。k两者w_ny_n(:,k)长度相同。

  2. 然后,使用 Matlab 语法,我们计算逐点乘法: w_n .* y_n(:,k)

  • 这是上面表达式的分子吗?
  • 第 3 步和第 4 步会发生什么?
  • 无限加法意味着什么?
1个回答

最小二乘再合成过程与重叠相加 (OLA) 过程非常相似。

w_n是离散窗口向量,是使用 IFFT 在2D 矩阵y_n(:,k)的列上计算的时域向量。k两者w_ny_n(:,k)长度相同。

然后,使用 Matlab 语法,我们计算与窗口的逐点乘法:

w_n .* y_n(:,k)

正如上面评论中提到的,y_n被修剪为与 window 相同的长度w_t然后以与我之前关于反向 STFTw_n .* y_n(:,k)帖子相关的代码所示相同的方式重叠添加重叠添加的序列是上面原始问题中显示的表达式。numerator

相同的重叠相加操作适用于平方窗口w_t.^2这是denominator上面原始问题中显示的表达式。

然后,最终重新合成的输出只是分子除以分母的逐点除法。在 Matlab 语法中,

numerator ./ denominator