Реконструкція аудіосигналу від Спектрограми


19

У мене є набір пісень, для яких я витягнув спектрограму величин за допомогою Вікна Хеммінга з 50% перекриттям. Після вилучення спектрограми я здійснив деяке зменшення розмірності за допомогою аналізу основних компонентів (PCA). Зменшивши її до меншої розмірності, я реконструював спектрограми з нижчих розмірів. Отже, між початковою спектрограмою та реконструйованою спектрограмою була б якась помилка. Я хотів би перетворити цю спектрограму назад в аудіосигнал і відтворити її, щоб я міг знати, коли реконструюється з нижчих розмірів, як звучить звук.

Чи є якась функція, скажімо в Matlab. перетворити спектрограму величини в аудіосигнал ??


2
Ви дуже хочете STFT і зворотний STFT. "Спектрограма" - це лише назва теплової карти величини STFT, і однієї лише величини недостатньо для відновлення сигналу. Подивіться на mathworks.com/matlabcentral/fileexchange/12902-dafx-toolbox/… ?
ендоліт

4
Щоб розширити коментар @ endolith, те, чого вам не вистачає, коли ви переходите від STFT до спектрограми, - це фазова інформація, важлива складова представлення частотного домену вашого сигналу.
Бйорн Рош

значить, якщо я хочу реконструювати вихідний звуковий сигнал, мені потрібна амплітуда, а також фаза STFT? Але загалом для побудови аудіофункцій, | S | амплітуда складного немає - це те, що використовується, і фазова інформація відкидається. Я здійснив PCA на спектрограмі mel, яку я обчислював як M, є матрицею множення матриці фільтрабанок. так як ви відновити звуковий сигнал заданого X , наближення до X отримав після PCA? X=log(M|S|)X^
user76170

@endolith: Я спробував скористатись посиланням, яке ви надали mathworks.com/matlabcentral/fileexchange/12902-dafx-toolbox/… Я використовував інформацію про фази та амплітуду, тобто (складний як вхід до функції вище). використовуючи це, я спробував відтворити сигнал, і це звучало скупо. Чому це відбувається? Потім я обчислював норму між вихідним сигналом та сигналом, отриманим від зворотної процедури STFT, як зазначено вище, і він показав величезне значення 3,46 * 10 ^ 3. Будь-яка ідея, чому це відбувається ?? S
user76170

@ user76170: hoppy - це те, що STFT розбиває сигнал на кадри, іноді перекриваючись, і вам доведеться деконструювати їх так, як вони були побудовані, або на кожному з них будуть розриви. Ви використовували функції STFT та ISTFT із цього посилання? Подивіться на форму хвилі хотлого сигналу, щоб побачити, у чому проблема.
ендоліт

Відповіді:


15

Якщо спектрограму обчислювали як величину короткочасних перетворень чотириповерхових від вікон, що перекриваються , то спектрограма неявно містить деяку фазову інформацію.

Наступні ітерації виконують роботу:

xn+1=istft(Sexp(iangle(stft(xn))))

- спектрограма, stft - перетворення Фур'є в короткостроковому прямому напрямку, isft -перетворення Фур'єв зворотно-короткий час.Sstftisft


Я хотів би прокоментувати прямо на @edouard, але мені не вистачає репутації. Хтось знає, що у його відповіді? Також як би я ініціалізував х 0 ? Просто випадково? Чи x n - повний реконструйований сигнал при ітерації n або просто n- й коефіцієнт x ? Спасибі. ix0xnnnthx
PR

1
@PR Це одиничне уявне число, . 1
Пітер К.

3

Мені було важко зрозуміти відповідь @edouard, який робить правильно. Порівняйте з /signals//a/3410/9031 , яку я використав для своєї реконструкції.

Зауважте, що - уявне число, а x n - реконструйований сигнал на n- й ітерації. Почніть з x 0 як випадковий вектор довжини звукового сигналу. Для мене декількох ітерацій було достатньо, щоб отримати результат, який звучав добре. Абсолютна похибка вихідного сигналу була все-таки досить високою. Також сформована спектрограма I, що генерується з реконструйованого сигналу, хоча і показує однакові структури в цілому, мала зовсім інші величини.ixnnthx0


2

Ви можете використовувати реконструйовану спектрограму проти оригінальної спектрограми для створення фільтра, величина якого сигналу перетворює одну спектрограму в іншу. Потім ви можете застосувати цей фільтр до вихідних даних часової області або до оригінальних FFT для перекриття швидкого фільтрації згортання.


|S||S||S^|

2
Матриця спектрограми є втратною, тому її не можна використовувати для реконструкції. Але якщо ви можете змінити інженер трансформації для отримання потрібної спектрограми, ви можете застосувати її до оригінальних даних, що не втрачають часову область, або, можливо, до початкового складного результату FFT.
hotpaw2

S|S||S|

1
@ user76170 Довгий і короткий сенс полягає в тому, що вам потрібен складний STFT, перш ніж ви зможете відновити сигнал. Якщо у вас просто є величина STFT, цього недостатньо. З цього правила є винятки, але, як правило, вам потрібен складний STFT, а не просто величина.
Тарін Зіяее

|S||S^|

-1

Використовуйте алгоритм Griffin-Lim, щоб перевернути аудіосигнал із спектрограми, якщо вас не турбує складність обчислень.


Чи можете ви трохи розширити свою відповідь? Можливо, додайте репрезентативний документ або посилання на алгоритм і коротке пояснення того, наскільки це стосується цього питання (?)
A_A

Якщо я правильно розумію ваше запитання, коротко кажучи, ви хочете реконструювати звуковий сигнал із спектрограми без використання вихідної фазової інформації. Алгоритму Гриффіна-Ліма необхідна матриця спектрограми як вхідна та реконструююча фаза ітеративно. Ви можете посилатися на статтю ieeexplore.ieee.org/document/1164317
Jitendra Dhiman

Дякую, що повідомили. Просто для уточнення цього моменту. Ця відповідь вискакувала на черзі на огляд як "низька якість". Варіанти, які я маю з точки зору "огляду", включають надання коментарів для "покращення". Щоб ця відповідь відповідала типу відповідей, які часто зустрічаються в DSP.SE, потрібно було б трохи ознайомитися з алгоритмом Griffin Lim, щоб показати, наскільки це стосується того, що задає ОП. Будь-які майбутні зміни, ви можете звернутися безпосередньо до своєї відповіді. Суть у тому, щоб не задовольнити "мене" зокрема, це мати значущий набір освітлюючих відповідей на запитання
A_A

Найкраща відповідь - тут (використовуючи Griffin-Lim), якщо у вас немає оригінальної інформації про FFT. timsainb.github.io/…
Артемій
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.