我是一名工科学生,我必须解决有关信号处理的学术问题。
基本上,给定wav格式的DTMF信号,我必须识别它编码的数字序列。 我必须在Matlab环境中使用离散傅立叶变换分析来构建一个读取wav文件的脚本,并通过该过程识别拨号音中的数字。
我遇到麻烦,因为我对Matlab环境不太满意,整个离散傅里叶分析对我来说也很新,所以我觉得有点失落。
有没有人可以分享一些好的提示或指示?
答案 0 :(得分:3)
DFT(或FFT)对于DTMF检测来说是过度的。您只需要2 x 4 Goertzel滤波器即可检测低音和高音。每个Goertzel滤波器的输出都需要进行低通滤波以防止噪声检测,但除此之外它非常简单。
如果强制使用DFT / FFT,则一般方法是:
答案 1 :(得分:0)
实际数据的幅度DFT几乎等于长度为N的N / 2个正交Goertzel滤波器。而FFT只是一种快速DFT算法。
如果您必须使用FFT,因为这是规范的一部分,请注意与捕获所需DTMF音调所需的Goertzel滤波器频率相对应的FFT频段,并将复杂结果转换为幅度。 / p>
fft_bin_frequency = fft_bin_number * sample_rate / fft_length ;
对整个FFT幅度能量进行完整性检查。如果比率“很小”,则可能只是fft箱中的噪音而不是DTMF音。