基于局部加权和的快速谱图相位重建
lws的Python项目详细描述
LWS利用局部加权和快速恢复谱图相位
作者:Jonathan Le Roux--2008-2019
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谱图快速信号重建,”
进行中。数字音频效果国际会议(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,
“用于更快基于谱图一致性的信号重建的相位初始化方案,”
进行中。2010年9月3日至10日至3日举行的澳大利亚证券交易协会秋季会议。
@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
}
安装:
- 安装
lws
的最简单方法是通过pip
:
pip install lws
- 使用cython从源代码编译(如果修改了代码,则必须这样做):
cd python LWS_USE_CYTHON=1 make
- 使用预生成的C源文件(通过cython获得)从源代码编译:
cd python
make
- 或者,可以先使用cython创建tarball,然后使用pip:
cd python
make sdist
pip install dist/lws-1.2.4.tar.gz
^ {STR 1 } $注:在Windows上,需要安装Python版本的微软Visual C++编译器。有关详细信息,请参见this page。
用法
importlwsimportnumpyasnplws_processor=lws.lws(512,128,mode="speech")# 512: window length; 128: window shiftX=lws_processor.stft(x)# where x is a single-channel waveformX0=np.abs(X)# Magnitude spectrogramprint('{: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
:窗口移位
在相位重建算法中,逼近阶为5,应该是好的。swin
:合成窗口(如果没有,则从分析窗口计算以获得完美的重建)look_ahead
:rtisi la-like算法中的前瞻帧数,3应该是好的。xxx_iterations
,xxx_alpha
,xxx_beta
,xxx_gamma
:算法xxx的迭代次数(其中xxx是nofuture
,online
,或batch
中的一个),以及用于确定在每次迭代中更新哪些存储单元的递减稀疏曲线的参数alpha/beta/gamma。任何大小大于给定阈值的bin都将被更新,其他的将被忽略(thresholds = alpha * np.exp(- beta * np.arange(iterations)**gamma)
)symmetric_win
:确定是否使用对称hann窗口mode
:None
,'speech'
,或者'music'
。这将设置每个算法的默认迭代次数,这些迭代次数似乎适合语音和音乐信号。免责声明:您的里程数可能会有所不同。fftsize
:可以设置大于帧大小的值,以便在fft中进行0填充。请注意,0填充将在窗口的左右两侧对称进行,以在分析窗口中强制对称。perfectrec
:是否在每边都填充0以确保边界处的完美重建。
实现了三个步骤,通过适当设置相应的迭代次数,可以独立地打开/关闭它们:
- “无未来”LWS:使用仅涉及过去帧的LWS更新进行阶段初始化
- 在线lws:使用在线lws更新进行相位估计,对应于rtisi-la的快速时频域版本
- lws:对整个谱图使用批量lws更新进行相位估计
备注
.c p p文件实际上是带有一些c99样式注释的c代码,但是windows上的mex需要.cpp扩展名来确认c99标志(对于.c,它被丢弃,而改用-ansi,导致编译错误)
因为模块是c扩展名,不能重新加载(请参见http://bugs.python.org/issue1144263)。特别是在jupyter笔记本中,autoreload无法工作,内核必须重新启动。
致谢
将lws c代码包装成python模块的方法很大程度上受到了martin sosic的文章的启发:http://martinsosic.com/development/2016/02/08/wrapping-c-library-as-python-module.html