获取我的歌声的包络和音高曲线

信息处理 fft 希尔伯特变换 沥青 嗓音 信封
2022-02-27 11:38:09

在将这两个信号输出到我的模拟合成器之前,我希望实时哼唱到麦克风中并通过 dsp 产生我正在哼唱的包络和音高。这个合成器需要一个门和一个 cv 信号。

Control Voltage/Gate 是一种使用外部音序器控制合成器、鼓机和其他类似设备的模拟方法。控制电压通常控制音高,栅极信号控制音符开关(或 ASDR)。

我试图找出适合建立这两个信号的算法。我尝试使用滑动布莱克曼窗口和零填充。我应用 fft 来提取这些窗口的音高和响度。我使用的是 8kHz 的采样率,我在大约两个八度范围内哼唱旋律。

我想知道其他方法。我已经阅读了一些关于希尔伯特变换的内容,并注意到它用于查找窄带信号的包络。我是否正确地说我的声音不适合这种情况,因为它包含多个谐波?在应用 ifft 之前,我可以带通频谱(fft 窗口)中的基本谐波吗?一个音符的起音部分通常富含高次谐波,这又如何呢?如果可以选择带通滤波,我想我需要对此进行补偿。我可以使用希尔伯特方法吗?还有其他建议吗?

3个回答

为什么要使用语音控制模拟合成器?大概是因为您想要合成器补丁的“声音”以及声音的可表达性。或者只是为了让它工作的乐趣。

有什么方法可以直接(或以某种方式破坏)您的声音作为一个(或)«振荡器»避免明确的音高跟踪?我的意思是,您仍然可以跟踪滤波器截止的音高,但这对准确性可能不太重要。您仍然可以通过对语音包络设置阈值(或直接应用它)来触发包络生成器。

我很好奇 Roland 在他们的“重新合成”吉他音色的 VG-8 系列中做了什么。

零填充 FFT 不是(近)实时准确估计音高的最佳方法。我建议研究其他音高检测/估计算法(大量文献和研究论文),例如插值自相关、AMDF、YAAPT、倒谱、谐波积、相位声码器等,看看其中一种算法是否更符合您的确切要求要求。

一旦有了音高估计,您就可以对单个或小整数个音高周期内的波形能量求和,因为这将包括所有谐波,即使基频能量很低或缺失。使用整数周期将减少可能出现在非整数周期倍大小的 FFT 幅度中的窗口伪影(扇形或所谓的“泄漏”)的数量。

测量包络的希尔伯特方法最适用于窄带信号,但不知道或无法提取确切的周期性。人类的歌声很少(如果有的话)是窄带的。

高音发声的“起音”部分可能不仅谐波丰富,而且音高暂时模糊(例如,不是纯粹的周期性,甚至不考虑包络)。

您应该在时域中完成所有操作。我不会打扰任何FFT。甚至没有得到自相关。

我有几个关于使用平均平方差函数的答案,这是 AMDF 方法的一种变体。可以反转 ASDF 以获得良好的自相关函数,然后问题是进行良好的峰值拾取和跟踪您的音高。

对于幅度,我认为您想对平方信号运行加权平均值(这意味着一些在 DC 处增益为 0 dB 的低通滤波器)平滑滤波器并在其上获得包络。但也有对信号绝对值起作用的移动最大值。 不要对绝对值进行平滑过滤。