Итак, я написал код, который принимает аудиофайл и разбивается на кадры из 320 образцов для 16000 Гц.MATLAB - окно Хэмминга, перекрытие 50%
Я взял в окно Хэмминга каждого кадра, как показано в коде:
fs=16000;
[x,fs] = audioread('01.wav');
%Pre-emphasis filter (Y[n]=X [n]-0.95x[n - 1])
b = [1 -0.95];
y = filter(b,1,x);
%windowing
numSamples = length(y);
frameLength = 320;
numFrames = floor(numSamples/frameLength);
for frame = 1:numFrames,
firstSample = (frame * frameLength) - (frameLength - 1);
lastSample = (frame * frameLength);
shortTimeFrame = y(firstSample:lastSample);
h = hamming(320);
hs = h.*shortTimeFrame;
plot(hs, 'r');
end
Как бы то перекрывается Хемминга окна на 50%? Я видел другие вопросы по SO и видели ответы, такие как это:
y = buffer(h, 1, floor(64 * 0.5));
Но не было никакой удачи с ней
так что Y = буфер отсутствует вне цикла for и находится hammed_Y? Я не знаю, что такое repmat, я новичок в matlab – user3667111
'repmat' повторяет матрицу вдоль измерения. В моем примере 'h (:)' гарантирует, что 'h' находится в форме столбца, а' repmat' повторяет его один раз вдоль строк (т. Е. Не повторяет) и 'size (Y, 2)' times вдоль столбцов , Это дает вам матрицу того же размера, что и «Y», где все столбцы идентичны (т. Е. Ваш «h»), поэтому вы можете выполнить «элементарное» простое умножение с Y «векторизованным» способом. Нет необходимости в петлях. –
Есть ли способ, которым я мог бы построить всю форму волны с перекрытием? – user3667111