Окно речевого сигнала правильно - PullRequest
0 голосов
/ 15 мая 2018

Я применяю окно Хемминга к речевому сигналу, чтобы выполнить извлечение звука из звука.

Правильно ли я делю сигнал на кадры?Должен ли я использовать перекрытие окна?

Вот моя попытка использования MATLAB:

clear
close all

[data,fs] = audioread('speech_demo.wav');

timeWindow   = 20e-3;
lengthWindow = round(timeWindow*fs); % number of samples per window

L       = lengthWindow;
w_start = 0;
w_end   = lengthWindow;
j = 1;
for k = 1:round(length(data)/lengthWindow)

    x = w_start:w_end-1;
    hold on
    plot(x,hann(lengthWindow),'r:');
    plot(x,data(x+1),'k.-')
    plot(x,data(x+1).*hamming(lengthWindow),'m.-')
    wSignal(j:L*k,:) = data(x+1).*hamming(lengthWindow);

    w_start = w_start + L;
    w_end   = w_start + L;
    j       = L*k+1;

end
set(gcf,'color','w')

График сигналов и окон: enter image description here

Увеличение: enter image description here

Спасибо.

1 Ответ

0 голосов
/ 15 мая 2018

На основании моего комментария об использовании buffer и bsxfun.Рассмотрим следующий код,

[y,Fs] = audioread('someAudioFile.wav');

timeWindow   = 20e-3;
lengthWindow = round(timeWindow*Fs); % number of samples per window

% third argument specifies the number of overlapping samples
yBuffer = buffer(y, lengthWindow, round(lengthWindow*0.2));
hammWin = hamming(lengthWindow);

yBufferWindowed = bsxfun(@times, yBuffer, hammWin);
...