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