有没有办法将所有频率加倍?

信息处理 信号分析 算法
2022-02-07 04:48:33

假设我有一个如下所示的输入信号:

f(t)=sin(2π(2)t)+sin(2π(3)t)+sin(2π(5)t)

在此处输入图像描述

我想要一个输出信号,它可以按比例按比例缩放每个频率。在这里,我将所有内容缩放“2”倍:

在此处输入图像描述

有没有办法做到这一点?频域如下所示:

在此处输入图像描述 在此处输入图像描述

2个回答

这通常被称为“音高转换”,它通常是重新采样和时间拉伸/压缩的组合。重新采样是直截了当的,但时间拉伸/压缩有点棘手,最佳方法取决于应用要求、信号特性和您需要的拉伸/压缩量。请参阅http://blogs.zynaptiq.com/bernsee/time-pitch-overview/https://en.wikipedia.org/wiki/Audio_time-scale/pitch_modification开始

下面是 Stephan M. Bernsee 用 C 语言编写的一个简单而有价值的教程函数的链接,名为smbPitchShift.cpp,它可以提高或降低音乐信号的音高。

我还可以在不改变音高的情况下使用它来减慢或加快音乐的速度。如果您想在不改变原始音高的情况下进行时间拉伸,则可能必须应用重新采样。

自 GitHub 上链接的版本以来,Bernsee 似乎对他的代码进行了一些更改。他的新代码可以从他的网站下载——它可能会增加从他的原始规范转换的范围。我调整了他的原始代码,以便可以将音调提高 8 倍。

https://github.com/AndyA/BatPhone/blob/master/pitchshift.c

http://blogs.zynaptiq.com/bernsee/time-pitch-overview/