Sample-based engine noise synthesis using an enhanced
pitch-synchronous overlap-and-add method
链接: Sample-based engine noise synthesis using an enhanced
pitch-synchronous overlap-and-add method
作者:Jan Jagla, Julien Maillard, Nadine Martin
摘要
提出了一种内燃机噪声实时合成算法。通过分析记录的发动机转速连续变化的发动机噪声信号,提取声音样本数据集,从而实时合成由任意演变引起的噪声。引擎速度。声音样本是从跨越整个发动机转速范围的录音中提取的。每个样本都经过界定,以包含引擎一个循环期间发出的声音以及必要的重叠,以确保合成期间的平滑过渡。所提出的方法是引入语音处理的 PSOLA 方法的扩展,利用引擎噪声信号的特定周期性来定位声音样本的提取时刻。在合成阶段,对应于目标发动机转速演变的声音样本通过重叠和相加算法连接起来。结果表明,该方法以低计算负载产生高质量的音频恢复。因此,它非常适合实时应用。
简介
城市地区道路交通噪声的预测在文献 1{6. 这些研究大多集中在道路交通噪声水平的估计上。然而,听者对车辆发出的声音的舒适度或不适感不仅取决于感知到的声级,还取决于与声场的频谱内容和时间特性相关的更复杂的指标. 这种方法也称为计算声音场的可听化 7,8. 在交通噪音的情况下,入籍过程涉及三个主要任务:源信号(例如引擎和滚动噪声)的合成,它们的滤波以模拟声音传播和每个单独贡献的空间渲染。本文重点研究发动机噪声信号合成。 这里描述的技术正在申请专利。
2001 年,Amman 和 Das[9] 提出了一种基于确定性-随机信号分解的引擎噪声合成方法,广泛用于语音处理。确定性部分使用加法合成进行分析和重新合成,然后从输入信号中减去以分离和分析随机分量。在合成阶段,傅里叶域中的逐帧加法合成和多脉冲激发自回归模型用于生成确定性和
分别是非平稳发动机声音的随机分量。HARTIS(谐波实时合成)软件中使用了类似的信号分解[10]。 在这种方法中,谐波部分也是通过加法合成来合成的,而随机部分是通过平滑重叠颗粒合成方法生成的。 这两种方法在合成过程中涉及至少一个傅里叶逆变换,这使得它们不太适合实时应用。
Van Rensburg [11] 于 2006 年引入了另一种与语音处理相关的方法。它使用相位声码器通过时间缩放和给定转速下单个发动机声音的音高变化来模拟变速发动机噪声。这个的主要缺点方法是假设发动机噪声谐波的相对幅度与发动机的转速无关。Heitbrink [12] 提出了一个该方法通过使用不同转速下的变桨发动机声音信号的加权和来克服这个问题。
最近,Zhekova [13] 提出了一种模拟柴油发动机怠速噪声的方法。 它基于使用 Gabor变换及其导数的时频分析来估计一个粒度的输入参数。
通用合成算法。虽然这种方法可以精确表征发动机怠速循环期间产生的声音,但它尚未扩展到其他发动机速度。
另一项研究 [14] 讨论了按顺序组合不同速度和负载的发动机声音样本的可能性。但是,没有描述构建样本数据集的方法。 作者还提到必须从大量记录中创建数据集。
当前的论文提出的方法基于重叠相加 (OLA) 信号处理算法的原理及其一些扩展,例如同步 OLA 方法 (SOLA) [15]、音高同步 OLA 方法 (PSOLA) [16,17] 和波形相似性 OLA 方法 (WSOLA)[18]。
所有这些方法最初都是为语音处理而开发的,更具体地是为语音的音高尺度和时间尺度修改而开发的。然而,在这些先前的工作中,从一个输入信号中提取的声音样本总是以相同的顺序出现在合成信号中。请注意,即使在上述技术被引入语音之前,Lent [19] 就描述了一种用于音乐信号的时间尺度和音高偏移的音高同步方法。
本技术创建相对于它们的基频排序的声音样本的数据集。数据集的构建使得基频的任何连续演变都可以通过重叠和添加声音样本来实时合成。对于 PSOLA 或 Lent 的方法,声音样本的输入信号中的提取时刻(也称为音高标记)以音高同步的方式选择。然而,发动机噪声信号的基频分量是随时间变化的,并且经常被低频噪声所掩盖。 因此,不能直接应用 PSOLA 和 Lent 方法的音高标记定位过程。
本文组织如下。 第二节介绍了发动机噪声信号的结构和本研究中考虑的发动机噪声模型。 第三节概述了现有的 OLA 方法并描述了所提出的分析/综合方案。第四节详细介绍了所提出算法的分析部分,包括记录声音信号的瞬时基频(音高)的估计,音高标记的位置和样本提取窗口的形状。
第五节描述了所提出算法的综合部分,包括重叠加法、样本选择和算法计算效率的讨论。第 VI 节介绍了对所提出的音高标记选择模型的验证以及与 WSOLA 方法的比较。最后,关于这项工作的结论在第六节中提出
Ⅱ 输入信号
A 发动机噪音特性
在下文中,为了简单起见,考虑四冲程内燃机,因为它用于大多数量产汽车、卡车和摩托车。二冲程发动机仍在低功率摩托车中使用,但它们对环境的影响迫使制造商推广其四冲程发动机。
独立于气缸的数量和它们的布置,由于在每个气缸的燃烧室中发生的顺序爆炸,发动机噪声基本上是谐波的。 四冲程发动机的爆炸频率 Fex 由下式给出
F
e
x
=
N
c
2
r
p
m
60
,
(
1
)
F_{ex} = \frac {Nc}{2} \frac {rpm} {60}, (1)
Fex=2Nc60rpm,(1)
其中
N
c
Nc
Nc是发动机的气缸数,
r
p
m
rpm
rpm是每分钟的转数。对于四缸发动机,每个气缸周期性地发生爆炸,发动机每转两次爆炸。 而对于六缸发动机,发动机每转一圈会发生 3 次爆炸。 在实践中,Fex 的谐波是发动机噪声的主要成分。
两个连续的爆炸不会发生在同一个气缸中,因此并不相同。 此外,两个连续的发动机旋转不包含相同气缸的爆炸。 因此,另外两个频率及其谐波丰富了发动机声音的频谱,
F
e
n
=
r
p
m
60
,
(
2
)
F_{en} = \frac {rpm}{60}, (2)
Fen=60rpm,(2)
F
c
=
1
2
r
p
m
60
,
(
3
)
F_c = \frac {1}{2} \frac {rpm}{60}, (3)
Fc=2160rpm,(3)
其中
F
e
n
F_{en}
Fen 是对应于发动机转数的频率,而
F
c
F_c
Fc 是对应于发动机一个完整周期(两转)的基频。作为说明,图 1 显示了以 2,000 rmp 转速运行的四缸发动机发出的噪声频谱。 方程式给出的不同频率的位置。 图 1 中也描述了图 1 至图 3 的情况。
B. 发动机噪音记录
本文提出的分析-综合方法需要一个特定的发动机噪声记录作为分析阶段的输入。这样的录音可以通过在发动机舱附近放置一个麦克风并在可用的发动机转速范围内不挂档运行发动机来获得。足以确保其在至少一个周期持续时间内的局部平稳性。此外,录音必须足够长,以便分析算法可以提取足够多的不同声音样本进行合成。这个问题将在第 IV.C 节中进一步讨论。
C. 信号模型
在这项工作中,内燃机发出的噪声应该完全由其基频来表征。 恒速下的发动机噪声可以建模为
x
F
0
[
n
]
=
∑
k
A
F
0
,
k
s
i
n
(
2
π
k
F
0
F
s
n
+
ϕ
F
0
,
k
)
+
w
F
0
[
n
]
,
(
4
)
xF_0[n]=\sum_{k}A_{F_0,k}sin(2\pi \frac {kF_0} {F_s} n+ \phi_{F_{0,k}} ) + w_{F_0}[n], (4)
xF0[n]=k∑AF0,ksin(2πFskF0n+ϕF0,k)+wF0[n],(4)
其中 n 是离散时间索引,
F
0
=
F
c
F_0 = F_c
F0=Fc 为基频,
A
F
0
,
k
A_{F_0, k}
AF0,k 和KaTeX parse error: Expected '}', got 'EOF' at end of input: \phi_{F_{0,k}分别是谐波的幅度和初始相位,
w
F
0
[
n
]
w_{F_0}[n]
wF0[n]是发动机噪声的随机分量。
图.1. 以 2200 rpm 运行的四缸发动机发出的声音信号的低频成分频谱。
谐波分为三个包含性的族( F e x F_{ex} Fex 的谐波也是 F e n F_{en} Fen 的谐波,它们是 F c F_c Fc 的谐波)以强调它们的物理起源。 分量 F c F_c Fc 和 2 F c 2F_c 2Fc被噪声掩盖。 (线上色)
Ⅲ. 分析-综合法
A. 现有的 OLA 方法
与引擎噪声信号不同,语音信号不能仅由它们的基频来定义,即使是谐波浊音区域也必须由它们的共振峰来表征。 然而,用于语音处理的现有OLA算法的各种分析方法的原理也可用于创建适用于发动机噪声信号合成的样本数据集。由于这些方法是我们方法的基础,下面简要介绍一下它们的原理。
现有的 OLA 方法从输入信号中提取声音样本,并通过重叠相加重新排列它们以实现预期的信号修改。在下文中,将声音样本从输入信号中定位和提取称为分析阶段,将新信号的构建称为合成阶段。提取的声音样本的输入信号中的位置称为音高标记,遵循 PSOLA 术语。
由 Roucos 和 Wilgus [15] 引入的 SOLA 系统用于语音的时间尺度修改,在分析阶段从输入信号中异步提取声音样本。在合成阶段,提取的样本与自相关技术同步以保持音调周期。该算法确保了良好的恢复质量,但需要在合成阶段计算相关函数,这对于实时应用来说不是最佳的。
Verhelst 和 Roelands [18] 提出的 WSOLA 系统试图最大化原始语音和合成语音之间的波形相似性。调整要提取的每个声音样本的位置,以使其与添加到合成信号的最后一段的输入信号中的自然连续性的互相关最大化。
在 Moulines 和 Charpentier [16] 开发的 PSOLA 系统中,通过检测语音信号的声门脉冲,将基音标记与本地基音周期同步放置。这允许通过与不同基音周期同步地重叠和添加提取的样本来合成基音偏移信号。正如 Moulines [20] 所讨论的,OLA 操作的感知效果很难理解。在 PSOLA 系统的特定情况下,Kortekaas [17,21] 研究了这些对恒定基频自然语音的影响。对于变化的基频信号,这些方法的效果更难以预测。
Lent [19] 为音乐信号引入的方法使用与 PSOLA 框架类似的时间缩放和音高移动方法,但也提供了一种有趣的音高标记定位方法。它包括确定输入信号的基频并通过带通数字滤波器滤除该分量。滤波信号的过零提供了有关输入信号周期性的信息。 尽管这种方法仅限于具有固定基频的信号,但它允许提取音乐信号的单个周期。
B. 一种新的 PSOLA 发动机噪声方法
为了解释这些噪声的特定谐波结构,提出了一种新的发动机噪声信号分析合成框架。 它可以看作是 Lent 方法的扩展版本。 我们提出了一种适用于具有不同基频的信号的音高标记定位方法,包括特定的声音样本提取算法和合成方法。
这种新的分析合成方案的目的是合成发动机发出的声音,以适应其转速 (rpm) 的任意变化,前提是提供跨越发动机整个 rpm 范围的记录。 一个重要的限制是最小化合成阶段的计算负载以实现实时应用, 此外,特别注意可能被连接的声音样本之间的相位匹配。假设发动机中的气缸数已知,则建议的音高标记位置能够放置音高标记,以便从输入信号中提取的所有声音样本在同一气缸中的爆炸时开始。
它将表明,由于保留了谐波,该特性极大地增强了合成信号的保真度。
分析阶段旨在从输入信号中以等间距的基本频率迭代地收集声音样本
F
0
i
=
F
0
m
i
n
+
i
(
F
0
m
a
x
−
F
0
m
i
n
)
/
(
M
−
1
)
,
i
=
0..
M
−
1
(
5
)
F^{i}_0 = F^{min}_0 +i(F^{max}_0-F^{min}_0)/(M-1), i=0..M-1 (5)
F0i=F0min+i(F0max−F0min)/(M−1),i=0..M−1(5),
其中
M
M
M 为要提取的声音样本总数。
第 1 步是估计输入信号基频的演变。 请注意,只要它跨越感兴趣的频率范围,它就可以任意变化。 由于基频经常丢失或难以检测,因此该步骤最好通过估计最高能谐波
k
A
m
a
x
F
0
k_{Amax}F_0
kAmaxF0 的演变来执行。
在步骤 2 中,使用选择性时变通带滤波器从输入信号中提取该分量。滤波器的中心频率在每个样本处更新以匹配局部
k
A
m
a
x
F
0
k_{Amax}F_0
kAmaxF0 估计。理想情况下,产生的信号是根据
k
A
m
a
x
F
0
k_{Amax}F_0
kAmaxF0 演变在频率和幅度上调制的单个正弦曲线,并与输入信号保持同相。它提供了发动机噪声周期性的方便表示。 事实上,每个周期对应于气缸中两次连续爆炸之间的持续时间。
在第 3 步中,放置音高标记,以便每个声音样本都从同一个缸体中的爆炸开始。在实践中设置
k
A
m
a
x
=
N
c
k_{Amax} = N_c
kAmax=Nc,它们被放置在步骤 2 中获得的滤波信号的每个
N
c
t
h
N^{th}_c
Ncth 周期开始时的输入信号中。对于每个频率
F
0
i
{F_{0_i}}
F0i,选择单个音高标记作为对应于最接近基频的那个。
在步骤4中,对于每个选定的音高标记,从输入信号中提取具有适当时间窗口的声音样本。 加性噪声
w
F
0
w_{F0}
wF0(参见方程(4))是用信号的谐波部分自然提取的,不需要额外操作 正如Jones 和 Parks [22] 所讨论那样。
一旦创建了声音样本的数据集,就可以合成基频的任意演变。 样本选择和重叠相加构成合成阶段。关于分析和综合阶段的详细信息分别在第四节和第五节中给出。
Ⅳ. 分析
A. 第 1 步:瞬时基频估计
时变基频的估计通常被称为语音和音乐信号处理中的音调跟踪。文献中存在多种稳健的方法 [23-25]。 Zahorian 在 YAAPT 方法 [25]中引入的一项特殊功能,即频谱谐波相关函数 (SHC),似乎特别适合发动机噪声的基频跟踪。在目前的工作中,该方法的一个简化版本主要基于 SHC 函数用于跟踪
k
A
m
a
x
F
0
k_{Amax}F_0
kAmaxF0频率分量。更具体地说,我们的方法没有利用 Zahorian 引入的非线性信号预处理或动态规划步骤。以约 90% 的高重叠率逐帧分析信号。 为每一帧更新帧长度以包含前一帧估计频率的整数个周期。对于我们的录音,在实践中发现 20 个周期的值是合适的。这种选择源于信号的平稳性假设(取决于转速变化率)和估计精度之间的权衡。事实上,帧必须足够长以实现良好的频率分辨率,但也必须受到限制,以便可以认为频率
k
A
m
a
x
F
0
k_{Amax}F_0
kAmaxF0在帧长度上是静止的。 帧
t
t
t 的
k
A
m
a
x
F
0
k_{Amax}F_0
kAmaxF0估计是通过评估 SHC 函数来执行的:
S
H
C
[
t
,
f
]
=
∑
f
′
=
−
W
L
/
2
W
L
/
2
∏
r
=
1
N
H
+
1
S
[
t
,
r
f
+
f
′
]
,
(
6
)
SHC[t,f] =\sum^{WL/2}_{f' = -WL/2} \prod^{N_H+1}_{r=1}S[t,rf + f'], (6)
SHC[t,f]=f′=−WL/2∑WL/2r=1∏NH+1S[t,rf+f′],(6)
其中
S
[
t
,
f
]
S[t,f]
S[t,f] 是帧
t
t
t在频率
f
f
f 处的幅度谱,
W
L
WL
WL 为频率谱窗口长度,
N
H
N_H
NH为谐波数。请注意,f 和 rf + f0 的值是离散的,其间距取决于 FFT 长度和采样率。上述
S
H
C
[
t
,
f
]
SHC[t, f]
SHC[t,f]函数对应于帧
t
t
t 频谱在整数倍处的高幅度。 因此,
S
H
C
[
t
,
f
]
SHC[t,f]
SHC[t,f] 的局部最大值是帧
t
t
t中频率
k
A
m
a
x
F
0
k_{Amax}F_0
kAmaxF0的潜在值。
在发动机噪声的情况下,可以做出额外的假设来减少估计误差。 频率 kAmaxF0 的演变是连续的,因此我们建议将帧 t 的估计限制为帧 (t-1) 的估计。在每一帧,
S
H
C
SHC
SHC函数仅针对最后估计的频率值附近的一个小频率间隔进行计算。此外,如果基频演化适中并且帧之间的重叠率足够,则可以轻松地将该间隔减小到仅包含一个局部最大值. 此属性确保估计值不会翻倍或减半; 图 2 显示了 4 Hz 间隔宽度和 10 个连续帧。
不同的输入参数值为发动机噪声提供了令人满意的结果。 在这项研究中,
N
H
N_H
NH设置为 4,
W
L
W_L
WL设置为 10 Hz。图 3 显示了使用这些参数值的算法性能,用于四缸发动机噪声信号。
由于上述过程是迭代的,因此需要对算法进行特定的初始化来设置初始频率值和帧长度。 通过计算较大频率间隔的第一帧的 SHC 函数,可以轻松估计该值。
图 . 2. 发动机噪声信号段上 kAmaxF0 频率的估计。 (左)十个连续帧的 SHC 函数。 (右)作为时间函数的相应 kAmaxF0 频率估计。 搜索间隔设置为前一帧估计值附近的 $\plusmn 2$ Hz。
![在这里插入图片描述](https://img-blog.csdnimg.cn/faa4022214104b10ac22dbfbea4f595e.png#pic_center)
图. 3. 四缸发动机噪声信号的频谱图。 实线是通过简化的 YAAPT 方法获得的 $k_{Amax}F0$(爆炸频率)的估计值。 信号以 Fs = 44:1 kHz 采样,其频谱图是使用 200 ms 的帧零填充到 32768 个样来计算FFT. 使用了 50% 重叠的 Hann 窗。 请注意,为清楚起见,频谱图仅显示低于 1000 赫兹。在频谱图的右侧,彩色部分表示最后一个信号帧的谐波位置,如图 1 所示:$F_{ex}$ 的(红色)谐波、$F_{en}$ 的(绿色)谐波和 $F_c$ 的(蓝色)谐波。
分析阶段需要了解输入信号每个瞬间的基频。用标准三次插值方法对每帧估计的频率值进行插值,以获得输入信号的每个样本处的瞬时基频估计值。
B. 第 2 步:提取主要谐波
谐波提取方法主要用于源分离和语音增强系统。每个扬声器的音高演变被确定并用作自适应通带梳状滤波器的输入[26]。这些方法已经证明了它们从嘈杂环境中提取谐波信号的效率,但它们不能满足我们应用的特定要求。在本方法中,仅对主要谐波执行谐波提取,它必须是选择性的并且不引入相位延迟。
如第 III.B 节所述,提取的信号理想地是根据
k
A
m
a
x
F
0
k_{Amax}F0
kAmaxF0 频率分量的变化在频率和幅度上调制的单个正弦曲线。图 4 显示了一段四缸发动机噪声及其提取的主要谐波
4
F
0
4F_0
4F0。它说明了过滤过程的要求。后者必须有足够的选择性来衰减相邻的谐波
(
k
A
m
a
x
−
1
)
F
0
(k_{Amax} -1)F_0
(kAmax−1)F0 和 KaTeX parse error: Expected '}', got 'EOF' at end of input: …k_{Amax + 1)F_0 并且不得引入相位延迟,以使滤波后的信号与输入信号保持同相。因此,在气缸中爆炸瞬间的定位中不会引起偏差。这些顾虑将滤波器的选择导向了数字巴特沃斯带通滤波器27。在滤波过程中,带通中心频率在每个样本处更新以匹配
k
A
m
a
x
F
0
k_{Amax}F0
kAmaxF0 估计值。 滤波器通带的宽度也在每个样本处更新为
[
(
k
A
m
a
x
−
0.5
)
F
0
(
k
A
m
a
x
+
0.5
)
F
0
]
[(k_{Amax} - 0.5)F0 (k_{Amax} + 0.5)F0]
[(kAmax−0.5)F0(kAmax+0.5)F0],以便滤除相邻的谐波。
图. 4. 以 44:1 kHz(灰色)采样的四缸发动机噪音片段。 提取频率 $4F_0$(黑色)的主要谐波。 数字 1 到 4 表示在垂直虚线限定的时间间隔内发生爆炸的气缸。 请注意,第一个数字是随机分配的,与发动机中的特定气缸无关。
在离散时间和,为中心频率估计计算的阶巴特沃斯滤波器由其 Z 变换定义为
H
n
(
z
)
=
∑
k
=
0
n
b
k
n
.
z
−
k
a
k
n
.
z
−
k
,
(
7
)
H^n(z) = \sum ^{n}_{k=0} \frac{b^{n}_k . z^{-k}} {a^{n}_k . z^{-k}}, (7)
Hn(z)=k=0∑nakn.z−kbkn.z−k,(7)
其中b^{n}_k . z^{-k}} 和{a^{n}k . z^{-k}}分别为滤波器系数的分子和分母。它们源自使用双线性变换[27]的巴特沃斯滤波器的模拟表达式。由于滤波器截止频率
[
(
k
A
m
a
x
−
0.5
)
F
0
[(k_{Amax} - 0.5)F0
[(kAmax−0.5)F0和$ (k{Amax} + 0.5)F0]$与采样频率 44:1 kHz 相比较低,因此 Hn(z) 的极点接近单位圆,为避免增加滤波器阶数时的稳定性问题,输入信号被下采样 10 倍,采样频率为 4:41 kHz,阶数 N 被限制为四。滤波处理后,采用三次插值法对信号进行上采样,恢复原始采样率
输入信号。 我们假设重采样伪影可以忽略不计。
如果 x[n] 是离散时间引擎噪声信号并且 y[n] 滤波后的信号,滤波过程由差分方程建模
y
[
n
]
=
∑
k
=
0
N
x
[
n
−
k
]
b
k
n
−
∑
k
=
0
N
x
[
n
−
k
]
a
k
n
,
(
8
)
y[n] = \sum^N_{k=0} x[n-k] b^n_k - \sum^N_{k=0} x[n-k] a^n_k, (8)
y[n]=k=0∑Nx[n−k]bkn−k=0∑Nx[n−k]akn,(8)
中心频率为 50 Hz 的巴特沃斯滤波器设计的特性如图 5 所示。巴特沃斯带通滤波器的一些优点是通带中的频率响应和中心频率的零相位延迟。因此,输出信号与输入信号同相。 然而,kAmaxF0 频率演化估计的不确定性可能会导致提取的谐波分量的非零相位延迟。这是由于接近中心频率的滤波器相位响应的陡峭斜率(参见图 5)。 因此,上一节中描述的频率估计的精度对于提取具有零相位延迟的主要谐波至关重要。
图.5. 中心频率为 50 Hz 和通带 [43:75 56:25] Hz 的四阶巴特沃斯滤波器的响应:(上)幅度、(中)相位延迟和(下)群延迟。
四阶巴特沃斯滤波器的选择性不是很高。如上所述,增加滤波器的阶数会使其不稳定。 因此,已经研究了通过相同的时变巴特沃斯滤波器对提取的谐波进行两次滤波的可能性。这种操作增加了过滤过程的选择性,因此增加了主要谐波分量的真实周期性的精度,但它也使由频率估计的不确定性和群延迟引起的相位延迟加倍。 最后,似乎两次过滤信号并不能提高整个过程的质量。
由过滤过程引起的群延迟是不可忽略的。 主要谐波分量携带的能量延迟了大约 100 个样本(输出信号被上采样后大约 23 ms)。然而,在我们的应用程序中,只要不增加过滤器阶数,这种影响并不重要。 事实上,如图 4 所示,只有
k
A
m
a
x
F
0
k_{Amax}F0
kAmaxF0 频率分量的相位与其周期有关。