Транспониране - част 1

Качено от mic на Mon, 08/18/2025 - 06:44

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

Ще използваме следната подготовка:

  • Пробна честота равна на 2000 Hz: Една ниска пробна честота прави графиките по-лесни.
  • Дискретизирано преобразуване на Фурие (DFT) с дължина 32: Въпреки, че DFT-то може да използва каквато и да е дължина, един типична преработка на аудио ще използва алгоритъма за бързото преобразуване на Фурие и за този алгоритъм трябва дължина, която е някаква степен на 2.
  • Застъпване на DFT равно на 75 процента: Не можем да изчислим DFT-то на целия сигнал и трябва да го направим на части (на кадри). За да получим един горе долу плавен резултат, тези части ще се застъпват. Ще напишем повече за това застъпване по-нататък.
  • Входна честота равна на 70 Hz: Няма нищо специално тук, но е добре да отбележим две неща. Първо, работим с един сигнал с една честота. На практика, сигналите ще съдържат много честоти. Изчисленията обаче са същите. Второ, ако пробната честота е 2000 Hz и DFT-то използва 32 проби (или "кофи"), тогава кофите в DFT-то са на всеки 2000/32 = 62.5 Hz. Така, 70 Hz не е точно в една от тези кофи на DFT-то. Транспонирането на една честота, която не е точно в една от кофите на DFT-то ще ни покаже някои проблеми при DFT-то, които иначе няма да видим.
  • Транспониране с 1.0594: Пак, няма нищо особено тук, освен това, че един полутон е 21/12 = 1.0594. Ще транспонираме 70 Hz с един полутон на около 74.2 Hz.
  • Прозорци: Ще използваме прозореца на Хан и при разлагането на сигнала с DFT-то, и при изграждането на един нов сигнал с обратното DFT. Ще пишем повече за това по-нататък.

Входен сигнал

Входният цифров сигнал тук е просто

$$f(k) = cos(\frac{2 \pi k 70}{2000})$$

където k са пробите (k = 0, 1, 2, …), 70 е честотата на сигнала и 2000 е пробната честота.

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

Ето първите 32 проби на сигнала.

Входен сигнал на 70 Hz

Сигналът може разбира се да продължи безкрайно.

Разлагане с DFT

Когато използваме DFT-то с дължина 32 върху тези 32 проби, можем да изчислим, че честотите на кофите на DFT-то имат следните амплитуди.

Амплитуди на входния сигнал за първата половина на честотите в DFT

Хоризонталната ос показва първата половина от кофите в DFT-то. Показваме само половината от DFT-то, а не всичките 32 кофи. Втората половина на DFT-то върху един сигнал с реални стойности произвежда същите стойности и е излишна.

Тъй като 70 Hz не е точно в една от кофите на DFT-то, имаме спектрална оттичане. Имаме амплитуди във всяка от кофите, въпреки че използваме само една честота. Това няма да пречи на нашето транспониране, защото ще използваме всичката информация и ще работим с всички кофи.

Тази графика не ни изненадва. 70 Hz е близо до втората кофа на DFT-то, при 62.5 Hz и повечето от амплитудата се появява там.

DFT-то произвежда и фазите на честотите във всяка кофа. Тези фази са много важни и ще пишем за тях по-нататък.

Ще наречем първите 32 проби първия кадър. При записаното аудио, сигналът ще се променя с времето. Не можем просто да разчитаме на първите 32 проби. Ще трябва да изчислим DFT-то не само за първите 32 проби, но и за следващите и следващите и така нататък докато разберем съдържанието на целия сигнал във времето. Така, ще работим кадър по кадър.

Прозорец на Хан

Изчислихме DFT-то на сигнала такъв, какъвто беше, но е по-добре да приложим един прозорец преди това. Ще направим това и ще изчислим DFT-то наново.

Ще използваме прозореца на Хан с дължина 32 и ще умножим стойностите на сигнала на всяка проба със стойността на прозореца на тази проба.

Ето сигнала след прозореца (непрекъснатата линия) до оригиналния сигнал (прекъснатата линия).

Входен сигнал със и без прозореца на Хан

Прозорецът на Хан потиска лявата и дясната страна на кадъра на сигнала.

Ще изчислим DFT-то на този нов сигнал, но също така:

  • Ще махнем първата кофа на DFT-то (нулевата честота), като направим нейната амплитуда нула. Прозорецът на Хан може да влоши тези стойности и да измести транспонирания сигнал.
  • Ще умножим получените амплитуда по кохерентната амплитуда на прозореца на Хан. Когато потиска страните на сигнала, прозорецът на Хан намалява амплитудата на сигнала с тази кохерентна амплитуда. Кохерентната амплитуда е просто средното на стойностите на прозореца на Хан и, за прозореца на Хан, е приблизително 0.5 (т.е., делим по 0.5).

    Ето амплитудите на кофите на DFT-то както бяха изчислени по-горе, без прозореца (колоните на точки) и с прозореца (плътните колони).

    Амплитуди на входния сигнал за първата половина от честотите на DFT, със и без прозореца на Хан

    Това може би изглежда по-лошо. Оригиналният връх на амплитудата сега се разпределя на две кофи.

    Но фокусирай се в кофите по-нататък.

    Амплитуди на входния сигнал за някои от честотите на DFT, със и без прозореца на Хан

    Прозорецът наистина премести амплитудите, които преди "протичаха" в по-високите кофи, обратно към по-ниските кофи, близо до входната честота от 70 Hz.

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

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

    автори: 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.