我想尽早检测吉他上的和弦,但我使用滑动窗口和滤波器组的方法似乎引入了太多延迟。
通过使用只有有限数量的音调和有限数量的同时音调的模型,所需的观察时间会减少吗?(即吉他的不同琴弦)。
我认为,要使系统不被低估,样本的数量必须至少与吉他弦的数量一样多,并且时间窗口必须至少与音调的时间尺度相同。最短的时间。或者样本的数量可能必须至少与模型空间的维度相同(大约 6 * 20)?并且麦克风的幅度分辨率以及最慢的频率可能也会设置限制?
我想尽早检测吉他上的和弦,但我使用滑动窗口和滤波器组的方法似乎引入了太多延迟。
通过使用只有有限数量的音调和有限数量的同时音调的模型,所需的观察时间会减少吗?(即吉他的不同琴弦)。
我认为,要使系统不被低估,样本的数量必须至少与吉他弦的数量一样多,并且时间窗口必须至少与音调的时间尺度相同。最短的时间。或者样本的数量可能必须至少与模型空间的维度相同(大约 6 * 20)?并且麦克风的幅度分辨率以及最慢的频率可能也会设置限制?
我认为这是要走的路。如果您进行傅立叶变换,则必须进行权衡,这是薛定谔不确定性原理的一种变体:如果您查看非周期性信号,则时间窗口越短,您的频谱定义就越不明确。
但你也可以这样想:你可能想知道低至 100 Hz 的频率。这意味着该信号的一个周期将花费 10 毫秒,您可能希望观察几个周期以真正确定该频率存在,并且您不只是在压力中移动,因为-一个时间函数。所以你必须预料到,如果这是你感兴趣的频率区域开始的地方,你将无法比大约 100 毫秒的时间窗口短得多。我不知道这是否是您担心的那种时间滞后,但没有办法比这更快地确定音调和和弦。
我会补充一些其他的想法。首先,我假设您并不完全需要确定吉他音色的最快方法(“尽可能早”),而只需要一种在相当短的延迟下运行良好的方法。
所以你需要一些数值方法来输入你的吉他音色样本并输出主频率(同时忽略其他高次谐波)。有几种方法可以做到这一点,其中包括傅里叶变换、小波变换和谐波反演。其中,傅里叶变换是我开始尝试的基本方法。
所以你插入你的字符串,记录它,并应用傅里叶变换。首先,正如@WolfgangBangerth 的回答中提到的那样,您的 FT 需要某种时间窗口(从“现在”开始的固定持续时间)。这是因为当你改变曲调时,你想要得到一个新的结果,而不是前一个曲调和新曲调的叠加。更一般地说,您可能想要应用特定的窗口函数(如“汉明”等),因为这会使信号周期性地产生,从而消除频率范围内的伪影(以扩大峰值为代价)。
当你从 FT 得到结果时,你必须找出主调的位置,即最大的峰值,这必须自动完成。为此,可以应用进一步的方法,例如插值、频率平均等。
先前的方法对应于单音。当你想确定和弦时,基本上可以多次重复相同的过程。但是,我认为问题会变得相当困难,因为您必须将谐波与“真实”插入音调分开,并且还要忽略不相关的伪影。