Это то, что мы называем в бизнесе по определению высоты тона, « проблема октав ».
Прежде всего, я бы поменял AMDF на ASDF. И я бы не стал уменьшать размер окна по мере увеличения лага. (Кроме того, я меняю обозначение на то, что считаю более условным. " x[n] " - это сигнал с дискретным временем.)
Среднеквадратичная разностная функция (ASDF) для x[n] в окрестности выборки x[n0] равна:
Qx[k,n0]≜1N∑n=0N−1(x[n+n0−⌊N+k2⌋] − x[n+n0−⌊N+k2⌋+k])2
-функция, и если k четное, то ⌊ k⌊⋅⌋floor()
k .⌊k2⌋=⌊k+12⌋=k2
Теперь, расширить площадь и рассмотреть то , что сложения выглядеть , как (не то, что N является уходящим в бесконечность, но , чтобы дать вам представление о том , если N велико). ASDF напрямую связан с автокорреляцией. Это по сути автокорреляция перевернутая с ног на голову. Эти шаги я оставлю вам. взгляните на этот ответ.N→∞N N
Итак, теперь рассмотрим эту «автокорреляцию» конечной длины (в окрестности выборки ), определенную из ASDF:x[n0]
Rx[k,n0]=Rx[0,n0]−12Qx[k,n0]
где
Rx[0,n0]≜1N∑n=0N−1(x[n+n0−⌊N2⌋])2
Поскольку и Q x [ k , n 0 ] ≥ 0 для всех лагов k , это означает, что R x [ k , n 0 ] ≤ R x [ 0 , n 0 ] для всех лагов к .Qx[0,n0]=0Qx[k,n0]≥0kRx[k,n0]≤Rx[0,n0]k
Предположим, что в течение минуты является периодическим с периодом P (а P оказывается целым числом), тогдаx[n]PP
x[n+P]=x[n]∀n
и и R x [ m P , n 0 ] = R x [ 0 , n 0 ] ≥ R x [ k , n 0 ] для любого целого числа периодов ( m представляет собой целое число). Таким образом, вы получите пик при k = 0 и при k, равный любому другому кратному P, если xQx[mP,n0]=0Rx[mP,n0]=Rx[0,n0]≥Rx[k,n0]mk=0kP является периодическим. Если x [ n ] неявляетсяидеально периодическим, мы можем ожидать, что это самый большой пик при k = 0 , другой пик (но немного меньший) при k = P (период, который мы ищем) и прогрессивно меньшие пики для больших кратных значений. P .x[n]x[n]k=0k=PP
Таким образом, проблема октавы возникает по нескольким причинам. Прежде всего, не обязательно является целым числом. Это проблема интерполяции, а не проблема. P
Вторая причина и более сложная проблема - проблема субгармоник . Предположим, что вы слушаете хороший периодический тон с частотой A-440 Гц, и он звучит как A, который на 9 полутонов выше среднего C. Теперь предположим, что кто-то добавляет к этому тону очень малую амплитуду (например, до 60 дБ) A -220? Как это будет звучать и математически, что такое «истинный» период?
Выбор «правильного» пика за период.
Допустим, вы пропустили заметку через фильтр блокировки постоянного тока, так что среднее значение равно нулю. Оказывается, что среднее значение автокорреляции R x [ k , n 0 ] для каждого n 0 также становится равным нулю (или близко к нему, если N большое). Это означает, что R x [ k , n 0 ] должно суммироваться (через k ), чтобы быть около нуля, что означает, что область выше нуля такая же, как и нижеx[n]Rx[k,n0]n0NRx[k,n0]k
Итак, представляет степень x [ n ] в окрестности вокруг n = n 0 и должна быть неотрицательной. R x [ k , n 0 ] никогда не превышает R x [ 0 , n 0 ], но может быть таким же большим, как оно, когда x [ n ] является периодическим. R x [ P , n 0 ]Rx[0,n0]x[n]n=n0Rx[k,n0]Rx[0,n0]x[n] если x [ n + P ] = x [ n ] . Поэтому, если x [ n ] является периодическим с периодом P, и у вас есть группа пиков, разнесенных на P, и у вас есть представление о том, насколько высокими должны быть эти пики. И если постоянная составляющая R x [ k , n 0 ] равна нулю, это означает, что между пиками онадолжнаиметь отрицательные значения.Rx[P,n0]=Rx[0,n0]x[n+P]=x[n]x[n]PPRx[k,n0]
Если был «квазипериодическим», один цикл x [ n ] будет очень похож на соседний цикл, но не так, как цикл x [ n ] дальше вниз по сигналу во времени. Это означает, что первый пик R x [ P , n 0 ] будет выше, чем второй при R x [ 2 P , n 0 ] или третьем R x [ 3 P , n 0 ]x[n]x[n]x[n]Rx[P,n0]Rx[2P,n0]Rx[3P,n0], Можно использовать правило, чтобы всегда выбирать самый высокий пик и ожидать, что самый высокий пик всегда будет первым. Но из-за неразборчивых субгармоник иногда это не так. иногда второй или, возможно, третий пик немного выше. Кроме того, поскольку период , скорее всего, не является целым числом выборок, а k в R x [ k , n 0 ] всегда является целым числом, поэтому истинный пик, вероятно, будет находиться между целочисленными значениями k . Даже если бы вам пришлось интерполировать, где находится гладкий пик (который я рекомендую, и квадратичная интерполяция достаточно хороша), и насколько он на самом деле высокий между целыми числами kPkRx[k,n0]kkВаш интерполяционный алгоритм может сделать пик немного выше или немного ниже, чем он есть на самом деле. Таким образом, выбор абсолютного максимума может привести к тому, что второй пик окажется выше первого (или наоборот), когда вы действительно захотите другой.
Так что каким-то образом вы должны гандикапить пики при увеличении чтобы первый пик имел небольшое преимущество перед вторым, а второй - над четвертым (следующая октава вниз) и т. Д. Как вы это делаете?k
Это можно сделать , что путем умножения с убывающей функцией к так , что пик при K = 2 , P уменьшается на некоторый коэффициент, по отношению к идентичным пика при к = Р . Оказывается, что степенная функция (не экспоненциальная) делает это. так посчитатьRx[k,n0]kk=2Pk=P
k−α Rx[k,n0]
Таким образом, если были идеально периодическими с периодом P и игнорировали вопросы интерполяции для нецелого P , тоx[n]PP
Rx[2P,n0]=Rx[P,n0]
но
(2P)−αRx[2P,n0](2P)−αRx[P,n0]=<P−αRx[P,n0]
Коэффициент, на который уменьшается пик на одну октаву ниже, является отношением
(2P)−αRx[2P,n0]P−αRx[P,n0]=(2P)−αP−α=2−α
α
2−α=0.99
Это последовательный способ взвесить или ослабить или ослабить пик, соответствующий субгармонической высоте на одну октаву ниже.
α