gpt4 book ai didi

java - 安卓:基频

转载 作者:行者123 更新时间:2023-11-29 07:47:56 24 4
gpt4 key购买 nike

我想在 Android 应用程序中找到人声的基频。我用 this FFT class 计算这个还有这个Complex class .

我计算 FFT 的代码是这样的:

public double calculateFFT(byte[] signal)
{
final int mNumberOfFFTPoints =1024;
double mMaxFFTSample;

double temp;
Complex[] y;
Complex[] complexSignal = new Complex[mNumberOfFFTPoints];
double[] absSignal = new double[mNumberOfFFTPoints/2];

for(int i = 0; i < mNumberOfFFTPoints; i++){
temp = (double)((signal[2*i] & 0xFF) | (signal[2*i+1] << 8)) / 32768.0F;
complexSignal[i] = new Complex(temp,0.0);
}

y = FFT.fft(complexSignal);

mMaxFFTSample = 0.0;
int mPeakPos = 0;
for(int i = 0; i < (mNumberOfFFTPoints/2); i++)
{
absSignal[i] = Math.sqrt(Math.pow(y[i].re(), 2) + Math.pow(y[i].im(), 2));

if(absSignal[i] > mMaxFFTSample)
{
mMaxFFTSample = absSignal[i];
mPeakPos = i;
}
}


return ((1.0 * sampleRate) / (1.0 * mNumberOfFFTPoints)) * mPeakPos;

}

我和我有相同的值(value)观 How do I obtain the frequencies of each value in an FFT?

是否可以从这些值中找到基频?有人可以帮助我吗?

提前致谢。

最佳答案

如以下引用资料所示,人声的基频检测是一个活跃的研究领域。您的方法必须经过精心设计,并且必须取决于数据的性质。

例如,如果您的来源是一个人在唱一个音符,录音中没有音乐或其他背景声音,则修改后的峰值检测器可能会给出合理的结果。

如果您的来源是一般化的人类语音,那么除了语音中的各个共振峰之外,您不会获得任何其他东西的唯一基频。

下图说明了一个简单的检测问题。它显示了持有降 B-3 (Bb3) 音符的女高音的频谱。 Bb3 的基频是 233 赫兹,但女高音实际上唱的是 236 赫兹的基频(最左边和最高的峰值)。在这种情况下,一个简单的峰值检测器会产生正确的基频。

Frequency spectrum of female soprano singing B-flat-3 note. Sooeet.com FFT calculator

下图说明了基频检测的挑战之一,即使是单独演唱的音符,更不用说一般的人类语音了。它显示了持有 F4 音符的女高音的频谱。 F4 的基频是 349 赫兹,但女高音实际上唱的是 360 赫兹的基频(最左边的峰值)。

Frequency spectrum of female soprano singing F4 note. Sooeet.com FFT calculator

但是,在这种情况下,最高峰不是基波,而是 714 Hz 处的一次谐波。您修改后的峰值检测器必须应对这些情况。

在一般的人类语音中,基频的概念实际上并不适用于比语音中每个单独的共振峰持续时间更长的任何子集。这是因为广义人类语音的频谱是高度时变的。

请参阅这些引用资料:

Speech Signal Analysis

Human Speech Formants

Fundamental frequency detection

来自 Sooeet.com FFT calculator 的 FFT、图表和音频数据

关于java - 安卓:基频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23867867/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com