Транспониране – част 2

Качено от mic на Sun, 08/24/2025 - 09:20

В предишната статия, използвахме дискретизираното преобразуване на Фурие (DFT) за да изчислим амплитудите и фазите в един сигнал. В тази статия ще транспонираме тези амплитуди и фази. В следващата статия ще изградим един нов, транспониран сигнал.

Използвахме една проста честота равна на 70 Hz. На практика, сигурно няма да знаем точно какви честоти съществуват в нашия сигнал и затова създаваме един алгоритъм, който работи за всеки сигнал.

Прегледай една кофа на DFT на първия кадър

Повечето от амплитудата, изчислена с DFT в предишната статия, се появява в кофа 1. Да прегледаме тази кофа.

Изчислената амплитуда е 0.954. Вече е разделена на кохерентната амплитуда на прозореца на Хан.

Фазата е -0.369.

С пробната честота равна на 2000 Hz и дължина на DFT равна на 32, кофа 1 е при честотата 62.5 Hz.

Знаем, че входната честота е 70 Hz, но в една реална ситуация няма да знаем това. Това, което знаем, са само трите парчета информация: честотата 62.5 Hz с амплитуда 0.954 и фаза -0.369.

Прегледай същата кофа на DFT на втория кадър

За първия кадър, взехме DFT-то на пробите от 1 до 32. За втория кадър, ще вземем DFT-то на един нови 32 проби. В част 1, писахме за кадри на DFT, които се застъпват с 75% и, така, ще се преместим с by 25% или 8 проби. Ще вземем DFT-то на пробите от 9 до 40.

За същата честота на кофата равна на 62.5 Hz (кофа 1), получаваме амплитудата 0.965 и фазата -2.118.

Ето защо фазата е важна. Фазата между първия и втория кадър на DFT-то се променя с -1.749, от -0.369 до -2.118. Ако това обаче действително е честотата 62.5 Hz, за 8 проби, фазата трябва да се промени с -2 π 8 * 62.5 = -1.571.

Следователно, не работим с честотата 62.5 Hz. Работим с честотата 62.5 – (-1.749 – (-1.571)) * 2000 / (2 π * 8) = 69.6 Hz.

Заради прецизността, това не е точно входната честота 70 Hz, но е близко.

На кратко, когато имаме повече от един кадър, можем да използваме промяната във фазата за да изчислим действителната честота, която се носи в DFT-то. Не е задължително да работим само с честотите на DFT-то.

Транспониране на първия кадър

За да създадем един транспониран сигнал с обратното DFT, трябва да имаме амплитуда и фаза за всяка кофа на DFT-то. Ще ги изчислим за първия кадър, кофа 1.

Първият кадър не е като другите кадри. Преди него няма нищо. Не можем да изчислим действителната честота. В кофа 1, можем само да транспонираме 62.5 Hz на 66.2 Hz, като умножим с 1.0594 (един полутон).

Ще оставим амплитудата на 0.954, както е изчислена по-горе.

Фазата е по-трудна. Можем да направим фазата 0 във всички кофи, като че ли работим с един сигнал, който току що започва. Имаме обаче някаква информация за фазата. Можем да използваме фазата, както е изчислена от DFT-то: -0.369 в кофа 1. Това е по-добре, но пренебрегва това, че имаме няколко кофи с нови, транспонирани честоти.

Нека да работим, като че ли има един кадър преди това. В кофа 1, този несъществуващ предишен кадър ще има същата честота (транспонираната 66.2 Hz) и фазата 0. Текущият кадър – първият кадър – след 8 проби за 66.2 Hz ще има фазата -1.664. Това изчисление разпознава, ще различните честоти в кофите работят заедно във времето.

За първия кадър, в кофа 1, транспонирания сигнал ще има:

  • Честота: 66.2 Hz
  • Амплитуда: 0.954
  • Фаза: -1.664.

Транспониране на втория кадър

Новата честота е транспонираната действителна честота. 69.6 * 1.0549 = 73.7 Hz.

Амплитудата е тази, която е изчислена от DFT-то: 0.965.

Да изчислим фазата. Ако честотата е 73.7 Hz, очакваме, че фазата след 8 проби ще се промени с 2 π 73.7 8 / 2000 = -1.853. Ще добавим това към фазата на същата кофа в предишния кадър (-1.664) за да изчислим новата фаза: -3.517.

За втория кадър, в кофа 1, транспонираният сигнал ще има:

  • Честота: 73.7 Hz
  • Амплитуда: 0.965
  • Фаза: -3.517.

Транспониране на целия сигнал

Продължаваме с тези изчисления за всяка кофа в DFT-то и за всеки следващ кадър, като се местим със всеки кадър с 8 проби. Имаме амплитудите и фазите на транспонирания сигнал за всеки кадър. Това е достатъчно за да изчислим новия сигнал във всеки кадър. Транспонираните честоти, въпреки че ги изписахме по-горе, не са важни. DFT-то знае само своите собствени честоти на кофите.

Бележки

Тъй като фазите се събират за всички кадри, добре е да сме сигурни, че няма да се прекалено големи. Намаляваме събраната фаза при всеки кадър до нещо между 0 и 2 π като добавяме или изваждаме толкова пъти 2 π, колкото е необходимо.

Действителната честота се изчислява от честотата на DFT-то и разликата между това, как очакваме фазата на честотата на DFT-то да се промени и как фазата на действителната честота се променя. В това изчисление, ако искаме действителната честота да е близо до честотата на кофата на DFT-то, можем (изкуствено) да смалим тази промяна във фазата като също добавим или извадим няколко пъти 2 π. Правим тази разлика във фазата да е в интервала между -π и π.

А ако транспонирането е голямо? При едно голямо транспониране, можем да използваме още стъпки: слагаме транспонираните амплитуди и фази в други кофи – тези, които са по-близо до транспонираната действителна честота.

А ако искаме да запазим формантите? Без да правим всичко прекалено сложно, едно просто нещо е да транспонираме само определени честотни интервали, а не целия резултат от DFT-то. Ако например транспонираме вокали и за да опростим всичко тук, може да транспонираме само честотите до 1.2 kHz.

Следващите стъпки

Може вече да си забелязал, къде точно става транспонирането. Транспонирането не е заради новите, транспонирани честоти. Обратното DFT не знае нищо за тях. Обратното DFT използва своите собствени честоти, с амплитуди с наново изчислени амплитуди и фази.

Транспонирането става заради правилното изчисление на фазата. Във всеки кадър, изчисляваме една фаза, която представлява транспонираната честота. Върху много застъпващи се кадри, събираме сигнала от малки парчета. Всяко парче се мести с една фаза, която е правилна за транспонираната честота. Ще видим това в следващата статия.

автори: mic

Добави нов коментар

Filtered HTML

  • Freelinking helps you easily create HTML links. Links take the form of [[indicator:target|Title]]. By default (no indicator): Click to view a local node.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.
Image CAPTCHA
Enter the characters shown in the image.