DTMF信号检测之goertzel算法

来源:互联网 发布:mysql pid文件丢失 编辑:程序博客网 时间:2024/06/05 00:35

必须要了解goertzel算法才可以继续接下去。

之所以用频率来了解整个过程,是因为频域比较好分析。N数据的DFT和FFT之间的比较是DFT运算量过大,和N^2成正比,而FFT和Nlog2N成正比。

而goertzel算法实质也是对DFT的快速运算,但可以有选择地计算个别点处的DFT。

而goertzel算法实质就是一个两极点的IIR滤波器这里写图片描述

是有递归,是有乘法器,延迟器,加法器。我们算递归的时候主要就是要看中间的量。中间的递归量由x(n)+2cos(2pik/N)Vk(N-1)-Vk(N-2),
对序列x(n)的DFT等价于x(n)与系统传递函数h(n)的第N个卷积值。

对系统的传递函数h(n)进行z变换,得到H(Z),可以看成是级联型网络,y(n) = v(n) - W V(n-1).功率输出就是|yn|^2.

DTMF检测的原理,是在DTMF频率上,检查接收到的信号能量,已确定是否接受到了正确的DTMF音调对。对于要检测的音调数量比较小的情况下,滤波组实现更有效。因为我们关心的频率只有8个点。所以用DFT更加有效。

对于8个不同的K值,他对应于DTMF的8个频率。用goertzel算法可以有效地计算出DFT系数,goertzel算法可以看作是针对每个频率k的匹配滤波器。x(n)算是输入信号,Hk(k)为第k个频率组件上的滤波器传递函数,而X(k)则为相应的滤波器输出。

这里定义一个yk(n)可以看作是x(n) 与序列Wu[n]的卷积,所以yk[n]可以看作是具有冲激响应Wu[n]的滤波器输出。所以X(k)就等于yk(n)|n = N-1。X(k)是滤波器Hk(z)在时间n = N-1时的输出。对yk(n) = x(n)Wu(n)两边做z变换。得到Yk(z) = X(z)(1/1-W),那么第k个goertzel滤波器的传递函数就是Hk(z)。

此滤波器有一个极点位于频率Wk = 2pik/N的单位圆上,所以可以用上面的式子定义的N个滤波器组成平行组合,对输入的数据块进行滤波,计算出整个DFT,其中每一个滤波器有一个位于DFT的相应频率上的极点。因此goertzel算法计算出N个DFT系数,所以参数N必须选择得能保证X(k)上靠近DTMF频率fk,这可以通过选择N满足下列关系实现:

fk/fs = k/N

滤波器的递推部分位于延迟元件的左边。而非递推部分则位于延迟软件的右边。用直接2型实现,因为只是在时间N-1时需要输出量yk(n),所以我们只是在第(N-1)次的迭代中,才需要计算滤波器的非递推部分。

递推部分已经知道,X(k) = Wk(N-1) - Exp*W(N-2).

对于音调检测,只有X(k)的幅值平方是需要的。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 我跟鞋后跟磨烂的脚怎么办? 内衣买回来有一股刺鼻的味道怎么办 裁剪袖子开口偏了1公分怎么办 对于这乱扔垃圾不听劝者该怎么办 感觉被南通蒲公英店铺骗了怎么办 6个月宝宝吃米粉不吃奶怎么办 十个月的宝宝不吃辅食怎么办 5个月宝宝拉肚子有泡沫怎么办 生完孩子后皮肤暗黄怎么办 开服装店批发服装的吊牌怎么办 天虹的鞋一天就坏了怎么办 车被钥匙划了露底漆了怎么办 数控铣z轴回不了参考点怎么办 白色衣服被黑色衣服染了怎么办 夏天出汗衣服粘身上都是毛毛怎么办 支付宝租的手机坏了怎么办 新买的衣服布料扎人怎么办 洗衣服的时候卫生纸沾裤子上怎么办 洗衣服给白衣服染上色了怎么办 不小心喝了游泳池的水怎么办 铁水中硅的含量高了怎么办 视频拍摄单人变双人是怎么办的 四季青进来的货比淘宝还贵怎么办 淘宝还没收货价格买贵了怎么办 在微信上赌博庄跑了怎么办 微信赌博输了10000多怎么办 欠了信用卡说来来家里调查怎么办 没用过的超市购物卡丢了怎么办 体验服抢号成功手机号填错了怎么办 起亚kx3一键启动钥匙没电怎么办 逆战下载的时候显示文件损坏怎么办 移动公司买手机送话费套路怎么办 开通京东白条身份信息被占用怎么办 丰巢快递柜把东西寄丢了怎么办? 圆通快递把我寄的东西弄丢了怎么办 快递把我寄出去的东西弄丢了怎么办 京东被盗刷都是到付怎么办 订机票时护照号错了怎么办 请问网上不小心点了扣话费了怎么办 不小心被中国移动扣了话费怎么办 京东买东西已经付款了说无货怎么办