Questions tagged «pitch»

4
您可以在不增加窗口大小的情况下提高FFT的频率分辨率吗?
我想使用STFT进行多音高分析。我意识到检测信号中存在的部分仅仅是开始。我还是有问题。 假设我已经以“ CD”频率采样了信号44100Hz。在1024样本窗口中,我得到的频点分辨率为22500Hz/512=43Hz。这仅足以识别诸如C5 = 523.251Hz和的高钢琴音符 C#5 = 554.365。 我曾经认为这1024是一个很大的窗口。但是也许不是,通常使用较大的窗口来检测局部图像吗? 除了增加窗口大小之外,是否可以使用其他方法来提高频率分辨率,这会使时间分辨率恶化?我想到了两种方法: 方法1: 使用带通滤波器将信号划分为多个频带(例如0-11.25Hz和11.25-22.5Hz)。 对较高的频段进行下采样,以使原来的高频现在变为低频(第二个频段也是如此11.25-22.5Hz -> 0Hz-22.5Hz)-不确定是否可行。 Concat生成的带有已调整标签的垃圾箱集。 方法2: 使用限制不断增加的一系列低通滤波器。 在增加的频率范围上执行FFT。 对于每个频率,请使用最佳分辨率(来自包含该频率的第一个FFT的仓)。 这将使低频具有更好的分辨率,但是我认为这是可以的,因为对于更高的音符,频率差异会更大。 对于这个问题,我将不胜感激。 我也在这里阅读: 窗口大小,采样率如何影响FFT基音估计? 关于改善峰提取结果的方法。我认为会尝试使用它。
12 filters  fft  pitch  stft 

