Количество перекрывающихся окон заданной длины - PullRequest
0 голосов
/ 15 декабря 2018

Я пишу код в Matlab с простой оконной функцией, чтобы применить простое перекрытие и добавить алгоритм к моему входному сигналу.

Пока это то, что я написал:

[s_a,Fs] = audioread('a.wav');
frame_dur = 0.04; %length of my window in time
frame_stride = 0.01; %shift of every single window in time

frame_len = round(frame_dur * Fs); 
frame_step = round(frame_stride*Fs);

win = hamming(frame_len);

Перекрытие окна задается смещением во времени вместо процентного значения его длины (поэтому каждые 10 мс у меня есть окно, котороезаканчивается через 40 мс.

Как рассчитать количество окон в моем сигнале?

Я нашел это решение , но у меня нет перекрытия r. МожетЯ нахожу количество окон, начиная с имеющихся у меня данных?

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Предположим, что n - это количество сэмплов в вашем аудиофайле:

n=numel(s_a);

При обработке вашего фрейма данных (с каждым окном) вы должны выполнить следующие действия:

for frame=1:frame_step:(n-(frame_len-1))

    Tmp=s_a(frame:frame+frame_len-1).*win;
    %do something with tmp

end

Таким образом, вы можете видеть, что количество окон, которые вписываются в ваши данные, может быть рассчитано следующим образом:

num_win=numel(1:frame_step:(n-(frame_len-1)));

Предполагая, что наихудший случай, когда n не кратен frame_len Вы можете рассчитать как:

num_win=floor((n-(frame_len))/frame_step)+1;
0 голосов
/ 16 декабря 2018

Я думаю, что вы можете рассмотреть r как:

frame_dur - frame_stride

и рассчитать количество окон (в зависимости от длины сигнала относительношаг) с формулой, которую вы разместили:

m = (nr) / (kr)

...