Диссертация (1149825), страница 12
Текст из файла (страница 12)
Построим два последовательных звена КЭК-сплайнов. Пусть u =4, si−1,0 = 1.8, si0 = 1.6, si+1,0 = 0.3, si+2,0 = 0.1 и si+3,0 = −1.5. Тогда научастке [ti0 , ti+1,0 ] разностные производные равны hi = hi+1 = −0.1875, а звеносплайна получится C[i,i+1] (m) = 0.0171875m3 − 0.103125m2 − 0.1875m + 1.6. Научастке [ti+1,0 , ti+2,0 ] имеем hi+2 = −0.225 и C[i+1,i+2] (m) = −0.01953125m3 +0.1125m2 − 0.1875m + 0.3.Рис.6. Линейная и квазиэрмитова кубическая интерполяции.75На рисунке 6 представлены два последовательных звена сплайнов, полученных линейной и квазиэрмитовой кубической интерполяцией на отрезке[ti0 , ti+2,0 ]. Вертикальные пунктирные линии соответствуют отсечкам сигналана новой сетке узлов.На рисунке 6 хорошо видно, что доставляемые КЭК-сплайном S3,2 значения выходного сигнала, в сравнении с линейным сплайном S1,1 , в исходныхузлах дадут меньшие конечные разности второго порядка.
В силу теоремы 3.1это означает более высокий уровень гладкости при использовании S3,2 сравнительно с S1,1 , который благоприятнее для фильтров.Теорема 3.2 показывает, что получение дополнительных сэмплов в дополнительных узлах посредством линейной интерполяции приводит к увеличениювторых производных в окрестностях исходных узлов, в то время как интерполяция с помощью КЭК-сплайнов не порождает таких возмущений. Программная реализация интерполяционных алгоритмов на основе линейных и КЭКсплайнов показала, что отсутствие таких возмущений благоприятно для качественного воспроизведения звука.“Родные” частоты АЦП–ЦАП ZET 230 давали следующие возможностиумножения частот: двух- и четырехкратное от 22050 Гц к 44100 Гц и к 88200Гц, и трехкратное с 32000 Гц к 96000 Гц.
Во всех трех случаях дополнительные сэмплы (1, 3, 2, соответственно) вставлялись в выходной файл с помощьюинтерполяции двух видов: линейной и квазиэрмитовой кубической. По сравнению с линейной интерполяцией, при интерполяции КЭК-сплайнами получалсяболее чистый звук, то есть в нем было снижено дребезжание и прочие шумы,что позволяло распознавать на слух выходной сигнал с субъективно меньшимнапряжением и концентрацией внимания.
Что и ожидалось, поскольку КЭКсплайны в сравнении с линейными подготавливают выходной сигнал, лучшеподходящий для дальнейшего аппаратного сглаживания в ЦАП.76§3.3. Восстановление звукового давленияВыходной звуковой файл будет получаться слиянием сэмплов для интерполяции и дополнительных сэмплов в единый поток согласно формулеO(ui + l) = sil ,l = 0, ..., u − 1,i = 0, ..., N − 1.Полученные на моменте m два оптимальных периода TH , TL связаны с оптимальной частотой ωH из высокочастотного диапазонов и оптимальной фун2πдаментальной частотой формулой ω =.
В низкочастотном диапазоне помиTмо основной гармоники с частотой ω1∗ существуют обертоны, вычисляемые поформуле ωj∗ = jω1∗ ,j = 2, ..., P .Изменению фаз гармоник ζ1 , ..., ζP , ζM , ζH при переходе от одной отсечкик соседней соответствует умножение текущих частот гармоник на временнойинтервал между соседними отсечками. Так как масштаб времени выбран таким, что этот временной интервал равняется единице, фазы увеличиваются насоответствующие частоты, умноженные на 2π. При желании увеличить частоты гармоник в λ раз это увеличение следует умножить на λ. После полученияна i-м шаге коэффициентов интерполяционных полиномов согласно формулам(3.7), (3.8) вычисляется выходное звуковое давление на сэмплах si0 , ..., si,u−1следующим образом.
Вычисляются рекуррентно фазы отсечекm′ = ui + l,l = 0, ..., u − 1ζj (m′ ) = ζj (m′ − 1) + λ2πωj∗ ,j = 1, ..., P,ζH (m′ ) = ζH (m′ − 1) + λ2πωH .(3.21)(3.22)(3.23)При l = 0 будет m′ − 1 = ui − 1 = ui − 1 + u(i − 1), то есть расчет по формулам(3.21), (3.22), (3.23) начинается с использования значений фаз с последнего узлаинтерполяции с предыдущего (i − 1)-го шага. Индекс m′ является номеромотсечки выходного файла, индекс m — номер отсечки входного файла.
Междуними имеется связь m′ = m − m0 . Сдвиг m0 появляется, потому что анализ77начинается только с отсечки с номером, равным этому сдвигу. А так как анализи заканчивается не доходя до конца файла на величину этого сдвига, то m′ ∈[0, N − 2m0 − 1] в то время, как m ∈ [m0 , N − m0 − 1].Восстановление сигнала в моменты m′ ∈ [0, N ′ ], N ′ = N − 2m0 − 1, (см.(3.21)) с измененными в λ раз частотами гармоник осуществляется с помощьюрасчетной формулыsil =P∑ρ∗j (ui + l) sin ζj (ui + l) + ρ∗M (ui + l) sin ζM (ui + l) + ρ∗H (ui + l) sin ζH (ui + l).j=1(3.24)Руководствуясь идеей 2, изложенной на стр.
13, при λ ∈ (0, 1) в (3.22) и(3.23) имеет место ускорение темпа воспроизведения, при λ > 1 — замедление.Как уже говорилось на стр. 17, человек не различает фазы гармоник вмонозвуке. Поэтому для синтеза вместо использования всех 2P + 1 параметров z ∗ достаточно обойтись P + 1 значением δ0∗ , ρ∗1 , ..., ρ∗P из δ ∗ , связанного с z ∗преобразованием (2.22).Глава 4.ОПИСАНИЕ ВЫЧИСЛИТЕЛЬНОГОАЛГОРИТМА§4.1. Анализ входного потокаОбщая схема анализа представлена на рисунке 7.Рис.7. Общая схема. Начало.7879Жирным шрифтом отмечены те параметры, которые используются внескольких блоках, в том числе и не указанных на рисунке 7.Сначала выполняется чтение входного WAV-файла.
От него в объект Headпередаются поле RIFF-типа и поле формата fmt (см. стр. 20), в параметр Size— число сэмплов цифрового аудиосигнала, в массив WorkR записываются этисэмплы. См. §1.4.Объект Head используется в “инициализации” и в “записи файла”. В “инициализации” он формирует граничные значения диапазона целочисленных периодов [mmin, mmax] согласно формуле (2.45). В “записи файла” в объекте Headчастота дискретизации уменьшается в acc раз, а сам объект Head назначаетсязаголовком выходного WAV-файла.Параметр Size уменьшается на 2n0 сэмплов и используется в процедуреRegularAnalysis и “запись файла”. В процедуре RegularAnalysis он участвуетформировании цикла по n, в котором на каждом шаге происходит оптимизация по периодам. В “записи файла” параметр Size является числом сэмпловвыходного WAV-файла.Массив WorkR поступает в процедуры InitialAnalysis и RegularAnalysis.В них он участвует в формировании массива оптимальных объединенных амплитуд M.После чтения входного WAV-файла выполняется инициализация.
В немзадаются следующие параметры:• mmin – минимальное значение диапазона целочисленных периодов,• mmax – максимальное значение диапазона целочисленных периодов,• n0 – начало анализа,• Shift – шаг интерполяции,• nWdiscr – число узлов-периодов сетки,• P – число анализируемых гармоник,80• acc – коэффициент акселерации.Значения параметров mmin, mmax вычисляются автоматически через указанную в объекте Head частоту дискретизации, значения параметра n0 вычисляется автоматически через mmax. Значения параметров задаются Shift,nWdiscr, P и acc задаются пользователем.После инициализации выполняется процедура InitialAnalysis в отсечкахm0 , m0 + u, m0 + 2u (рисунок 7a).Рис.7a. Схема процедуры InitialAnalysis.В процедуру InitialAnalysis входят процедуры NetPeriodFilling, Scanner,OptimisationOfPeriod и PhaseShift.81В процедуре NetPeriodFilling происходит определение шага step целочисленной сетки mm и заполнение этой сетки.В процедуре Scanner производится Грубая оптимизация (см.
стр. 58). Выходным значением процедуры является параметр mmax — индекс опорного узлацелочисленной сетки.В процедуре OptimisationOfPeriod производится Оптимизация периолов(см. стр. 59) с возможным подключением Грубой оптимизации. Выходнымизначениями процедуры являются• a – массив оптимальных амплитуд последней отсечки по всем гармоникам,• phase – массив оптимальных фаз последней отсечки по всем гармоникам,• phaseprev – массив оптимальных фаз предпоследней отсечки по всем гармоникам,• m – оптимальный период последней отсечки,• Nodes – частотно-амплитудный массив,• Mw – массив частот.В процедуре PhaseShift из массива оптимальных амплитуд a получаетсямассив оптимальных объединенных амплитуд aHalf согласно следующей формуле√aHalf j = a22j+1 + a22j+2 ,j = 0, ..., P − 1с дальнейшим включением этих амплитуд в частотно-амплитудный массивNodes и массив объединенных амплитуд M, которые и являются выходнымизначениями процедуры.После процедуры InitialAnalysis в каждой из отсечекm0 + 3u, m0 +4u, ..., m0 + (N − 1)u выполняется процедура RegularAnalysis (рисунок 7b).82Рис.7b.
Схема процедуры RegularAnalysis.В процедуру RegularAnalysis входят процедуры OptimisationOfPeriod иPhaseShift. Принцип их работы такой же, что и в процедуре InitialAnalysis.83§4.2. Синтез выходного потокаПроцедура RegularAnalysis выполняется в цикле по n от n0 + 3Shift до Size − n0с шагом Shift (рисунок 8).Рис.8. Общая схема.
Окончание.Сначала в процедуре Averaging происходит “прокручивание” частотноамплитудного массива Nodes, массива объединенных амплитуд M и массивачастот Mw: элементы каждого массива со второй позиции (ее индекс равен 1)до последней смещаются последовательно в позиции с первой (ее индекс равен0) до предпоследней.В процессе “прокручивания” массива M копится сумма всех его элементов.После чего вычисленное на ее основе среднее арифметическое записывается восвободившееся последнее место частотной строки массива Nodes. Аналогичное вычисление среднего арифметического делается в массиве Mw с последу-84ющей записью в освободившиеся последние места амплитудных строк массиваNodes. В освободившиеся последние места массивов M и Mw записываются, соответственно, массив оптимальных объединенных амплитуд aHalf и ускореннаяоптимальная частота 2πacc/m, полученные в процедуре RegularAnalysis.После i-го выполнения процедуры Averaging, i = 0, ..., N − 1, выполняется процедура Synthesis для моментов времени, которые соответствуют отсечкамвходного файла m0 + (i + 1)u, m0 + (i + 1)u + 1, ..., m0 + (i + 2)u − 1.
Соответствующие отсечке m0 + (i + 1)u значения частоты и амплитуд хранятся вмассиве Nodes, соответствующие остальным отсечкам значения частоты и амплитуд получаются после интерполирования согласно формулам (3.6), (3.7) и(3.8). Затем по формулам (3.21), (3.22) и (3.23) находятся фазы всех этих отсечек, а по формуле (3.24) в каждой из этих отсечек вычисляется значениевыходного звукового давления.