matlab - 在 MATLAB 中计算音频音高?

标签 matlab estimation waveform pitch fft

昨天我完成了用于检测随时间显示的轨道的音频能量的代码,我最终将把它用作我的音频缩略图项目的一部分。

但是,我还想要一种可以检测随时间显示的轨道音高的方法,因此我有两个选项可以作为我研究的基础。

[y, fs, nb] = wavread('Three.wav');                  %# Load the signal into variable y

frameWidth = 441;                                    %# 10 msec
numSamples = length(y);                              %# Number of samples in y
numFrames = floor(numSamples/frameWidth);            %# Number of full frames in y
energy = zeros(1,numFrames);                         %# Initialize energy

for frame = 1:numFrames                              %# Loop over frames
  startSample = (frame-1)*frameWidth+1;              %# Starting index of frame
  endSample = startSample+frameWidth-1;              %# Ending index of frame
  energy(frame) = sum(y(startSample:endSample).^2);  %# Calculate frame energy
end

那是能量法的正确代码,经过研究,我发现我需要使用离散时间傅里叶变换来找到循环中每一帧的当前音高。

我认为该过程就像修改代码的最后几行以包含用于计算离散傅里叶变换的“fft”MATLAB 命令一样简单,但我得到的只是关于不平衡方程的错误。

帮助将不胜感激,即使它只是朝着正确方向的一般指针。谢谢你。

最佳答案

确定音高比仅应用 DFT 复杂得多。它还取决于源的性质——例如,不同的算法适用于语音和乐器。如果这是一首音乐轨道,正如您的问题所暗示的那样,那么您可能不走运,因为没有明显的方法可以确定一起演奏的多个乐器的单个音高值(在这种情况下,您甚至会如何定义音高) ?)。也许您可以更具体地说明您要做什么——也许功率谱比尝试确定任意音高更有用?

关于matlab - 在 MATLAB 中计算音频音高?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40572803/

相关文章:

matlab - 如何用计算机检查矩阵是否是奇异的

matlab - int32 类型变量的平方根

tdd - 使用 TDD 时,如何在规划和估算中获得足够的细节?

c++ - 识别/生成波形?

c - 梯形波方程的方程

audio - 我如何在嘈杂的环境中识别出独特的声音?

arrays - Matlab:将双向量数组转换为字符串元胞数组

performance - Matlab 重复矩阵乘法 - 循环与内置性能

python - celery 最好的方式管理/获取任务的eta

estimation - 软件开发中如何避免80/20规则