Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
DeepSpeech
提交
5b9950cd
D
DeepSpeech
项目概览
PaddlePaddle
/
DeepSpeech
11 个月 前同步成功
通知
204
Star
8425
Fork
1598
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
245
列表
看板
标记
里程碑
合并请求
3
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
DeepSpeech
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
245
Issue
245
列表
看板
标记
里程碑
合并请求
3
合并请求
3
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
5b9950cd
编写于
11月 03, 2021
作者:
小湉湉
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix mbmelgan static
上级
ba978fca
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
20 addition
and
165 deletion
+20
-165
parakeet/modules/kaiser.py
parakeet/modules/kaiser.py
+0
-146
parakeet/modules/pqmf.py
parakeet/modules/pqmf.py
+20
-19
未找到文件。
parakeet/modules/kaiser.py
已删除
100644 → 0
浏览文件 @
ba978fca
# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import
collections.abc
as
collections_abc
import
paddle
_i0A
=
[
-
4.41534164647933937950E-18
,
3.33079451882223809783E-17
,
-
2.43127984654795469359E-16
,
1.71539128555513303061E-15
,
-
1.16853328779934516808E-14
,
7.67618549860493561688E-14
,
-
4.85644678311192946090E-13
,
2.95505266312963983461E-12
,
-
1.72682629144155570723E-11
,
9.67580903537323691224E-11
,
-
5.18979560163526290666E-10
,
2.65982372468238665035E-9
,
-
1.30002500998624804212E-8
,
6.04699502254191894932E-8
,
-
2.67079385394061173391E-7
,
1.11738753912010371815E-6
,
-
4.41673835845875056359E-6
,
1.64484480707288970893E-5
,
-
5.75419501008210370398E-5
,
1.88502885095841655729E-4
,
-
5.76375574538582365885E-4
,
1.63947561694133579842E-3
,
-
4.32430999505057594430E-3
,
1.05464603945949983183E-2
,
-
2.37374148058994688156E-2
,
4.93052842396707084878E-2
,
-
9.49010970480476444210E-2
,
1.71620901522208775349E-1
,
-
3.04682672343198398683E-1
,
6.76795274409476084995E-1
]
_i0B
=
[
-
7.23318048787475395456E-18
,
-
4.83050448594418207126E-18
,
4.46562142029675999901E-17
,
3.46122286769746109310E-17
,
-
2.82762398051658348494E-16
,
-
3.42548561967721913462E-16
,
1.77256013305652638360E-15
,
3.81168066935262242075E-15
,
-
9.55484669882830764870E-15
,
-
4.15056934728722208663E-14
,
1.54008621752140982691E-14
,
3.85277838274214270114E-13
,
7.18012445138366623367E-13
,
-
1.79417853150680611778E-12
,
-
1.32158118404477131188E-11
,
-
3.14991652796324136454E-11
,
1.18891471078464383424E-11
,
4.94060238822496958910E-10
,
3.39623202570838634515E-9
,
2.26666899049817806459E-8
,
2.04891858946906374183E-7
,
2.89137052083475648297E-6
,
6.88975834691682398426E-5
,
3.36911647825569408990E-3
,
8.04490411014108831608E-1
]
def
piecewise
(
x
,
condlist
,
funclist
,
*
args
,
**
kw
):
n2
=
len
(
funclist
)
# n = len(condlist)
n
=
1
if
n
==
n2
-
1
:
# compute the "otherwise" condition.
condelse
=
~
paddle
.
any
(
condlist
,
axis
=
0
,
keepdim
=
True
)
condlist
=
paddle
.
concat
([
condlist
,
condelse
],
axis
=
0
)
n
+=
1
elif
n
!=
n2
:
raise
ValueError
(
"with {} condition(s), either {} or {} functions are expected"
.
format
(
n
,
n
,
n
+
1
))
y
=
paddle
.
zeros
(
paddle
.
shape
(
x
),
x
.
dtype
)
for
k
in
range
(
n
):
item
=
funclist
[
k
]
if
not
isinstance
(
item
,
collections_abc
.
Callable
):
y
[
condlist
[
k
]]
=
item
else
:
temp
=
condlist
[
k
]
if
paddle
.
shape
(
x
)
==
paddle
.
ones
([
1
]):
vals
=
x
y
=
item
(
vals
,
*
args
,
**
kw
)
else
:
vals
=
x
[
temp
]
y
[
temp
]
=
item
(
vals
,
*
args
,
**
kw
)
return
y
def
_chbevl
(
x
,
vals
):
b0
=
vals
[
0
]
b1
=
0.0
for
i
in
range
(
1
,
len
(
vals
)):
b2
=
b1
b1
=
b0
b0
=
x
*
b1
-
b2
+
vals
[
i
]
return
0.5
*
(
b0
-
b2
)
def
_i0_1
(
x
):
out
=
paddle
.
exp
(
x
)
*
_chbevl
(
x
/
2.0
-
2
,
_i0A
)
return
paddle
.
cast
(
out
,
dtype
=
"float32"
)
def
_i0_2
(
x
):
out
=
paddle
.
exp
(
x
)
*
_chbevl
(
32.0
/
x
-
2.0
,
_i0B
)
/
paddle
.
sqrt
(
x
)
return
paddle
.
cast
(
out
,
dtype
=
"float32"
)
def
_i0_dispatcher
(
x
):
return
(
x
,
)
def
i0
(
x
):
x
=
paddle
.
abs
(
x
)
condlist
=
x
<=
paddle
.
full
([
1
],
8.0
)
condlist
=
condlist
.
unsqueeze
(
0
)
return
piecewise
(
x
,
condlist
,
[
_i0_1
,
_i0_2
])
def
_len_guards
(
M
):
"""Handle small or incorrect window lengths"""
if
int
(
M
)
!=
M
or
M
<
0
:
raise
ValueError
(
'Window length M must be a non-negative integer'
)
return
M
<=
1
def
_extend
(
M
,
sym
):
"""Extend window by 1 sample if needed for DFT-even symmetry"""
if
not
sym
:
return
M
+
1
,
True
else
:
return
M
,
False
def
_truncate
(
w
,
needed
):
"""Truncate window by 1 sample if needed for DFT-even symmetry"""
if
needed
:
return
w
[:
-
1
]
else
:
return
w
def
kaiser
(
M
,
beta
,
sym
=
True
):
if
_len_guards
(
M
):
return
paddle
.
ones
(
M
)
M
,
needs_trunc
=
_extend
(
M
,
sym
)
n
=
paddle
.
arange
(
0
,
M
)
alpha
=
(
M
-
1
)
/
2.0
a
=
i0
(
beta
*
paddle
.
sqrt
(
1
-
((
n
-
alpha
)
/
alpha
)
**
2.0
))
b
=
i0
(
paddle
.
full
([
1
],
beta
))
w
=
a
/
b
return
_truncate
(
w
,
needs_trunc
)
parakeet/modules/pqmf.py
浏览文件 @
5b9950cd
...
...
@@ -15,8 +15,7 @@
import
numpy
as
np
import
paddle
import
paddle.nn.functional
as
F
from
parakeet.modules.kaiser
import
kaiser
from
scipy.signal
import
kaiser
def
design_prototype_filter
(
taps
=
62
,
cutoff_ratio
=
0.142
,
beta
=
9.0
):
...
...
@@ -41,16 +40,18 @@ def design_prototype_filter(taps=62, cutoff_ratio=0.142, beta=9.0):
# check the arguments are valid
assert
taps
%
2
==
0
,
"The number of taps mush be even number."
assert
0.0
<
cutoff_ratio
<
1.0
,
"Cutoff ratio must be > 0.0 and < 1.0."
# make initial filter
omega_c
=
np
.
pi
*
cutoff_ratio
with
np
.
errstate
(
invalid
=
"ignore"
):
h_i
=
paddle
.
sin
(
omega_c
*
(
paddle
.
arange
(
taps
+
1
)
-
0.5
*
taps
))
/
(
np
.
pi
*
(
paddle
.
arange
(
taps
+
1
)
-
0.5
*
taps
))
h_i
[
taps
//
2
]
=
1
*
cutoff_ratio
# fix nan due to indeterminate form
h_i
=
np
.
sin
(
omega_c
*
(
np
.
arange
(
taps
+
1
)
-
0.5
*
taps
))
/
(
np
.
pi
*
(
np
.
arange
(
taps
+
1
)
-
0.5
*
taps
))
h_i
[
taps
//
2
]
=
np
.
cos
(
0
)
*
cutoff_ratio
# fix nan due to indeterminate form
# apply kaiser window
w
=
kaiser
(
taps
+
1
,
beta
)
h
=
h_i
*
w
return
h
...
...
@@ -77,24 +78,24 @@ class PQMF(paddle.nn.Layer):
Beta coefficient for kaiser window.
"""
super
().
__init__
()
h_proto
=
design_prototype_filter
(
taps
,
cutoff_ratio
,
beta
)
h_proto_len
=
paddle
.
shape
(
h_proto
)[
0
]
h_analysis
=
paddle
.
zeros
((
subbands
,
h_proto_len
))
h_synthesis
=
paddle
.
zeros
((
subbands
,
h_proto_len
))
h_analysis
=
np
.
zeros
((
subbands
,
len
(
h_proto
)))
h_synthesis
=
np
.
zeros
((
subbands
,
len
(
h_proto
)))
for
k
in
range
(
subbands
):
h_analysis
[
k
]
=
(
2
*
h_proto
*
paddle
.
cos
((
2
*
k
+
1
)
*
(
np
.
pi
/
(
2
*
subbands
))
*
(
paddle
.
arange
(
taps
+
1
)
-
(
taps
/
2
))
+
(
-
1
)
**
k
*
np
.
pi
/
4
)
)
2
*
h_proto
*
np
.
cos
((
2
*
k
+
1
)
*
(
np
.
pi
/
(
2
*
subbands
))
*
(
np
.
arange
(
taps
+
1
)
-
(
taps
/
2
))
+
(
-
1
)
**
k
*
np
.
pi
/
4
))
h_synthesis
[
k
]
=
(
2
*
h_proto
*
paddle
.
cos
((
2
*
k
+
1
)
*
(
np
.
pi
/
(
2
*
subbands
))
*
(
paddle
.
arange
(
taps
+
1
)
-
(
taps
/
2
))
-
(
-
1
)
**
k
*
np
.
pi
/
4
)
)
2
*
h_proto
*
np
.
cos
((
2
*
k
+
1
)
*
(
np
.
pi
/
(
2
*
subbands
))
*
(
np
.
arange
(
taps
+
1
)
-
(
taps
/
2
))
-
(
-
1
)
**
k
*
np
.
pi
/
4
))
# convert to tensor
self
.
analysis_filter
=
paddle
.
to_tensor
(
h_analysis
,
dtype
=
"float32"
).
unsqueeze
(
1
)
self
.
synthesis_filter
=
paddle
.
to_tensor
(
h_synthesis
,
dtype
=
"float32"
).
unsqueeze
(
0
)
self
.
analysis_filter
=
h_analysis
.
unsqueeze
(
1
)
self
.
synthesis_filter
=
h_synthesis
.
unsqueeze
(
0
)
# filter for downsampling & upsampling
updown_filter
=
paddle
.
zeros
(
(
subbands
,
subbands
,
subbands
),
dtype
=
"float32"
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录