我正在尝试制作一个实时(ish)单声道吉他到 MIDI 程序。我想要 <=6 毫秒的延迟。为了找到演奏的音符,我的目标是采样 256 个点(大约需要 6 毫秒),运行 fft 并分析 mag 图以确定演奏的音符音高。
当我在 matlab 中执行此操作时,它会返回非常不稳定/不准确的结果,峰值出现在随机位置等。
输入的音符是 110Hz @ 44.1khz 采样。我在 500hz 应用了一个高通滤波器,滚降为 48db/octave.. 所以只有信号的高次谐波应该保留。音频持续 1 秒(在 256 个样本后用零填充)
代码:
%fft work
guitar = wavread('C:\Users\Donnacha\Desktop\Astring110hz.wav');
guitar(1:44100);
X = fft(guitar);
Xmag = abs(X);
plot(Xmag);
我希望从 >500hz 开始看到 110Hz(吉他上的一个音符)的所有谐波。
我如何用这么少的数据从 FFT 中获得准确的结果?