Вам необходимо определить соответствующий импульсный отклик и скручивать оригинальный звук с ним. Каждый всплеск в импульсном отклике представляет собой отражение исходного звука и характеризуется его задержкой и амплитудой. Вы должны определить большое количество шипов, чтобы они были коллективно восприняты как реверберация, а не отдельные эхо-сигналы.
Экспоненциальная модель обычно используется для представления распада амплитуды с задержкой (см., Например, here). Вы должны определить случайные значения для параметров, чтобы реверберация звучала реалистично. Ниже приведена простая модель.
%// Data:
filename = 'file.wav'; %// name of input file. Mono or stereo.
delay_dispersion = .2; %// this defines the amount of reverberation
max_delay = delay_dispersion*4; %// this should be several times the delay dispersion
num_delays = 50; %// number of echoes. Should be large for realistic reverberation
%// Processing:
[x, fs] = audioread(filename); %// read file
delays = round(rand(1,50)*max_delay*fs);
amplitudes = exp(-delays/delay_dispersion/fs); %// exponential profile
amplitudes = .7*amplitudes+.3*rand(size(amplitudes)); %// add some randomness in amplitudes
delays = [1 delays]; %// add clean sound...
amplitudes = [1 amplitudes]; %// ...with unit amplitude
h = zeros(1,ceil(max_delay*fs));
h(delays) = amplitudes;
stem(delays, amplitudes) %// plot impulse response
y = conv2(x,h(:)); %// use conv2 so that it works for mono or stereo x
y = y/max(abs(y(:)));
sound(x(1:min(2*fs,end),:), fs) %// play two seconds of dry sound
pause(2)
sound(y(1:min(2*fs,end),:), fs) %// play two seconds of reverberated sound
Возможные улучшения включают в себя применение фильтр нижних с задержкой реплик, или определение задержки в кластеров для моделирования отражений от групп физически близких объектов.
Я не уверен, как это сделать с самой Matlab. Существуют программные плагины, называемые VST, часто бесплатные, которые используются для добавления реверберации к образцу звука, но для этого обычно требуется использовать цифровую рабочую станцию (DAW). Это все возможно, скорее всего, бесплатно, но это довольно немного накладных расходов в зависимости от того, что вы хотите сделать. Я советую, что создание собственного «реалистичного» ревербератора, вероятно, не является одной задачей программирования ночью. – ConfusinglyCuriousTheThird
Конвольв с соответствующей импульсной функцией? Вы можете определить такую функцию вручную, используя множество шипов для имитации отражений –