主要内容

spectralFlux

谱通量对音频信号和听觉谱图

自从R2019a

描述

例子

通量= spectralFlux (x,f)返回信号的谱通量,x随着时间的推移。谱通量的测量光谱的变化。函数如何解释x取决于的形状f

例子

通量= spectralFlux (x,f,initialCondition)指定前面的光谱。支持这种语法只对频域输入。金宝app

例子

通量= spectralFlux (___,名称=值)使用一个或多个名称参数指定选项。

例如,通量= spectralFlux (x, f, NormType = 1)使用标准1型计算谱通量。

例子

(通量,finalCondition)= spectralFlux (___)还返回最后一个光谱的状态。您可以指定一个输入组合的任何以前的语法。

例子

spectralFlux (___)没有输出参数的谱通量的阴谋。

  • 如果输入是在时域谱通量与时间绘制。

  • 如果输入是在频域谱通量是绘制帧数。

例子

全部折叠

读入一个音频文件,并使用默认参数计算通量。

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

绘制谱通量与时间。

spectralFlux (audioIn fs)

图包含一个坐标轴对象。轴对象包含时间,ylabel通量(Hz)包含一个类型的对象。

读入一个音频文件,然后计算梅尔声谱图使用melSpectrogram函数。随着时间的推移计算通量梅尔的光谱图。

[audioIn, fs] = audioread (“Counting-16-44p1-mono-15secs.wav”);(年代,cf, t) = melSpectrogram (audioIn fs);通量= spectralFlux(年代,cf);

谱通量对帧数的阴谋。

spectralFlux(年代,cf)

图包含一个坐标轴对象。坐标轴对象包含帧,ylabel通量(Hz)包含一个类型的对象。

读入一个音频文件。

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

计算功率谱的变化。计算通量50毫秒汉明窗的数据与25 ms重叠。使用范围从62.5赫兹fs/ 2的通量的计算。

通量= spectralFlux (audioIn fs,窗口=汉明(圆(0.05 * fs)),OverlapLength = (0.025 * fs),范围= [62.5,f / 2]);

绘制谱通量。

spectralFlux (audioIn fs,窗口=汉明(圆(0.05 * fs)),OverlapLength = (0.025 * fs),范围= (62.5,f / 2))

图包含一个坐标轴对象。轴对象包含时间,ylabel通量(Hz)包含一个类型的对象。

谱通量测量连续光谱的变化。计算谱通量的流式音频,您可以通过状态的函数。

创建一个dsp.AudioFileReader对象读取音频数据帧。创建一个dsp.AsyncBuffer音频输入帧重叠对象缓冲区。创建第二个dsp.AsyncBuffer对象记录谱通量的计算。

fileReader = dsp.AudioFileReader (“Counting-16-44p1-mono-15secs.wav”);inputBuffer = dsp.AsyncBuffer;记录器= dsp.AsyncBuffer;

在一个音频流循环:

  1. 读取一帧音频数据的来源。

  2. 写输入缓冲区的音频数据。

  3. 如果跳数据可用的缓冲区,读取一帧数据的重叠。

  4. 计算单边级短时傅里叶变换。

  5. 计算谱通量。

  6. 日志后绘制的光谱变化。

fs = fileReader.SampleRate;samplesPerFrame =圆(fs * 0.05);samplesOverlap =圆(fs * 0.025);samplesPerHop = samplesPerFrame - samplesOverlap;赢得=汉明(samplesPerFrame,“周期”);Sprev = [];~结束(fileReader) audioIn = fileReader ();写(inputBuffer audioIn);inputBuffer。NumUnreadSamples >= samplesPerHop audioBuffered = read(inputBuffer,samplesPerFrame,samplesOverlap); [S,f] = stft(audioBuffered,fs,“窗口”,赢了,“OverlapLength”samplesOverlap,“FrequencyRange”,“单向的”);[通量,Sprev] = spectralFlux (abs (S)、f、Sprev);写(记录器,通量);结束结束发行版(fileReader)

情节记录的数据。

情节(读(logger)) ylabel (“通量”)

