我们在学校有一项任务是创建一个DTMF解码器,但是很难理解需要做什么,以及如何做。首先,我们需要使用卷积计算信号的能量。我们通过利用窗口长度和输入信号的绝对值来实现:
SmoothEnergyOfInputSignal = conv(abs(X), ones(1,winlen)/winlen); %moving average
现在,我们不知道如何获得正确的窗口长度。平滑后的能量用于分割信号,然后利用基矢量确定信号中的不同频率(?) dtmf脉冲至少40ms,相隔至少40ms的静音。 采样频率为8kHz,信号长约17601个样本。 我们认为通过做fs * 0.04我们得到窗口长度。 0.04 = 40ms,但现在平滑的能量信号被移位,因此这些段超出了输入信号的最大样本。
[Sound, fs] = audioread('dtmf_all.wav');
winlen = fs*0.04
E = conv(abs(Sound),ones(1, winlen)/winlen)
长话短说:我们如何计算“正确”的窗口长度?
提前致谢。
编辑:指令已更新,我们不应该使用卷积。我们应该使用filter()