android实时声音信号波形_如何获得某频率音频信号实时android的幅度

我正在开发lumiere应用程序。我有一个特定频率的载波信号(如果要更精确一些,则为19.2 kHz),我需要在播放音频时获得它的幅度。

我搜索了一些关于音频处理的信息,并发现为了获得频谱,你必须使用FFT算法。

我已经尝试过TarsosDSP库和它的FFT类。

TarsosDSPAudioFormat format = new TarsosDSPAudioFormat((float) SAMPLE_RATE, 16, 1, true, false);

TarsosDSPAudioFloatConverter converter = TarsosDSPAudioFloatConverter.getConverter(format);

float[] buff = new float[bufferFloatSize];

final float[] amps = new float[fftSize];

converter.toFloatArray(tmpBuffer, buff);

FFT fft = new FFT(bufferFloatSize, new HannWindow());

fft.forwardTransform(buff);

fft.modulus(buff, amps);然后我得到频带指标并计算其幅度

int amp = (int) (10 * Math.log10(amps[index]);但我得到错误的幅度。

我有一个具有19.2kHz信号的音频文件,其具有0dB的恒定振幅,但是19207Hz振幅的结果值从-39dB到-46dB变化。我检查了相邻的频率,可能其中一些有0 dB,但没有。

我还检查了-36 dB和-60 dB的文件,但结果分别是-39到-48 dB和-44到-61 dB。

正如我们可以看到最后一个文件很接近,但它不是恒定的,我无法预测什么时候它是正确的,什么时候是错误的。

如果有人遇到这个问题,请帮助我。

如果你知道任何其他可行的好的FFT库 - 告诉我

更新:

好的,我添加了TSG的函数,并在我的fft.forwardTransform()之前和之后比较结果;

结果是:

用于0 dB 19.2kHz音频文件:

之前:-39分贝

之后 - 10分贝

为-36 dB 19.2kHz音频文件:

之前:-75分贝

之后:-46分贝

为-60 dB 19.2kHz音频文件:

之前:-97.7分贝

之后:-69分贝

现在结果是不变的,不会随着时间改变或尝试。

我们也可以看到结果中存在一定的模式。在fft之前,结果与-39 dB和-10dB之后的结果不同。

所以问题是:为什么我们会犯这些错误?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值