Една фаза на вокодер в Matlab

Original document: http://sethares.engr.wisc.edu/vocoders/phasevocoder.html

Какво представлява фазовият викодер?

Фазовият вокодер е вариант на кратковременната трансформация на Фурие, която използва фазова информация за подобряване на оценките на честотата. Той е идеален за използване в приложения като разтягане на времето и / или компресия на времето в аудио, въпреки че съществуват редица други специални ефекти, които могат да бъдат реализирани с помощта на стратегия за фазов вокодер. Този уеб сайт описва фазовия вокодер и представя изпълнение в Matlab, заедно с редица добри примери, които демонстрират операцията. Ако искате повече подробности (и по-добре изглеждащи математически формули), тогава можете изтеглете глава от Ритъм и трансформира който описва PV и STFT (между другото).

Кратковременният сигнален процесор на Фурие трансформира (STFT) е метод за анализ / синтез, който започва с прозореца на сигнала в къси сегменти. FFT се прилага за всеки отделен сегмент и получената спектрална снимка може да бъде манипулирана по различни начини. След желаните спектрални промени, ресинтезата се обработва от обратната FFT, за да се върне всеки сегмент към времевия домейн. Модифицираните сегменти след това се сумират. За специалния случай, при който не се правят спектрални манипулации (както е показано), изходът на STFT е идентичен на входа.

Разрешаването на честотата на FFT е:

(1) резолюция в Hz = (скорост на вземане на проби) / (размер на прозореца).

При типичната употреба, опората на прозореца (район, по който е ненулева) е между 512 и 4096 проби. Използвайки среден прозорец с размер 2048 и честота на вземане на проби от 44,1 KHz, честотата на разделителната способност е около 21,5 Hz. Това може да е достатъчно, за да се определят високи честоти (където 21,5 Hz е малък процент от въпросната честота), но е твърде груб в ниския край. Една ниска нота на пианото може да има фундаментално близо 80 Hz. Резолюцията на тази FFT е добра само в рамките на 25%! За сравнение, разстоянието между последователните бележки на пианото е постоянно 6%.

Има ли начин да се подобри честотата разделителна способност на СТЪПКА, без прекомерно да навреди на времето разделителна способност? За щастие отговорът е “да”. Фазовият вокодер прави подобрени оценки на честотата, като използва фазова информация, която STFT пренебрегва.

За да видите как аналитичната част на PV може да използва фазова информация за подобряване на честотата, предполагайте, че има синусоида с неизвестна честота, но с известни фази: в момент t1 синусоида има фаза theta1 и в момент t2 има фаза theta2. Ситуацията е изобразена вляво. Синусоидът може да има честота, която го премества директно от theta1 към theta2 във времето t2-t1. Или може да започне от theta1, да се движи напълно около кръга и да завърши в theta2 след една пълна революция. Или пък може да се върти два пъти или n пъти. С други думи, честотата, умножена от промяната във времето, трябва да е равна на промяната в ъгъла, т.е. 2 pi f (t2-t1) = theta2 – theta1 или около 2 pi multiple. Решаването на f дава

(2) fn = (theta2 – theta1 + 2 pi n) / (2 pi (t2-t1))

за цялото число n. Без повече информация не е възможно уникално да се определи f, въпреки че е ограничена до една от горните стойности.

Фазовият вокодер използва уравнението (2) чрез локализиране на общ пик в спектъра на величината на две различни кадри. След това избира fn, който е най-близо до честотата на този пик. Това е показано схематично вдясно, където се приема, че сигналът е единичен синусоид, който обхваща интервала от време, през който се правят изчисленията. Резултатът от прозореца е колекция от къси синусоидални изблици. FFT се прилага за всеки пакет, което води до магнитуд и фазови спектри. За случая на чист синусоиден вход, спектрите на магнитуд на последователните спектри са същите (както е показано). Но фазовите спектри се различават и те осигуряват необходимите стойности на theta1 (фазата, съответстваща на пика на първия спектър на магнитуд ) и theta2 (фазата, съответстваща на пика на спектъра на втората величина). Времевата разлика t2-t1 може да бъде определена директно от дължината на прозореца, фактора на припокриване и скоростта на вземане на проби. Тези стойности след това се заместват в (2) и fn, който е най-близо до честотата на пика, е оценката на честотата на PV.

За да видите PV в действие и да дадете представа за неговата точност, разгледайте проблема с оценката на честотата на 220 Hz синусоида, използвайки 2K FFT (приемайки скорост на вземане на проби от 44,1 KHz и използване на припокриване от 2). Съгласно уравнение (1), разделителната способност на FFT е 21,5 Hz, т.е. е възможно само да се намери честотата на синусоида до около 10 Hz. Всъщност близките честоти, които са точно представени, са 193,8, 215,3 и 236,9, както е показано в разширяването на спектъра на магнитуда по-горе. Тъй като пикът при 215.3 е най-големият, възниква действителна грешка от 4.7 Hz, когато се използва само магнитутът на FFT. PV подобрява това, като използва фазовата информация. Фазите, съответстващи на пиковете при 215.3 са theta1 = 1.1833 и theta2 = 1.8662 и така

