安卓dtmf识别_使用Goertzel算法识别DTMF信号

本文介绍了Goertzel算法及其在安卓DTMF识别中的使用。通过设置参数,利用Goertzel算法计算特定频率的能量,以识别DTMF信号。在8000Hz采样率下,N=205为最佳值。识别过程包括能量计算、阈值判断和噪声过滤,以确保准确识别DTMF符号。
摘要由CSDN通过智能技术生成

Goertzel算法

Goertzel算法由Gerald Goertzel在1958年提出,用于数字信号处理,是属于离散傅里叶变换的范畴,目的是从给定的采样中求出某一特定频率信号的能量,用于有效性的评价。

这个算法有几个关键的参数:

采样率R,指的是需要分析的数据每秒钟有多少个采样

目标频率f,指的是需要检测并评价的这个频率的值

检测区段采样值数量N,也就是每N个采样这个算法会对频率f给出评价

检测区段包含目标频率的完整周期个数K

很显然,上述参数应该有这样的关系:

K = Nf / R

这个K值应该是一个整数,而且要大小合适。如果太大,不利于检测的时效,如果太小,则检测可能不准确。例如十几甚至二十几左右应该相对合理。例如R为8000,需要检测800hz的频率,N取值100,那么K为10,很不错。但是,需要检测的频率有时候并不那么整,例如697,那么N应该取值多少呢?N在1000以内,无法得到一个整数K,我们只能退而求其次,找一个四舍五入误差最小的。例如N取115,K的计算结果为10.019375,四舍五入为10,而且有较小的误差。

有了上述的参数,然后我们来计算每个采样在一个目标频率一个周期中所占的弧度ω。既然N个采样表达了K个周期(2π),那么ω应该这样计算:

ω = 2πK / N

这里需要注意的是,因为K值可能经过了四舍五入,所以上述两个公式必须先后计算,一定不能合在一起化简把K约掉࿰

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值