相关疑难解决方法(0)

在iPhone上进行FFT以忽略背景噪音并找到较低的音高

我已经为iPhone 实施了Demetri的Pitch Detector项目,并遇到了两个问题.1)任何类型的背景噪声发送频率读取香蕉和2)较低频率的声音没有正确调整.我试着调整我的吉他,而更高的琴弦工作 - 调谐器无法正确辨别低音.

音高检测代码位于RIOInterface.mm中,就像这样......

// get the data
AudioUnitRender(...);

// convert int16 to float
Convert(...);

// divide the signal into even-odd configuration
vDSP_ctoz((COMPLEX*)outputBuffer, 2, &A, 1, nOver2);

// apply the fft
vDSP_fft_zrip(fftSetup, &A, stride, log2n, FFT_FORWARD);

// convert split real form to split vector
vDSP_ztoc(&A, 1, (COMPLEX *)outputBuffer, 2, nOver2);
Run Code Online (Sandbox Code Playgroud)

然后Demetri继续确定"主导"频率如下:

float dominantFrequency = 0;
int bin = -1;
for (int i=0; i<n; i+=2) {
    float curFreq = MagnitudeSquared(outputBuffer[i], outputBuffer[i+1]);
    if (curFreq > dominantFrequency) {
        dominantFrequency …
Run Code Online (Sandbox Code Playgroud)

iphone signal-processing fft pitch-tracking accelerate-framework

7
推荐指数
1
解决办法
5747
查看次数

FFT音高检测 - 旋律提取

我正在创建一个音调检测程序,它从帧的FFT中获得的功率谱中提取基频.这是我到目前为止:

  • 将输入音频信号分成帧.
  • 用汉明窗口乘帧
  • 计算帧的FFT和幅度sqrt(real ^ 2 + img ^ 2)
  • 通过谐波产物谱找到基频(峰值)
  • 将峰值频率(频率频率)转换为音符(例如~440 Hz为A4)

现在程序生成一个整数,每帧的值从0到87.每个整数对应于根据此处找到的公式I的钢琴音符.我现在试图通过基于计算的音符合成声音来模仿输入信号中的旋律.我试图简单地生成一个正弦波,其幅度和频率对应于基频,但结果听起来没有原始声音(几乎听起来像随机的哔哔声).

我根本不了解音乐所以我可以根据从基频得到的信息,根据输入(乐器,声音,乐器+声音)产生类似声音的声音吗?如果没有,我可以尝试使用我目前拥有的代码.

谢谢!

audio signal-processing fft pitch sound-synthesis

5
推荐指数
2
解决办法
1万
查看次数

如何从FFT获得基频?

我正在开发一把闪光吉他,发现麦克风数据频率的唯一明显方法似乎是使用 FFT。然而,经过大约 30 个小时的研究后,我无法找到最好的方法。我应该使用谐波积谱 (HPS)、倒谱还是最大似然?调谐器必须显示 25 到 3000Hz 的频率。

另外,如果有人知道一些准备找到基本频率的开源代码,请告诉我。我可以将它翻译成 ActionScript。

谢谢!

fft microphone frequency frequency-analysis guitar

2
推荐指数
1
解决办法
2万
查看次数