首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理人类语音

处理人类语音
EN

Stack Overflow用户
提问于 2013-04-09 15:39:27
回答 2查看 366关注 0票数 0

我正在尝试做一个android应用程序来检查一个人的录音是否是高频的,我已经完成了录音部分,但不知道如何继续进行。经过搜索,我发现必须使用FFT算法,但问题是如何获得必须作为输入传递给算法的数组值。有谁能帮帮忙吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-09 15:54:48

假设您已经定义了什么是“包含高频”,并且您只需要对此进行度量(不需要在图中可视化频率内容),那么实际上就没有必要计算FFT。

我会计算信号的RMS值(总能量的度量),然后对数据应用低通滤波器(在时域中),并在滤波后的信号上再次计算RMS值。比较能量损失是衡量高频成分对初始能量值有多大的影响。

回复评论:

你需要数据来处理它!也许我没听懂你的问题?因此,我假设你已经将信号存储在内存中,现在你需要计算信号的总能量,以便A)计算滤波后能量的变化,或者B)将能量与某个预定义的硬编码值(糟糕的想法顺便说一句)进行比较。

无论哪种方式,如果您想要的只是一个度量/值,则应该在时域中完成此操作。正如Parseval定理所述,不需要执行cpu密集型处理并转到频域来计算信号的能量。http://en.wikipedia.org/wiki/Parseval的s_theorem

详细说明:

当您记录用户的语音(为您的信号收集数据)时,您需要确保数据不会丢失,并且正确地存储在内存中(在某些数组类型的对象中),并且您有对此数组的引用。一旦收集到数据,您就不需要将您的信号转换为值,它已经存储为值序列。因此,您现在可以执行一些计算,以获得“有多少高频”的度量……

RMS (均方根值)值是测量信号总能量的标准化方法-取“所有值的平方平均值的平方根”。请参阅http://mathworld.wolfram.com/Root-Mean-Square.html

RMS是快速和易于计算的,但它给出了总信号的能量,低频成分和高频成分在一起,没有办法知道高RMS值是由于许多高频成分或低频成分。因此,我建议你去掉高频分量并重新计算RMS值,看看在这样做的过程中总能量发生了多少变化,即。高频在多大程度上决定了初始“原始”RMS值。将这两个值相除就是你的高频比度量。我不确定这是你想要做的,但我会这么做。

为了执行低通滤波,你需要选择一个频率值Fcut,并说任何超过这个值的东西都被认为是“高”的,然后应用一个低通滤波器,截止点设置为Fcut,应用一个滤波器是通过卷积在时域中完成的。

票数 2
EN

Stack Overflow用户

发布于 2013-04-09 15:47:12

通常他们使用AudioRecord类。它写入原始的PCM数据,然后他们可以对这些数据进行一些计算。

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

https://stackoverflow.com/questions/15896056

复制
相关文章

相似问题

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