Skip to main content

使用局部加权和的快速频谱图相位重建

项目描述

LWS

使用局部加权和的快速频谱图相位恢复

作者:乔纳森·勒鲁——2008-2019

PyPI 版本

LWS 是一个 C/C++ 库,这个包是一个 Python 包装器。
Matlab/Mex 包装器也可用。

执照

版权所有 (C) 2008-2019 Jonathan Le Roux
Apache 2.0 ( http://www.apache.org/licenses/LICENSE-2.0 )

引用这段代码

如果您使用此代码,请引用以下论文:

批量 LWS

Jonathan Le Roux、Hirokazu Kameoka、Nobutaka Ono、Shigeki Sagayama,
“基于频谱图一致性的幅度 STFT 频谱图的快速信号重建”
,在 Proc。国际数字音频效果会议 (DAFx),第 397--403 页,2010 年 9 月。

@InProceedings{LeRoux2010DAFx09,
  author =	 {Jonathan {Le Roux} and Hirokazu Kameoka and Nobutaka Ono and Shigeki Sagayama},
  title =	 {Fast Signal Reconstruction from Magnitude {STFT} Spectrogram Based on Spectrogram Consistency},
  booktitle =	 {Proc. International Conference on Digital Audio Effects (DAFx)},
  year =	 2010,
  pages =	 {397--403},
  month =	 sep
}

在线 LWS,“没有未来”LWS

Jonathan Le Roux、Hirokazu Kameoka、Nobutaka Ono、Shigeki Sagayama,
“用于更快基于频谱图一致性的信号重建的相位初始化方案”
,在 Proc。ASJ 秋季会议,3-10-3,2010 年 9 月。

@InProceedings{LeRoux2010ASJ09,
  author =	 {Jonathan {Le Roux} and Hirokazu Kameoka and Nobutaka Ono and Shigeki Sagayama},
  title =	 {Phase Initialization Schemes for Faster Spectrogram-Consistency-Based Signal Reconstruction},
  year =	 2010,
  booktitle =	 {Proc. Acoustical Society of Japan Autumn Meeting (ASJ)},
  number =	 {3-10-3},
  month =	 mar
}

安装:

  1. 最简单的安装方法lws是通过pip
pip install lws
  1. 使用 cython 从源代码编译(修改代码时需要):
cd python
LWS_USE_CYTHON=1 make
  1. 要使用预生成的 c 源文件(使用 cython 获得)从源代码编译:
cd python
make
  1. 或者,可以先使用 cython 创建一个 tarball,然后可以使用 pip 安装它:
cd python
make sdist
pip install dist/lws-1.2.6.tar.gz

注意:在 Windows 上,需要安装适用于您的 Python 版本的 Microsoft Visual C++ 编译器。有关详细信息,请参阅此页面。

用法

import lws
import numpy as np

lws_processor=lws.lws(512,128, mode="speech") # 512: window length; 128: window shift
X = lws_processor.stft(x) # where x is a single-channel waveform
X0 = np.abs(X) # Magnitude spectrogram
print('{:6}: {:5.2f} dB'.format('Abs(X)', lws_processor.get_consistency(X0)))
X1 = lws_processor.run_lws(X0) # reconstruction from magnitude (in general, one can reconstruct from an initial complex spectrogram)
print('{:6}: {:5.2f} dB'.format('LWS', lws_processor.get_consistency(X1)))

选项

lws_processor=lws.lws(awin_or_fsize, fshift, L = 5, swin = None, look_ahead = 3,
		  nofuture_iterations = 0, nofuture_alpha = 1, nofuture_beta = 0.1, nofuture_gamma = 1,
		  online_iterations = 0, online_alpha = 1, online_beta = 0.1, online_gamma = 1,
		  batch_iterations = 100, batch_alpha = 100, batch_beta = 0.1, batch_gamma = 1,
		  symmetric_win = True, mode= None, fftsize=None, perfectrec=True)
  • awin_or_fsize: 分析窗口或窗口长度(在这种情况下使用 sqrt(hann) 窗口);分析窗口应该是对称的,以便计算正确。
  • fshift: 窗口移位
  • L:相位重建算法中的近似阶数,5 应该是好的。
  • swin: 合成窗口(如果没有,它是从分析窗口中计算出来的,以进行完美的重建)
  • look_ahead:类RTISI-LA算法中的前瞻帧数,3应该是好的。
  • xxx_iterations, xxx_alpha, xxx_beta, xxx_gamma: 算法 xxx 的迭代次数(其中 xxx 是 、 或 之一nofutureonlinebatch以及用于确定在每次迭代中更新哪些 bin 的递减稀疏曲线的参数 alpha/beta/gamma。任何幅度大于给定阈值的 bin 都会被更新,其他 bin 会被忽略 ( thresholds = alpha * np.exp(- beta * np.arange(iterations)**gamma))
  • symmetric_win:确定是否使用对称汉恩窗
  • mode: None,'speech''music'. 这设置了似乎对语音和音乐信号有益的每个算法的默认迭代次数。免责声明:您的里程可能会有所不同。
  • fftsize:可以设置长于帧大小以在 FFT 中进行 0 填充。请注意,0-padding 将在窗口的左侧和右侧对称地完成,以在分析窗口中强制对称。
  • perfectrec:是否在每一边都用零填充以确保边界处的完美重建。

实现了三个步骤,可以通过适当设置相应的迭代次数来独立开启/关闭它们:

  • “没有未来” LWS:使用仅涉及过去帧的 LWS 更新进行阶段初始化
  • online LWS:使用在线 LWS 更新的相位估计,对应于 RTISI-LA 的快速时频域版本
  • LWS:在整个频谱图上使用批量 LWS 更新进行相位估计

评论

  1. .cpp 文件实际上是带有一些 C99 样式注释的 C 代码,但是在 Windows 上需要 .cpp 扩展名才能让 mex 确认 c99 标志(使用 .c,它被丢弃,而使用 -ansi,导致编译错误)

  2. 由于该模块是 C 扩展,因此无法重新加载(参见http://bugs.python.org/issue1144263)。特别是在 Jupyter Notebooks 中,自动重新加载将不起作用,并且必须重新启动内核。

致谢

将 LWS C 代码包装为 python 模块的方法很大程度上受到 Martin Sosic 帖子的启发:http ://martinsosic.com/development/2016/02/08/wrapping-c-library-as-python-module.html

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

lws-1.2.7.ta​​r.gz (150.0 kB 查看哈希

已上传 source