我正在尝试按照以下给出的定义来实现和计算三合会(及其谐波)的音调张力:https://pdfs.semanticscholar.org/f05e/56c9548fa18c64efeed248742e3a6afb0c02.pdf
单个三合会的张力由下式给出:t=v*exp[-((y-x)/alpha)^2]
,其中y=log(f3/f2)
和x=log(f2/f1)
和f3>f2>f1
,其中f1,f2,f3
是3个分量的频率三合会的。
这是同一代码的2个版本,一个考虑了赫兹频率的差异(如论文定义中所建议),第二个代码实现了相同的功能,但不是赫兹,而是半音(我解释了为什么代码示例)。
1)第一版:
function [tension] = tension(f1,f2,f3)
Fdif1 = log(f2/f1);
Fdif2 = log(f3/f2);
alpha = 0.60;
tension = exp(-(((Fdif2 - Fdif1)/alpha))^2);
end
2)第二版:
function [tension] = tension(f1,f2,f3)
Fdif1 = round(music.freq2cent(f1,f2))/100;
Fdif2 = round(music.freq2cent(f2,f3))/100;
alpha = 0.60;
tension = exp(-(((Fdif2 - Fdif1)/alpha))^2);
end
在第二个版本中,我正在使用此库:https://it.mathworks.com/matlabcentral/fileexchange/26509-musical-notes?focused=5145250&tab=function
第一个代码对我来说似乎是正确的,但是按照上面提到的论文中的实验数据(例如,单个三重音的张力,没有音调,所以只有三个正弦波),我一点都不懂在图表中提到(论文的图6)。
我在做什么错?我认为这可能是域的不匹配:张力的定义是在纯频率差上给出的,而(在本文的图5中)张力的高斯函数在半音差上起作用。
因此,我决定实施第二版代码(将半音作为差异值考虑),并且我获得的结果与高斯图(本文图5)一致,但仍然与张力中提供的数据不匹配。模型图如图6所示。
可能是什么问题?
PS:我从以下答案中得到了启发:https://music.stackexchange.com/questions/4439/is-there-a-way-to-measure-the-consonance-or-dissonance-of-a-chord/6556#6556?newreg=b8a315477e404f34984a65b7d96f2f49,我想扩展搜索范围,以实现各种论文中提到的其他算法。