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


19

У меня есть набор песен, для которых я извлек спектрограмму величины, используя Окно Хэмминга с перекрытием 50%. После извлечения спектрограммы я немного уменьшил размерность с помощью анализа основных компонентов (PCA). Снизив его до более низкой размерности, я реконструировал спектрограммы из более низких измерений. Таким образом, теперь будет некоторая ошибка между исходной спектрограммой и восстановленной спектрограммой. Я хотел бы преобразовать эту спектрограмму обратно в аудиосигнал и воспроизвести его, чтобы я мог узнать, когда воспроизводится звук из более низких измерений, как звучит звук.

Есть ли функция, скажем, в Matlab. преобразовать амплитуду спектрограммы в звуковой сигнал ??


2
Вы действительно хотите STFT и обратный STFT. «Спектрограмма» - это просто название тепловой карты величины STFT, и одной только этой величины недостаточно для восстановления сигнала. Посмотрите на mathworks.com/matlabcentral/fileexchange/12902-dafx-toolbox/… ?
эндолит

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

Значит, если я хочу восстановить исходный аудиосигнал, мне требуются как амплитуда, так и фаза STFT? Но, как правило, для создания аудио функций, | S | амплитуда комплекса не используется, а информация о фазе отбрасывается. Я выполнил PCA на спектрограмме , который Мел я вычисленный в виде M, является Mel фильтров умножения матрицы. так как вы восстановить звуковой сигнал заданного 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: прерывисто, потому что STFT разбивает сигнал на кадры, иногда перекрывая их, и вы должны деконструировать их так же, как они были построены, иначе на каждом из них будут разрывы. Вы использовали функции STFT и ISTFT по этой ссылке? Посмотрите на колебательный сигнал, чтобы понять, в чем проблема.
эндолит

Ответы:


15

Если спектрограмма была вычислена как величина кратковременных четырехполосных преобразований из перекрывающихся окон, то спектрограмма неявно содержит некоторую информацию о фазе.

Следующие итерации делают работу:

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

- спектрограмма, штSstft - коротко-прямое преобразование Фурье, - коротко -обратное преобразование Фурье.isft


Я хотел бы прокомментировать прямо на @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

Вы можете использовать восстановленную спектрограмму по сравнению с исходной спектрограммой, чтобы создать фильтр, чья амплитудная характеристика преобразует одну спектрограмму в другую. Затем вы можете применить этот фильтр к исходным данным временной области или к исходным БПФ для наложения, добавления / сохранения быстрой сверточной фильтрации.


@ hotpaw2: я не понял вашего ответа, зачем мне конвертировать одну спектрограмму в другую? Я хочу восстановить звуковой сигнал с учетом матрицы спектрограммы , Каковы требования к созданию фильтра, который трансформируется из одной спектрограммы в другую, и к наложению добавляют / сохраняют быструю сверточную фильтрацию? Я хочу восстановить аудио из | S | так что я могу видеть, насколько эффективен PCA. Допустим, я могу воспроизвести два клипа, один оригинальный аудиосигнал, а другой - реконструированный из более низких измерений | S | |S||S||S^|
user76170 10.07.13

2
Матрица спектрограммы с потерями, поэтому не может быть использована для реконструкции. Но если вы можете выполнить обратное проектирование преобразования, чтобы получить желаемую спектрограмму, вы можете применить ее к исходным данным во временной области без потерь или, возможно, к исходному БПФ комплексного результата.
hotpaw2

Итак, вы хотите сказать, что я могу восстановить аудиосигнал из сложного результата но не просто используя его величину | S | , Потому что я использовал | S | для моей дальнейшей обработки и уменьшения димесиональности, тогда, я думаю, реконструкция исходного сигнала невозможна. S|S||S|
user76170

1
@ user76170 Суть в том, что вам требуется сложный STFT, прежде чем вы сможете восстановить свой сигнал. Если у вас просто величина STFT, этого недостаточно. Есть исключения из этого правила, но обычно вам нужен сложный STFT, а не только его величина.
Тарин Зияи,

|S||S^|добавить информацию о фазе и сделать обратное БПФ для получения аудиосигнала?
user76170 10.10.13

-1

Используйте алгоритм Griffin-Lim для инвертирования аудиосигнала из спектрограммы, если вас не беспокоит сложность вычислений.


Не могли бы вы немного расширить свой ответ? Возможно добавление репрезентативного документа или ссылки на алгоритм и краткое объяснение того, как он относится к этому вопросу (?)
A_A

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

Спасибо, что сообщили мне об этом. Просто чтобы прояснить этот момент. Этот ответ появился в моей очереди на проверку как "низкое качество". Варианты «обзора», которые у меня есть, включают в себя предоставление комментариев для «улучшения». Чтобы этот ответ соответствовал типу ответов, обычно встречающихся в DSP.SE, он должен немного углубиться в алгоритм Griffin Lim, чтобы показать, насколько он соответствует тому, что запрашивает OP. Любые будущие правки вы можете применить непосредственно к своему ответу. Смысл этого не в том, чтобы удовлетворить «меня», в частности, в том, чтобы иметь осмысленный набор освещающих ответов на вопрос
A_A

Лучший ответ здесь (с использованием Griffin-Lim), если у вас нет оригинальной информации FFT. timsainb.github.io/…
Артемий Крымский
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.