热门标签 | 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



推荐阅读
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • iOS 小组件开发指南
    本文详细介绍了iOS小部件(Widget)的开发流程,从环境搭建、证书配置到业务逻辑实现,提供了一系列实用的技术指导与代码示例。 ... [详细]
  • 使用HTML和JavaScript实现视频截图功能
    本文介绍了如何利用HTML和JavaScript实现从远程MP4、本地摄像头及本地上传的MP4文件中截取视频帧,并展示了具体的实现步骤和示例代码。 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • 雨林木风 GHOST XP SP3 经典珍藏版 YN2014.04
    雨林木风 GHOST XP SP3 经典珍藏版 YN2014.04 ... [详细]
  • 本文将详细介绍如何配置并整合MVP架构、Retrofit网络请求库、Dagger2依赖注入框架以及RxAndroid响应式编程库,构建高效、模块化的Android应用。 ... [详细]
  • Hadoop集群搭建:实现SSH无密码登录
    本文介绍了如何在CentOS 7 64位操作系统环境下配置Hadoop集群中的SSH无密码登录,包括环境准备、用户创建、密钥生成及配置等步骤。 ... [详细]
  • 分布式计算助力链力实现毫秒级安全响应,确保100%数据准确性
    随着分布式计算技术的发展,其在数据存储、文件传输、在线视频、社交平台及去中心化金融等多个领域的应用日益广泛。国际知名企业如Firefox、Google、Opera、Netflix、OpenBazaar等均已采用该技术,推动了技术创新和服务升级。 ... [详细]
  • 本文介绍了一种在 Android 开发中动态修改 strings.xml 文件中字符串值的有效方法。通过使用占位符,开发者可以在运行时根据需要填充具体的值,从而提高应用的灵活性和可维护性。 ... [详细]
  • 2023年1月28日网络安全热点
    涵盖最新的网络安全动态,包括OpenSSH和WordPress的安全更新、VirtualBox提权漏洞、以及谷歌推出的新证书验证机制等内容。 ... [详细]
  • Docker基础入门与环境配置指南
    本文介绍了Docker——一款用Go语言编写的开源应用程序容器引擎。通过Docker,用户能够将应用及其依赖打包进容器内,实现高效、轻量级的虚拟化。容器之间采用沙箱机制,确保彼此隔离且资源消耗低。 ... [详细]
  • 在学习了Splay树的基本查找功能后,可能会觉得它与普通的二叉查找树没有太大的区别,仅仅是通过splay操作减少了时间开销。然而,Splay树之所以被誉为“序列之王”,主要在于其强大的区间操作能力。 ... [详细]
  • 本文由公众号【数智物语】(ID: decision_engine)发布,关注获取更多干货。文章探讨了从数据收集到清洗、建模及可视化的全过程,介绍了41款实用工具,旨在帮助数据科学家和分析师提升工作效率。 ... [详细]
  • 深入解析Unity3D游戏开发中的音频播放技术
    在游戏开发中,音频播放是提升玩家沉浸感的关键因素之一。本文将探讨如何在Unity3D中高效地管理和播放不同类型的游戏音频,包括背景音乐和效果音效,并介绍实现这些功能的具体步骤。 ... [详细]
  • 在Android平台中,播放音频的采样率通常固定为44.1kHz,而录音的采样率则固定为8kHz。为了确保音频设备的正常工作,底层驱动必须预先设定这些固定的采样率。当上层应用提供的采样率与这些预设值不匹配时,需要通过重采样(resample)技术来调整采样率,以保证音频数据的正确处理和传输。本文将详细探讨FFMpeg在音频处理中的基础理论及重采样技术的应用。 ... [详细]
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社区 版权所有