Количество перекрывающихся окон заданной длины
Я пишу код в 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)