Eup*_*man 10 matlab signal-processing fft pitch-tracking
我试图找到一种方法来比较使用不同仪器上播放的相同音符的MATLAB短500毫秒录音的相似度.
详细介绍这个特定主题:我是一名音乐专业学生,其任务是客观地确定各种现代低铜乐器的音调,以确定哪种乐器应该取代过时的"ophicleide"或Bass keyed bugle.我首先使用它的光谱仪和其他6种仪器的视觉比较,但这种方法过于主观.
我用相同的麦克风,设备,增益级别和相同的音符录制了所有乐器.出于这个原因,我相信信号足够类似于使用MATLAB工具.
我认为比较这fft将是最准确的计算.我首先尝试了一个频域相关,并测试了相同音调的不同段(eu并且eu2是变量)
>> corr(abs(fft(eu)),abs(fft(eu2)))
ans = 0.9963
Run Code Online (Sandbox Code Playgroud)
这是朝着正确方向迈出的一步,但是当我比较不同的信号时,我似乎得到了相反的结果:(次中音和ophicleide声音几乎相同)
>> corr(abs(fft(eu)),abs(fft(ophi)))
ans = 0.5242
Run Code Online (Sandbox Code Playgroud)
次中音和低音单簧管声音完全不同,但这表明相关性较高
>> corr(abs(fft(eu)),abs(fft(basscl)))
ans = 0.8506
Run Code Online (Sandbox Code Playgroud)
我尝试了在网上找到的归一化最大互相关幅度公式,但我得到了相同的结果
>> norm_max_xcorr_mag = @(x,y)(max(abs(xcorr(x,y)))/(norm(x,2)*norm(y,2))); x =eu2; y = eu; norm_max_xcorr_mag(x,y)
ans = 0.9638
Run Code Online (Sandbox Code Playgroud)
比较其他样本时,我得到了类似的结果
>> norm_max_xcorr_mag = @(x,y)(max(abs(xcorr(x,y)))/(norm(x,2)*norm(y,2))); x = eu; y = basscl;
ans = 0.6825
Run Code Online (Sandbox Code Playgroud)
相比
>> norm_max_xcorr_mag = @(x,y)(max(abs(xcorr(x,y)))/(norm(x,2)*norm(y,2))); x = eu; y = ophi; norm_max_xcorr_mag(x,y)
ans = 0.3519
Run Code Online (Sandbox Code Playgroud)
Euphonium和Bass单簧管(basscl)具有完全不同的声音和完全不同的谐波系列,但这些公式显示出比次谐波和Ophicleide更接近的相关性,其频带看起来几乎完全相同.
我担心这些相关性显示真实音高的相关性(我在所有这些乐器上播放相同的音符,但是Ophicleide可能会失调高达1 Hz)它也可能是相位,甚至是总振幅.
在比较这些复杂波形的谐波泛音的比例时,有没有人知道更好的明确方法?
还是我吠叫错了树?
关于您的具体问题,您计算的数量本质上是光谱相干函数的最大值。问题在于,如果信号在统计上是平稳的,则频谱相干性只能很好地衡量两个信号之间的相关性。也就是说,如果信号中频率的概率分布不随时间变化。
不幸的是,乐器音符信号不太可能是静止的,因为对不同乐器上人耳“听起来”相同音符的差异进行分类时最重要的特征是由于谐波和调制而导致的,这些谐波和调制比可能的时间要长。随音符的持续时间而变化。
因此,您需要一个频域或时频域度量来更好地捕获音符频谱的非平稳部分之间的相似性,而不是使用频谱相干性。
此时,选择哪个 MATLAB 函数就不再是问题了(尽管查看信号处理工具箱文档中的此示例可能会帮助您入门,如果您有该工具箱的话)。它更多的是研究信号处理和特征分类技术的问题。在这里你真的必须查阅有关音乐声学的文献。这里只是一个抽象链接- 我无权访问 ACM,但如果您是学生,您可以通过您的大学访问。
祝你好运,解决这个听起来很有趣的问题!
| 归档时间: |
|
| 查看次数: |
828 次 |
| 最近记录: |