我正在尝试为钢琴执行自动音高跟踪。当只有一个音符被按下时,很容易检测到音符。钢琴上有88 个键,我将结果设置为其中一个。由于八度偏移,可能会出现分类错误。例如,我找到了 52 而不是 40。它们都是 C,但 52 高一个八度。我可以通过对结果执行中值滤波来消除大部分八度音阶偏移。
但是当我转向复音音高跟踪时,它会令人困惑。当有多个音符被压在一起时,在时间 t 检测到的音高数量可能不同。
例如,labels(f,t)
如果在时间 t 检测到音符 f,则为 1,并使其二进制矩阵labels
如下
labels = 0 0 0 0 1 ...
1 1 0 1 0 ...
0 1 0 0 1 ...
.............
0 0 1 0 1 ...
.............
0 0 0 0 1 ...
让检测到的音符对应如下:
labelsAsNotes = 2; 2 3; 14; 2; 1 3 14 88; ...
在这种情况下如何进行中值过滤?你有其他的建议来消除八度变化吗?