热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

逆DTFT变换(DemonstratetheDFTbasedDTMFdetectionalgorithm.)

一,逆DTFT说明即思路DTFT的方法,思路即代码在上文已经提到DTFTmatlab实现由上文可知,一个按键中包含着两个频率的信号
一,逆DTFT说明即思路

DTFT的方法,思路即代码在上文已经提到

DTFTmatlab实现

由上文可知,一个按键中包含着两个频率的信号,为了将按键区分,可以对按键声音进行fft即傅里叶变换(不严谨,应该叫dft变换),将变换后的结果与表中预设相比对可以得出按键的种类。

代码的实现在预先知道按键的持续时间和间隔时间的情况下,对声音数据进行分段,对一段声音进行IFFT变换,由于DTFT行频率和列频率以1000Hz为界,可以在进行完IFFT变换后,以1000Hz为界将频谱分为两部分,与预设的频率进行比对。

在得到IFFT频率时,由于存在噪声和频谱泄漏现象,所以并不能得到理想的频谱,所以可以使用Max函数,找寻频谱范围内频率的最大值。

二,代码

1,读取声音文件

先确定声音序列和按键持续时间和空白时间

[h,Fs]=audioread('my_phone_number_sound_test.wav');%读出信号,采样率和采样位数。
keytime=0.5;%按键持续时间
zerotime=0.5;%中间为零的时间
n=keytime*Fs;%按键摁下时的点数
n1=zerotime*Fs;%无按键时的点数

2,对数据进行IFFT变换

y=h(1+n1*(i-1)+n*(i-1):n+n1*(i-1)+n*(i-1));%确定声音处理的区间
H=fft(y);%快速傅里叶变换
h_d=abs(H/n);%求fft的幅值,并转变为双边谱的幅值(fft的幅值与输入的点数有关,除于n保证原来的幅值)
h_d1= h_d(1:n/2+1);%将双边谱变为单边谱
h_d1(2:end-1)=2*h_d1(2:end-1);%双边谱变为单边谱幅度乘2
f=Fs*(0:n/2)/n;%求归一化后的频率

3,频率获取

f=Fs*(0:n/2)/n;%求归一化后的频率h_d2=h_d1(1:n/8);%由f可知,f的范围为0到4000,n/8的范围为0到1000[M,I] = max(h_d2);I=Fs*I/n;%求出最大值所对应的频率h_d3=h_d1(n/8:n/4-1);%频率范围为1000到2000[A,B] = max(h_d3);B=Fs*B/n+1000;

 注意:最大值或者数据位置并不代表着所对应的频率,要进行f=Fs*(0:n/2)/n的处理。

4,很简单的但很繁琐频率判断

if I>&#61;690&&I<&#61;700&&B>&#61;1200&&B<&#61;1300disp(1);endif I>&#61;690&&I<&#61;700&&B>&#61;1300&&B<&#61;1400disp(2);endif I>&#61;690&&I<&#61;700&&B>&#61;1400&&B<&#61;1500disp(3);endif I>&#61;690&&I<&#61;700&&B>&#61;1600&&B<&#61;1700disp(A);endif I>&#61;700&&I<&#61;800&&B>&#61;1200&&B<&#61;1300disp(4);endif I>&#61;700&&I<&#61;800&&B>&#61;1300&&B<&#61;1400disp(5);endif I>&#61;700&&I<&#61;800&&B>&#61;1400&&B<&#61;1500disp(6);endif I>&#61;700&&I<&#61;800&&B>&#61;1600&&B<&#61;1700disp(B);endif I>&#61;800&&I<&#61;900&&B>&#61;1200&&B<&#61;1300disp(7);endif I>&#61;800&&I<&#61;900&&B>&#61;1300&&B<&#61;1400disp(8);endif I>&#61;800&&I<&#61;900&&B>&#61;1400&&B<&#61;1500disp(9);endif I>&#61;800&&I<&#61;900&&B>&#61;1600&&B<&#61;1700disp(C);endif I>&#61;900&&I<&#61;1000&&B>&#61;1200&&B<&#61;1300disp(&#39;*&#39;);endif I>&#61;900&&I<&#61;1000&&B>&#61;1300&&B<&#61;1400disp(0);endif I>&#61;900&&I<&#61;1000&&B>&#61;1400&&B<&#61;1500disp(&#39;#&#39;);endif I>&#61;900&&I<&#61;1000&&B>&#61;1600&&B<&#61;1700disp(D);end

