主要内容

和声

谐波比

描述

例子

人力资源= harmonicRatio (音频素fs返回信号的谐波比,音频素,随着时间的推移。输入列被视为单个通道。

例子

人力资源= harmonicRatio (音频素fs名称、值使用一个或多个指定选项名称、值对参数。

例子:hr = harmonicRatio (audioIn、fs、“窗口”,rectwin(圆(fs * 0.1)),“OverlapLength”轮(fs * 0.05))返回在以下位置采样的音频输入信号的谐波比率:fs赫兹。计算了100 ms重叠50 ms矩形窗口的谐波比。

例子

全部崩溃

读入音频文件,使用默认参数计算谐波比率,然后绘制结果。

[audioIn, fs] = audioread (“三-24-96-立体声-13秒aif”);audioInMono =意味着(audioIn, 2);hr = harmonicRatio (audioInMono, fs);t =(0:长度(audioInMono) 1) / fs;次要情节(2,1,1)情节(t, audioInMono) ylabel (“振幅”)t=linspace(0,大小(audioInMono,1)/fs,大小(hr,1));子地块(2,1,2)图(t,hr)xlabel(‘时间’) ylabel (“谐波比率”

图中包含两个轴对象。轴对象1包含类型为line的对象。轴对象2包含类型为line的对象。

读入音频文件。

[audioIn, fs] = audioread (“Counting-16-44p1-mono-15secs.wav”);

计算音频文件的谐波比率使用50 ms Hann窗口与25 ms重叠。策划的结果。

hr = harmonicRatio (audioIn fs,...“窗口”,汉恩(圆形(fs.*0.05),“周期”),...“OverlapLength”,圆形(fs.*0.025));t=linspace(0,大小(audioIn,1)/fs,大小(hr,1));plot(t,hr)xlabel(‘时间’) ylabel (“谐波比率”

图中包含一个axes对象。axes对象包含一个line类型的对象。

谐波比率表示音频谐波部分的能量与音频总能量的比率。因为本例中的音频信号具有接近静默的区域,其中总能量非常低,所以谐波比率在区分语音区域和静默区域方面做得很差。将白噪声添加到音频信号中,然后计算并绘制谐波比率。

audioIn = audioIn + 0.1*randn(size(audioIn)));hr = harmonicRatio (audioIn fs,...“窗口”,汉恩(圆形(fs.*0.05),“周期”),...“OverlapLength”,圆形(fs.*0.025));t=linspace(0,大小(audioIn,1)/fs,大小(hr,1));plot(t,hr)xlabel(‘时间’) ylabel (“谐波比率”

图中包含一个axes对象。axes对象包含一个line类型的对象。

创建一个dsp。AudioFileReader对象逐帧读取立体声音频数据。创建一个dsp。SignalSink对象来记录谐波比率计算。

fileReader=dsp.AudioFileReader(“三-24-96-立体声-13秒aif”);记录器= dsp.SignalSink;

在音频流循环中:

  1. 读入一帧音频数据。

  2. 计算音频帧的每个通道的谐波比率。

  3. 对谐波比率作对数,以便日后绘图。

为了只计算给定输入帧的谐波比,指定一个与输入帧具有相同采样数的窗口,并将重叠长度设为零。绘制记录的数据。

=汉明(fileReader获胜。SamplesPerFrame,“周期”);虽然~isDone(fileReader) audioIn = fileReader();hr = harmonicRatio (audioIn fileReader。SampleRate,...“窗口”...“OverlapLength”,0);记录器(小时)结束plot(logger.Buffer)ylabel(“谐波比率”)传说(“左通道”“正确的通道”

图中包含一个轴对象。轴对象包含两个类型为line的对象。这些对象表示左通道和右通道。

如果你的音频流循环的输入有一个可变的采样帧,一个不一致的采样帧的分析窗口大小和声,或者如果要计算重叠数据的谐波比率,请使用异步缓冲器

创建一个异步缓冲器对象,重置日志记录器,并释放文件读取器。

浅黄色= dsp.AsyncBuffer;重置(logger)释放(fileReader)

使用重叠25 ms的50 ms帧计算谐波比率。

fs=fileReader.SampleRate;samplesPerFrame=round(fs*0.05);samplesOverlap=round(fs*0.025);samplesPerHop=samplesPerFrame-samplesOverlap;win=hamming(samplesPerFrame);虽然~isDone(fileReader) audioIn = fileReader();写(浅黄色,audioIn);虽然buff.NumUnreadSamples>=samplesPerHop音频缓冲=读取(buff,samplesPerFrame,samplesOverlap);hr=harmonicRatio(音频缓冲,fs,...“窗口”...“OverlapLength”,0);记录器(小时)结束结束发行版(fileReader)

绘制记录的数据。

plot(logger.Buffer)ylabel(“谐波比率”)传说(“左通道”“正确的通道”

图中包含一个轴对象。轴对象包含两个类型为line的对象。这些对象表示左通道和右通道。

谐波比率测量信号音调部分的能量与总信号中的能量之比。

纯音的和声比率

创建纯音,然后使用默认参数计算谐波比率。默认情况下,谐波比率是针对30毫秒的Hamming窗口和10毫秒的跳数计算的。绘制结果。谐波比接近1,这是理论最大值。

fs = 48 e3;osc = audioOscillator (“频率”, 500,...“样品性能框架”,192e3,“SampleRate”fs);sinewave = osc ();hr = harmonicRatio (sinewave, fs);t = linspace(0,大小(sinewave 1) / fs,大小(hr, 1));情节(t, hr)包含(‘时间’) ylabel (“谐波比率”)头衔('Sinusoid -默认参数'

图中包含一个轴对象。轴对象的标题为Sinusoid -默认参数包含一个类型为line的对象。

加窗所需的短时分析会将谐波比率从理论值1降低到1。要减小加窗的影响,可以增加窗口大小。使用100 ms的汉明窗口和10 ms的跃点,观察谐波比率比使用默认窗口长度时更接近1。

赢得=汉明(圆(fs * 0.1),“周期”);重叠=圆(fs * 0.099);hr = harmonicRatio (sinewave fs,“窗口”“OverlapLength”、重叠);t = linspace(0,大小(sinewave 1) / fs,大小(hr, 1));情节(t, hr)包含(‘时间’) ylabel (“谐波比率”)头衔('Sinusoid - 100ms Window'

图中包含一个axes对象。标题为Sinusoid-100 ms窗口的axes对象包含一个line类型的对象。

白噪声的谐波比

创建5秒的白噪声,然后使用默认参数计算谐波比率。默认情况下,谐波比率计算为30毫秒的汉明窗口和10毫秒的跳数。策划的结果。调和比是0。

fs = 48 e3;噪音=兰德(fs * 5, 1);hr = harmonicRatio(噪音、fs);t = linspace(0,大小(噪音,1)/ fs,大小(hr, 1));情节(t, hr)包含(‘时间’) ylabel (“谐波比率”)头衔('Noise - Default Parameters'

图中包含一个Axis对象。带有标题噪波-默认参数的Axis对象包含一个line类型的对象。

输入参数

全部崩溃

输入信号,指定为列向量或矩阵。如果指定为矩阵,和声将矩阵的列视为单独的音频通道。

数据类型:|双重的

输入信号的采样率(Hz),指定为一个正标量。

数据类型:|双重的

名称-值参数

指定可选的逗号分隔的对名称、值论据。的名字参数名和价值为对应值。的名字必须出现在引号内。您可以按任意顺序指定多个名称和值对参数,如下所示:Name1, Value1,…,的家

例子:“窗口”,汉明(256)

窗口应用于时域,指定为逗号分隔对,由'窗口’和一个真正的向量。向量中的元素个数必须在范围[1,大小(音频素,1)]。向量中的元素数也必须大于重叠长度

数据类型:|双重的

相邻窗口之间重叠的样本数量,指定为逗号分隔对,包含'重叠长度'和范围为[0]的整数,大小(窗口,1)).

数据类型:|双重的

输出参数

全部崩溃

调和比,作为标量、向量或矩阵返回。每行人力资源对应于窗口的谐波比率音频素。谐波比率返回的值在[0,1]范围内。值0表示低谐波,值1表示高谐波。

数据类型:|双重的

算法

谐波比的计算如[1].下面的算法独立应用于音频数据的每个窗口。信号的归一化自相关确定为:

Γ n 1 N 年代 n 年代 n n 1 N 年代 n 2 n 0 N 年代 n 2 1

在哪里

  • 年代是单帧音频数据吗N元素。

  • 为计算中最大滞后。最大延迟为40 ms,对应的最小基频为25 Hz。

在给定的范围内,调和比的第一个估计是归一化自相关的最大值:

β H R 最大值 0 Γ

在哪里0是搜索范围的下边缘,确定为归一化自相关的第一个零交叉。

最后,利用抛物线插值对谐波比估计进行改进,如[2]

参考文献

[1] Kim hyung - gook, Nicholas Moreau, Thomas Sikora。MPEG-7音频和超越:音频内容索引和检索约翰·威利父子公司,2005年。

[2]谱峰二次插值。已于2018年10月11日生效。https://ccrma.stanford.edu/~jos/sasp/Quadratic_Interpolation_Spectral_Peaks.html

扩展功能

C/C++代码生成
使用Matlab®编码器生成C和C++代码™.

介绍了R2019a