首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C语言中的未知模式提取

C语言中的未知模式提取
EN

Stack Overflow用户
提问于 2013-03-08 16:16:05
回答 1查看 130关注 0票数 3

我目前正在开发一个音频处理软件,它必须使用零交叉估计来检测输入信号的频率。当一个完美的正弦波作为输入时,估计频率并不难,但是当谈到钢琴时,声波是不同的,这背后的理论也在改变。

目前,该软件每零检测一次,并保存它与前一次之间的索引位置(以记录经过多少个样本)。

下面是一个阵列,其中包含在每个零点之间采样的130赫兹钢琴C音符在44.1kHz。

代码语言:javascript
复制
44  11  36  65  56  12  37  66  52  13  38  67  51  11  39  68  50  11  47  60  49  11  48  61  47  14  47  66  43  13

任务是确定一个未知长度的未知模式。但是,这些模式可能有一个误差范围。例如,

代码语言:javascript
复制
44, 11, 36, 65
56, 12, 37, 66
52, 13, 38, 67

是模式。因此,在处理模式的平均和后,可以很容易地检测到频率。如何检测这些类型的模式,知道模式的原样,以及它的长度是未知的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-08 19:00:41

你应该先试着低传递信号。这将减少信号成分,包括更高的音调,这将导致额外的零交叉。这里的重点是增加基波相对于其他谐波的强度,这些谐波实际上只是产生无关的零交叉。

关于情商的一些提示:

http://blog.bjornroche.com/2012/08/basic-audio-eqs.html

与音高检测特别相关的eq:

http://blog.bjornroche.com/2012/07/frequency-detection-using-fft-aka-pitch.html

根据您的信号,您可能需要更陡的东西,如更高的级别或不同类型的过滤器。

当然,zeroX基音检测本身是有限的,低通可能是不够的.

更新:澄清了低通的目的是强调基本面,而不是消除噪音。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15298435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档