主要内容

harmonicRatio

谐波比率

描述

例子

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

例子

人力资源= harmonicRatio (audioInfs名称,值使用一个或多个指定选项名称,值对参数。

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

例子

全部折叠

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

[audioIn, fs] = audioread (“randomoscthree - 24 - 96立体声- 13 - secs.aif”);audioInMono =意味着(audioIn, 2);hr = harmonicRatio (audioInMono, fs);t =(0:长度(audioInMono) 1) / fs;次要情节(2,1,1)情节(t, audioInMono) ylabel (“振幅”) t = linspace(0,size(audioInMono,1)/fs,size(hr,1)); / /文件大小次要情节(2,1,2)情节(t, hr)包含(“时间(s)”) ylabel (“谐波比率”

图中包含2个轴。Axes 1包含一个类型为line的对象。Axes 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));情节(t, hr)包含(“时间(s)”) ylabel (“谐波比率”

图中包含一个坐标轴。轴包含一个线型对象。

谐波比表示音频的谐波部分的能量与音频的总能量的比值。因为这个例子中的音频信号有一些接近静音的区域,这些区域的总能量非常低,所以谐波比在区分语音区域和静音区域方面做得很差。在音频信号中加入白噪声,然后计算并绘制谐波比。

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));情节(t, hr)包含(“时间(s)”) ylabel (“谐波比率”

图中包含一个坐标轴。轴包含一个线型对象。

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

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

在音频流循环中:

  1. 读入一帧音频数据。

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

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

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

=汉明(fileReader获胜。SamplesPerFrame,“周期”);~isDone(fileReader) audioIn = fileReader();hr = harmonicRatio (audioIn fileReader。SampleRate,...“窗口”,赢了,...“OverlapLength”, 0);记录器(人力资源)结束情节(logger.Buffer) ylabel (“谐波比率”)传说(“左通道”“正确的通道”

图中包含一个坐标轴。轴线包含2个线型对象。这些对象表示左通道和右通道。

如果你的音频流循环的输入有一个可变的采样帧,一个不一致的采样帧的分析窗口大小harmonicRatio,或如果您想计算重叠数据的谐波比率,请使用dsp。AsyncBuffer

创建一个dsp。AsyncBuffer对象,重置日志记录器,并释放文件读取器。

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

计算谐波比率使用50毫秒帧与25毫秒重叠。

fs = fileReader.SampleRate;samplesPerFrame =圆(fs * 0.05);samplesOverlap =圆(fs * 0.025);samplesPerHop = samplesPerFrame - samplesOverlap;赢得=汉明(samplesPerFrame);~isDone(fileReader) audioIn = fileReader();写(浅黄色,audioIn);迷。NumUnreadSamples >= samplesPerHop audioBuffered = read(buff,samplesPerFrame,samplesOverlap); hr = harmonicRatio(audioBuffered,fs,...“窗口”,赢了,...“OverlapLength”, 0);记录器(人力资源)结束结束发行版(fileReader)

绘制记录的数据。

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

图中包含一个坐标轴。轴线包含2个线型对象。这些对象表示左通道和右通道。

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

纯音的和声比率

创建一个纯色调,然后使用默认参数计算谐波比率。默认情况下,谐波比率计算为30毫秒的汉明窗口和10毫秒的跳数。策划的结果。调和比接近1,这是理论最大值。

fs = 48 e3;osc = audioOscillator (“频率”, 500,...“SamplesPerFrame”192年e3,“SampleRate”fs);sinewave = osc ();hr = harmonicRatio (sinewave, fs);t = linspace(0,大小(sinewave 1) / fs,大小(hr, 1));情节(t, hr)包含(“时间(s)”) ylabel (“谐波比率”)标题('Sinusoid -默认参数'

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

开窗所需的短时间分析使谐波比从理论值1降低。要减少窗口的效果,可以增加窗口的大小。使用100ms的汉明窗口和10ms的跳频,观察谐波比比使用默认窗口长度时更接近1。

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

图中包含一个坐标轴。标题为Sinusoid - 100ms Window的轴包含一个类型为line的对象。

白噪声的谐波比

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

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

图中包含一个坐标轴。标题为Noise - Default Parameters的轴包含一个类型为line的对象。

输入参数

全部折叠

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

数据类型:|

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

数据类型:|

名称-值对的观点

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

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

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

数据类型:|

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

数据类型:|

输出参数

全部折叠

以标量、向量或矩阵的形式返回的调和比。每一行的人力资源对应于窗口的谐波比audioIn.返回的谐波比的值在[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®Coder™生成C和c++代码。

介绍了R2019a