1

我是一名工科学生,我必须解决有关信号处理的学术问题。

基本上,给定一个 wav 格式的 DTMF 信号,我必须识别它编码的数字序列。我必须在 Matlab 环境中使用离散傅立叶变换分析来构建一个脚本来读取 wav 文件并通过该过程识别拨号音中的数字。

我遇到了麻烦,因为我对 Matlab 环境不太满意,整个离散傅里叶分析对我来说也很新,所以我有点迷茫。

有没有人可以分享一些好的提示或指示?

4

2 回答 2

3

DFT(或 FFT)对于 DTMF 检测来说太过分了。您只需要 2 x 4 Goertzel 滤波器来检测低音和高音。每个 Goertzel 滤波器的输出都需要进行低通滤波以防止检测到噪声,但除此之外它非常简单。

如果强制使用 DFT/FFT,那么一般方法是:

  • 对于每个输入样本块
    • 应用合适的窗口(例如汉宁)
    • 执行 DFT
    • 计算每个 DFT bin 的大小 (re*re+im*im)
    • 测量对应于 2 x 4 DTMF 音调的 8 个 bin 中的每一个的幅度
    • 如果您有一个高组音和一个低组音,其幅度明显大于组中的其他音,则检测到 DTMF 音对
于 2011-05-21T15:07:32.827 回答
0

真实数据的量级 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 音。

于 2011-05-22T00:26:21.730 回答