Инициализируйте импульсную характеристику помещения, используя время реверберации (T60)

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

Чтобы быть точным, я работаю над этой статьей Насера ​​(paris.cs.illinois.edu/pubs/nasser-icassp2015.pdf), которая включает в себя получение оптимального решения для импульсной характеристики помещения (уравнение 10). Итак, для этого мне нужно сначала инициализировать H. Он упомянул в статье, что «каждая строка H была инициализирована одинаково с использованием линейно затухающей оболочки» (раздел 4, в конце страницы 3). Мне нужно инициализировать импульсную характеристику (H), чтобы ее время реверберации (T60) составляло 300 мс. Пусть длина H равна 10.

Это то, что я пробовал, но это произвольное решение.

x=1:10;
h = exp(-x/2);
H = repmat(h,600,1);

Это даст мне H размером 600 * 10. Но я не понимаю, как использовать T60 для инициализации в MATLAB.


person shubham sharma    schedule 02.07.2015    source источник
comment
Существует dsp.stackexchange.com специально для подобных вопросов. Также стоит упомянуть пакет Matlab, с которым вы работаете.   -  person Nikolay Shmyrev    schedule 02.07.2015
comment
@НиколайШмырев Спасибо. Я разместил вопрос там. Я не использую какой-либо набор инструментов, если быть точным.   -  person shubham sharma    schedule 02.07.2015
comment
dsp. stackexchange.com/questions/24481/   -  person Nikolay Shmyrev    schedule 02.07.2015


Ответы (1)


Хм. Если вы пытаетесь создать эффект реверберации, то H должен быть просто вектором, мне кажется, у вас есть матрица с 10 столбцами. При создании эффекта реверберации вы обычно получаете свою импульсную характеристику и сворачиваете ее с аудиосигналом. В этом случае h кажется довольно произвольным, и я не знаю, даст ли это вам количество реверберации, которое вы ищете. Однако, если вы хотите реализовать h как импульсную характеристику для реверберации, все, что вам нужно сделать, это свернуть ваш аудиосигнал с импульсной характеристикой y.

[x, fs] = audioread('myaudio.wav');
y = conv(x,h);

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

Вы должны быть в состоянии выработать формулу, чтобы h был просто экспоненциально затухающим вектором, который умирает примерно через 300 мс (хотя на самом деле услышать это может быть сложно)

Если вы хотите по-настоящему продвинуться в расчетах импульсного отклика, я рекомендую попробовать подход к созданию импульсного отклика с использованием источника изображения. Ознакомьтесь со следующей статьей (старой, но золотой);

http://www.umiacs.umd.edu/~ramani/cmsc828d_audio/AllenBerkley79.pdf

Если вы заинтересованы в слепой деконволюции, это может вас заинтересовать.

https://www.academia.edu/1370250/Predictive_deconvolution_and_kurtosis_maximization_for_speech_dereverberation

Небольшое предостережение, деконволюция и комнатная реверберация — дело очень хитрое. Приведенная выше модель источника изображения, хотя и интересная и эффективная, на самом деле не отражает сложности реверберации и дереверберации. Есть несколько вещей, которые могут повлиять на звук (стоячие волны и т. д.). Я не могу гарантировать вам, что простое вычисление RT60 с использованием только затухающего экспоненциального вектора и деконволюции даст потрясающие результаты. Тем не менее, стоит попробовать и много веселья!

person PicnicTripper    schedule 02.07.2015
comment
Спасибо за ваш ответ. Я не пытаюсь создать эффект реверберации. На самом деле, я работаю над этим документом Насера ​​(paris.cs.illinois.edu /pubs/nasser-icassp2015.pdf), который включает получение оптимального решения для импульсной характеристики помещения (уравнение 10). Итак, для этого мне нужно сначала инициализировать H. Он упомянул в статье, что каждая строка H была инициализирована одинаково с использованием линейно затухающей оболочки (раздел 4, в конце страницы 3). Я хочу знать, что он имел в виду. И как вы сказали о формуле, это то, что я хочу знать. - person shubham sharma; 02.07.2015
comment
Я полагаю, он имеет в виду, что H - это матрица, заполненная одинаково затухающими экспоненциальными векторами. Если вы введете следующее в Matlab; H(1,:) == H(2,:) вы получите вектор из 1. это означает, что значения в строке 1 и строке 2 идентичны. Если вы выполните этот тест для любой строки в матрице, вы получите тот же результат. - person PicnicTripper; 02.07.2015
comment
Да, я понимаю, что все строки одинаковы. Но я не понимаю, как инициализировать конкретную строку, чтобы ее время реверберации составляло 300 мс. Какая здесь связь между инициализацией и T60? - person shubham sharma; 02.07.2015
comment
Каждый кадр STFT составляет 32 мс (как в документе), у вас есть 10 кадров, то есть примерно 300 мс. Если вы процитируете статью в исходном вопросе, вам будет намного проще ответить. - person Nikolay Shmyrev; 02.07.2015
comment
Сделанный. Да пусть будет 300 мс. Как найти огибающую, которая затухает на 60 дБ за 300 мс? Это то, что я хочу знать, потому что тогда я смогу использовать repmat после получения его для одной строки. - person shubham sharma; 02.07.2015