基于局部加权和的快速谱图相位重建

lws的Python项目详细描述


LWS

利用局部加权和快速恢复谱图相位

作者:Jonathan Le Roux--2008-2019

PyPI version

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
}

安装:

  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.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_iterationsxxx_alphaxxx_betaxxx_gamma:算法xxx的迭代次数(其中xxx是nofutureonline,或batch中的一个),以及用于确定在每次迭代中更新哪些存储单元的递减稀疏曲线的参数alpha/beta/gamma。任何大小大于给定阈值的bin都将被更新,其他的将被忽略(thresholds = alpha * np.exp(- beta * np.arange(iterations)**gamma)
  • symmetric_win:确定是否使用对称hann窗口
  • modeNone'speech',或者'music'。这将设置每个算法的默认迭代次数,这些迭代次数似乎适合语音和音乐信号。免责声明:您的里程数可能会有所不同。
  • fftsize:可以设置大于帧大小的值,以便在fft中进行0填充。请注意,0填充将在窗口的左右两侧对称进行,以在分析窗口中强制对称。
  • perfectrec:是否在每边都填充0以确保边界处的完美重建。

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

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

备注

  1. .c p p文件实际上是带有一些c99样式注释的c代码,但是windows上的mex需要.cpp扩展名来确认c99标志(对于.c,它被丢弃,而改用-ansi,导致编译错误)

  2. 因为模块是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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Proguard如何递归地保留类成员名?   安卓无法转换java类型的值。双到字符串   java If输入与JTable上数据库显示的数据匹配   为一个盒子创建一个类。(爪哇)   java如何将数据从Oracle中的(PL/)SQL复制到另一个DBMS?   spring如何在java中通过url下载文件   使用JAVA/J2ee应用程序中的SharePoint2013 rest web服务进行基于SAML令牌的身份验证   java如何完全耗尽此数组中的项?   Java:在对象类中创建数组?   java Android应用程序无法运行,持续崩溃   java无法从RESTAPI中过滤JSON对象   批处理Flink:执行管道java时出错。util。同时发生的TimeoutException:期货在[10000毫秒]后超时   java在使用Spring 3+Hibernate JPA时发现JPA注释类   java如何在Python输入字段中添加整数   实现的基本Java服务类