5&#xff0c;总代码

%-----------------------------------------------------------------------
%clc
[h,Fs]&#61;audioread(&#39;my_phone_number_sound_test.wav&#39;);%读出信号&#xff0c;采样率和采样位数。
keytime&#61;0.5;%按键持续时间
zerotime&#61;0.5;%中间为零的时间
n&#61;keytime*Fs;%按键摁下时的点数
n1&#61;zerotime*Fs;%无按键时的点数
for i&#61;1:11y&#61;h(1&#43;n1*(i-1)&#43;n*(i-1):n&#43;n1*(i-1)&#43;n*(i-1));%确定声音处理的区间H&#61;fft(y);%快速傅里叶变换h_d&#61;abs(H/n);%求fft的幅值&#xff0c;并转变为双边谱的幅值(fft的幅值与输入的点数有关&#xff0c;除于n保证原来的幅值)h_d1&#61; h_d(1:n/2&#43;1);%将双边谱变为单边谱h_d1(2:end-1)&#61;2*h_d1(2:end-1);%双边谱变为单边谱幅度乘2f&#61;Fs*(0:n/2)/n;%求归一化后的频率h_d2&#61;h_d1(1:n/8);%由f可知&#xff0c;f的范围为0到4000&#xff0c;n/8的范围为0到1000[M,I] &#61; max(h_d2);I&#61;Fs*I/n;%求出最大值所对应的频率h_d3&#61;h_d1(n/8:n/4-1);%频率范围为1000到2000[A,B] &#61; max(h_d3);B&#61;Fs*B/n&#43;1000;if I>&#61;690&&I<&#61;700&&B>&#61;1200&&B<&#61;1300disp(1);endif I>&#61;690&&I<&#61;700&&B>&#61;1300&&B<&#61;1400disp(2);endif I>&#61;690&&I<&#61;700&&B>&#61;1400&&B<&#61;1500disp(3);endif I>&#61;690&&I<&#61;700&&B>&#61;1600&&B<&#61;1700disp(A);endif I>&#61;700&&I<&#61;800&&B>&#61;1200&&B<&#61;1300disp(4);endif I>&#61;700&&I<&#61;800&&B>&#61;1300&&B<&#61;1400disp(5);endif I>&#61;700&&I<&#61;800&&B>&#61;1400&&B<&#61;1500disp(6);endif I>&#61;700&&I<&#61;800&&B>&#61;1600&&B<&#61;1700disp(B);endif I>&#61;800&&I<&#61;900&&B>&#61;1200&&B<&#61;1300disp(7);endif I>&#61;800&&I<&#61;900&&B>&#61;1300&&B<&#61;1400disp(8);endif I>&#61;800&&I<&#61;900&&B>&#61;1400&&B<&#61;1500disp(9);endif I>&#61;800&&I<&#61;900&&B>&#61;1600&&B<&#61;1700disp(C);endif I>&#61;900&&I<&#61;1000&&B>&#61;1200&&B<&#61;1300disp(&#39;*&#39;);endif I>&#61;900&&I<&#61;1000&&B>&#61;1300&&B<&#61;1400disp(0);endif I>&#61;900&&I<&#61;1000&&B>&#61;1400&&B<&#61;1500disp(&#39;#&#39;);endif I>&#61;900&&I<&#61;1000&&B>&#61;1600&&B<&#61;1700disp(D);end
end

  就每个频率对比就完事了&#xff0c;给每个频率一个范围&#xff0c;我上面给的范围很宽&#xff0c;可以是适当的压缩。

三&#xff0c;结果分析

就用上篇文章产生的音频&#xff0c;按键持续时间为0.5s&#xff0c;空白时间为0.5s

与产生的结果相同。

四&#xff0c;函数用法

audioread

转:https://www.cnblogs.com/BugsCreator/p/10273092.html



推荐阅读
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • HTML学习02 图像标签的使用和属性
    本文介绍了HTML中图像标签的使用和属性,包括定义图像、定义图像地图、使用源属性和替换文本属性。同时提供了相关实例和注意事项,帮助读者更好地理解和应用图像标签。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
author-avatar
最最时尚搭配攻略_
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有