fn = (theta2 – theta1 + 2 pi n) / (2 pi (t2-t1)) = ((1.8662-1.1833 + 2 pi n) / (2 pi 0.023)

При тези стойности първите шест fn са 47.7472, 90.8136, 133.8800, 176.946, 220.0129 и 263.0793. Ясно е, че петият термин е най-близък до 215.3, а грешката в оценката на честотата е 0.0129, което е огромно подобрение спрямо 4.7 Hz. Този вид точност е типичен и не е просто цифрова грешка. В действителност, Puckette и Brown [5] показват, че при определени условия (за сигнал, състоящ се от единичен синусоид и с t2-t1, съответстващ на единична проба) оценката на фазовия вокал на честотата е тясно свързана с максималната вероятност приблизителна оценка.

В по-сложни ситуации, когато входният сигнал се състои от много синусоидални вълни, фазовите манипулации се повтарят за всеки пик поотделно, което е оправдано, докато пиковете са адекватно разделени по честота. След като анализната част е завършена, е възможно да смените сигнала по различни начини: чрез промяна на скоростта, през която преминава времето (разстоянието между изходите се различава по различен начин от входните паузи), чрез промяна на честотите в сигнала (така че изходът ще съдържа различни честоти от входа), като добавя или изважда частици.

Резинтеза с помощта на фазовия викодер

След като модификациите са завършени, е необходимо да се синтезира изходната форма на вълната. Една възможност е да се използва ясен синтез на добавки, където частиците (всеки с желаната честота и амплитуда) се генерират поотделно и след това се сумират заедно. Това е изчислително интензивно, когато има голям брой частици. За щастие, има по-добър начин: PV създава комплексен (честотен) вектор. Това може да бъде обърнато с помощта на IFFT и произтичащите изходни паузи са преместени във времето и сумирани като в STFT.

Спецификацията на магнитудния спектър на изхода е ясна, тъй като може да се наследи директно от входа. Фазовите стойности са избрани, за да се осигури приемственост на най-изявените части чрез последователни изблици, както е показано вдясно за единичен синусоид.

За всеки пик j в магнитудния спектър, необходимата фаза може да бъде изчислена директно от честотата fj и времевия интервал между кадъра k и кадъра k-1. Това е

theta_k ^ j = theta_k-1 ^ j + 2 pi fj (t_k – t_ {k-1}).

Също така е необходимо да изберете близките фази (тези под един и същ пик в спектъра на магнитуд). Ако те са избрани да бъдат theta_k ^ j + mod (n, 2) pi (където n е броят на кошчетата, далеч от пиковата стойност), генерираните от IFFT разрушаване ще бъдат прозорци със заострени краища, както вдясно. Например, във фазовите спектрални графики по-горе, стойностите отляво и отдясно на theta1 и theta2 са (приблизително) either pi или 0 далеч.

Можете да намерите моята версия на фазов вокодер тук. Можете също изтеглете глава от ритъм и трансформации който съдържа повече подробности за работата на STFT и PV.

Някои препратки и връзки за фазовите прозвучители

Фазови вокадори, базирани на банки от (аналогови) филтри, бяха въведени от Flanagan [1] за компресиране на речевите сигнали. Portnoff [2] показа как една и съща идея може да се реализира дигитално чрез FFT, а наръчникът на Dolson [3] помогна за привличането на метода към вниманието на компютърната музикална общност. Последната работа, като Laroche [4], се фокусира върху фина настройка на частта на resynthesis на алгоритъма за различни приложения, като например промяна на стъпката и разтягане на времето. Освен това моето въвеждане на PV, има две други версии на Matlab в мрежата: вижте pvoc и pvoc.m. на Брандорф и Молър-Нилсен. Също така е забележим графичният интерфейс на Klingbeil, наречен SPEAR (синусоидален частичен редакторски анализ и ресинтеза).

[1] J.L. Flanagan и R.M. Golden, “Phase vocoder”, ” Bell система Технически дневник, 1493-1509, 1966.
[2] М. Р. Portnoff, “Изпълнение на цифровия фазов вокодер, използващ бързата трансформация на Фурие”, IEEE Trans, Акустика, реч и обработка на сигнали, том ASSP-24, № 3, юни 1976.
[3] M Dolson, “Фазовият vocoder: урок,” ” Компютърна музика вестник, Пролет, Vol. 10, No. 4, 14-27, 1986.
[4] J. Laroche и M. Dolson, “Подобрена фазова кодиране във времето на викодер на аудио”, IEEE Trans върху обработката на аудио и говор, том 7, № 3, май 1999.
[5] М. С. Пукет и Дж. С. Браун, “Точност на оценките на честотата при използване на фазовия вокодер”, IEEE Trans.
Реч и аудио обработка, том. 6, No. 2, March 1998.

За да стигнете до началната си страница, кликнете тук.

Shares