DTMF, длина окна DFT
В школе у нас есть задание по созданию DTMF-декодера, но у нас возникают проблемы с пониманием того, что и как нужно делать. Прежде всего нам нужно рассчитать энергию сигнала с помощью свертки. Мы делаем это, используя длину окна и абсолютное значение входного сигнала:
SmoothEnergyOfInputSignal = conv(abs(X), ones(1,winlen)/winlen); %moving average
Теперь мы не знаем, как получить правильную длину окна. Сглаженная энергия используется для сегментирования сигнала, а затем для определения различных частот в сигнале с использованием базисных векторов (?). Импульсы dtmf, по меньшей мере, 40 мс разделены, по меньшей мере, 40 мс паузы. Частота дискретизации составляет 8 кГц, а наш сигнал имеет длину около 17601 выборки. Мы думали, что, выполнив команду fs*0.04, мы получим длину окна. 0,04=40 мс, но теперь сглаженный энергетический сигнал смещен, поэтому сегменты выходят за пределы максимальной выборки входного сигнала.
[Sound, fs] = audioread('dtmf_all.wav');
winlen = fs*0.04
E = conv(abs(Sound),ones(1, winlen)/winlen)
Короче говоря: как рассчитать "правильную" длину окна?
Заранее спасибо.
РЕДАКТИРОВАТЬ: инструкции были обновлены, и мы не должны использовать свертку. Мы должны использовать фильтр ()