图包含一个坐标轴对象。ylabel通量的坐标轴对象包含一个类型的对象。

输入参数

全部折叠

输入信号,指定为一个向量,矩阵,或三维数组。函数如何解释x取决于的形状f

数据类型:|

采样率和频率在赫兹矢量,分别指定为一个标量或矢量。函数如何解释x取决于的形状f:

  • 如果f是一个标量,x是解释为一个时域信号,f解释为采样率。在这种情况下,x必须是一个真正的向量或矩阵。如果x被指定为一个矩阵,列是解释为个人渠道。

  • 如果f是一个矢量,x是解释为频域信号,f被解释为频率,在赫兹,对应的行吗x。在这种情况下,x必须是一个真正的l——- - - - - -——- - - - - -N数组,l是在给定频率的谱值的数量吗f,是个体数量的光谱,N通道的数量。

数据类型:|

以前的光谱,指定为一个l——- - - - - -N矩阵,地点:

  • l箱子的数量是片面的光谱表征,等于什么元素个数(f)

  • N音频数据的通道数,等于什么大小(x3)

如果initialCondition没有指定,或指定为空,spectralFlux认为第一光谱是重复。也就是说,第一个通量输出是零。

依赖关系

这个输入参数只如果输入有效,x,是一个音频的频域表示。的spectralFlux函数解释输入的域x基于的大小f

数据类型:|

名称-值参数

指定可选的双参数作为Name1 = Value1,…,以=家,在那里的名字参数名称和吗价值相应的价值。名称-值参数必须出现在其他参数,但对的顺序无关紧要。

R2021a之前,用逗号来分隔每一个名称和值,并附上的名字在报价。

例子:窗口=汉明(256)

规范式用于计算通量,指定为21

数据类型:|

请注意

适用以下名称参数x是一种时域信号。如果x是一个频域信号,以下名称参数被忽略。

应用于时域窗口,指定为一个真正的向量。向量中的元素的数量必须在[1,大小(x,1)]。向量中的元素的数量也必须大于OverlapLength

数据类型:|

数量的样本之间的重叠相邻窗口,指定为一个整数范围在[0,大小(窗口,1))。

数据类型:|

使用的箱子数量计算DFT的窗口的输入样本,指定为一个积极的标量整数。如果未指定的,FFTLength默认为元素的数量窗口

数据类型:|

在赫兹频率范围,指定为一个双元素的行向量增加实际价值范围在[0,f/ 2)。

数据类型:|

光谱类型,指定为“权力”“级”:

  • “权力”——为单边功率谱谱通量计算。

  • “级”——片面的光谱计算通量大小范围。

数据类型:字符|字符串

输出参数

全部折叠

谱通量在赫兹,作为一个标量,返回向量或矩阵。每一行的通量对应的光谱变化的窗口x。每一列的通量对应于一个独立的通道。

最终光谱状态,作为一个返回l——- - - - - -N矩阵,地点:

  • l箱子的数量是片面的光谱表征,等于什么元素个数(f)

  • N音频数据的通道数,等于什么大小(x3)

依赖关系

这个输出参数只如果输入有效,x,是一个音频的频域表示。的spectralFlux函数解释输入的域x基于的大小f

算法

中描述的光谱计算通量[1]:

通量( t ) = ( k = b 1 b 2 | 年代 k ( t ) 年代 k ( t 1 ) | P ) 1 P

在哪里

  • 年代k在本是光谱值吗k

  • b1b2乐队边缘,在垃圾箱,计算谱通量。

  • P是一种常态的类型。您可以指定规范类型使用NormType

引用

[1]Scheirer E。,和米。Slaney. "Construction and Evaluation of a Robust Multifeature Speech/Music Discriminator."IEEE国际会议音响、演讲和信号处理。卷2,1997年,页1221 - 1224。

扩展功能

C / c++代码生成
生成C和c++代码使用MATLAB®编码器™。

GPU数组
加速代码运行在一个图形处理单元(GPU)使用并行计算工具箱™。

版本历史

介绍了R2019a