2
将弯音(MIDI)值转换为“正常”音调值
我正在尝试使用此处给出的rt_lpc(实时LPC)实现进行离线LPC分析和综合。该程序中有一些功能可用于脱机LPC分析和综合程序。rt_lpc代码主要用于作曲家等,这意味着它使用MIDI或声门脉冲输入。程序中有一些代码可将音高值(从自相关获得)转换为该bend值。该关系如下所示: pitch = (int)( Stk::sampleRate() / midi2pitch[ananya.data[1]] ) / pow( 1.0653f, bend/64.0f*11.0f ); power *= ananya.data[2] / 64.0f; bend = ge.data[1] / 128.0f + ge.data[2] - 64; 有几点: 一。ananya是一个MidiMsg似乎正在动态填充的类型的对象。 b。ge也是一个MidiMsg似乎也在飞行中填充的类型的对象。 C。这两个对象是在程序实时运行时创建的(mine是一个脱机版本,它在我自己的main.cpp中运行它的特定部分。 我的问题: 1.什么是弯音? 2.如何将螺距值转换为折弯值?有哪些映射关系? 我已经用谷歌搜索解决方案,但没有找到明确的答案。
11 music  pitch 

2
实时人体音高检测
我正在尝试实现一个唱歌游戏,该游戏将分析原始麦克风输入并告诉玩家他的演唱水平如何。这需要实时完成。 我遇到了很多线程在问同样的问题,但是我仍然没有完成它,这可能是由于我缺乏该领域的经验和浅薄的数学背景。我已经基于DSPDimension网站音高偏移的文章实现了一种算法:http ://www.dspdimension.com/admin/pitch-shifting-using-the-ft/ 正如文章所解释的,我提取了真实的频率和幅度,但是我不知道以此找到基本频率。我试图获得最大幅度的信号仓,但是对于较高音调的信号只能给出正确的结果,无论我使用哪种过采样因子,对于低频信号仍然会得到不好的数据。这种方法是完全错误的,还是我在正确的轨道上却只是缺少一些东西? 提前致谢, 编辑:我忘了提及我只对音高类感兴趣,因此可以确定基本面是否缺失,但样本中的色相强烈。 EDIT2:谢谢大家,我刚刚完成了一个算法的工作,它就像一个魅力。低音高估计问题是由于我的输入测试所致。当我演唱音符时,音符正确匹配。另外,我现在正在考虑所有谐波,而不仅仅是最高峰值。

2
使用AMDF进行基音提取时如何处理低基数?
我正在使用平均幅度差函数来估计准周期音频信号的基本频率。AMDF定义为 dñ= 1ñ− n∑k = nñ− 1| 小号ķ− Sk − n|dñ=1个ñ-ñ∑ķ=ññ-1个|小号ķ-小号ķ-ñ| D_n = \frac{1}{N-n}\sum_{k=n}^{N-1}|S_k - S_{k-n}| 其中是信号的长度。当信号偏移等于其周期的量时,此功能将显示最小值。ññN 这是我用来提取音高的代码(在Matlab中): a = amdf(f); a = a/max(a); [p l] = findpeaks(-a, 'minpeakprominence', 0.6); pitch = round(sample_freq/l(1); 但是,我正在处理基频非常低的音频信号: 结果,出现音调加倍问题:检测到的最小值对应于信号周期的一半(即二次谐波): 我试图提取最大的峰,而不仅仅是第一个峰,但有时这个问题仍然存在。我该如何改善我的代码和/或AMDF功能以应对低基础?

2
音高检测中的谐波产品频谱限制
我已经使用HPS制作了音高检测算法,但遇到了问题。我是信号处理的初学者,这个站点以前曾帮助过我,所以我应该问一下。 对于更高的音调( eg. >C6:1046.50hz),我开始从HPS获取垃圾数据。音调越高,我得到的垃圾越多(“垃圾”是指既不是倍频程误差也不是谐波的频率,大约在1Hz-20Hz) 我的经验观察到: 如果基音高于A6左右,则结果对于更高的音调是最差的,我只会得到垃圾数据。 即使在非常高的音调下,FFT也能正常工作(按我的意思是,它的峰值显示的是基波或谐波之一,但没有垃圾) 如果我降低了考虑使用HPS的谐波数量,垃圾将减少,但是这使得区分基波和谐波变得更加困难。 这是我的算法: ->raw buffer -> hann window, 16384 samples, 50% overlap -> zero padding -> FFT -> HPS 任何帮助表示赞赏! 更新1:因此,我还要添加一些其他内容: 我记录的采样率为44100 Hz 我观察到这种行为在吉他上几乎看不到,但在数码钢琴上却很明显(对于相同的演奏音符) 这是我的hps算法,也许经验丰富的人可以发现问题。 int hps(float* spectrum, int spectrumSize, int harmonics) { int i, j, maxSearchIndex, maxBin; maxSearchIndex = spectrumSize/harmonics; maxBin = 1; …

1
什么是AMDF?
平均幅度差函数/公式(AMDF)的维基百科页面似乎为空。什么是AMDF?AMDF的属性是什么?与其他音高估计方法(例如自相关)相比,AMDF的优缺点是什么?

1
离散傅立叶变换-快速找到基本原理?
首先,我很抱歉,因为我是一名软件开发人员,而且很长一段时间以来我还没有深入研究纯数学,所以我的问题似乎很愚蠢。我希望不是。 背景是音乐中的音高识别。 如果您记下音符,然后对其进行傅立叶变换,则对于给定的频率,您将获得无限的振幅总和。例如,如果我在任何乐器上演奏基音为的音符,则在进行傅立叶变换后,我将在处产生谐波。每个频率都会有一个给定的幅度,该幅度定义了乐器的音色(钢琴,声音,小号……都遵循此律,但是每个谐波的幅度都不同)F ,2 F ,3 F ,… ,n FFFFF,2 楼,3 ˚F,… ,n FF,2F,3F,…,ñFF, 2F, 3F,\ldots,nF 现在我想要做的是从给定的音频信号,找到。只是。这比看起来要复杂得多,因为您将始终有背景噪声等等。此外,不一定是振幅最高的频率!˚FFFFFFF 因此,我找到想法是应用DFT(实际上实际上是FFT以获得速度)并找到频率,以便在FFT输出中最大。F F + 2 F + 3 F + … + n FFFFFFFF+ 2 楼+ 3 楼+ … + n FF+2F+3F+…+ñFF + 2F +3F + \ldots + nF 您认为这完全有可能吗?您认为在很短的时间内(例如<5毫秒)有可能吗?
9 audio  fft  pitch 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.