Количество перекрывающихся окон заданной длины

Я пишу код в 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 ответа

Решение

Давайте предположим, что 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;

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

frame_dur - frame_stride

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

m = (nr)/(kr)

Другие вопросы по тегам