从 wav 文件中检测 DTMF

发布于 2024-11-09 09:26:54 字数 229 浏览 5 评论 0原文

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

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

我遇到了麻烦,因为我对 Matlab 环境不太适应,而且整个离散傅立叶分析对我来说也很新,所以我感觉有点迷失。

有人可以分享一些好的技巧或指示吗?

I'm an engineering student and I have to solve an academic problem regarding signal processing.

Basically, given an DTMF signal in wav format, I have to identify the number sequence it has encoded.
I must do so using discrete fourier transform analysis in Matlab environment, to build a script that reads the wav file and through the process identifies the numbers in the dial tone.

I'm having trouble in the sense that I'm not really confortable with the Matlab environment and the whole discrete fourier analysis is also very new to me, so I feel kinda lost.

Does anyone have some good tips or pointers that they can share?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

孤星 2024-11-16 09:26:54

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

如果必须使用 DFT/FFT,则一般方法是:

  • 对于每个输入样本块
    • 应用合适的窗口(例如 Hanning)
    • 执行 DFT
    • 计算每个 DFT bin 的幅度 (re*re+im*im)
    • 测量对应于 2 x 4 DTMF 音调的 8 个箱中每个箱的幅度
    • 如果您有一个高组音和一个低组音,且其幅度明显大于组中的其他音,则已检测到 DTMF 音对

A DFT (or FFT) is overkill for DTMF detection. You just need 2 x 4 Goertzel filters for detecting the low and high tones. The output of each Goertzel filter will need to be low pass filtered to prevent detection of noise, but other than that it's pretty straightforward.

If use of DFT/FFT is mandatory then the general approach would be:

  • for each block of input samples
    • apply suitable window (e.g. Hanning)
    • perform DFT
    • calculate magnitude of each DFT bin (re*re+im*im)
    • measure magnitude at each of 8 bins which correspond to the 2 x 4 DTMF tones
    • if you have one high group tone and one low group tone which have significantly greater magnitude than the other tones in the group then a DTMF tone pair has been detected
宁愿没拥抱 2024-11-16 09:26:54

真实数据的幅度 DFT 几乎相当于 N/2 个长度为 N 的正交 Goertzel 滤波器。FFT 只是一种快速 DFT 算法。

如果您必须使用 FFT,因为这是规范的一部分,只需注意与捕获所需 DTMF 音调所需的 Goertzel 滤波器频率相对应的 FFT 箱,并将复杂结果转换为幅度。

fft_bin_frequency = fft_bin_number * sample_rate / fft_length ;

根据总 FFT 幅度能量对任何可疑音调进行健全性检查。如果比率“小”,则可能只是 fft 箱中的噪声而不是 DTMF 音调。

A magnitude DFT of real data is pretty much equivalent to N/2 orthogonal Goertzel filters of length N. And an FFT is just a fast DFT algorithm.

If you have to use an FFT because that's part of the specification, just pay attention to the FFT bins that correspond to the frequencies of the Goertzel filters needed to capture the required DTMF tones, and convert the complex result to magnitudes.

fft_bin_frequency = fft_bin_number * sample_rate / fft_length ;

Sanity check any suspected tone against the total FFT magnitude energy. If the ratio is "small", it might just be noise in the fft bin instead of a DTMF tone.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文