主要内容

Spectralcentroid.

用于音频信号和听觉谱图的光谱质心

描述

例子

封面= spectralCentroid (XF返回信号的谱心,X, 随着时间的推移。该功能如何解释X取决于形状F

例子

封面= spectralCentroid (XF名称,价值使用一个或多个指定选项名称,价值对参数。

例子

全部折叠

在音频文件中读取,使用默认参数计算质心,然后绘制结果。

[audioIn, fs] = audioread ('Counting-16-44p1-mono-15secs.wav');质心= spectralCentroid (audioIn, fs);t = linspace(0,大小(audioIn 1) / fs,大小(重心,1));绘制(t,质心)xlabel(“时间(s)”) ylabel ('质心(Hz)'

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

在音频文件中读取,然后将信号缓冲到30毫米帧,20毫秒重叠。使用该计算速度功率谱poctave功能。

[audioIn, fs] = audioread ('Counting-16-44p1-mono-15secs.wav');audioBuffered =缓冲区(audioIn,圆(fs * 0.03),圆(fs * 0.02),'nodelay');[p, cf] = poctave (audioBuffered fs);

计算倍频功率谱随时间的重心。策划的结果。

质心= Spectralcerroid(P,CF);t = linspace(0,大小(audioIn 1) / fs,大小(重心,1));绘制(t,质心)xlabel(“时间(s)”) ylabel ('质心(Hz)'

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

在音频文件中读取。

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

计算电力谱的质心随时间。使用25毫秒重叠计算50毫米汉明窗口的质心。使用62.5 Hz的范围FS./2为质心计算。策划的结果。

Centroid = Spectralcentroid(AudioIn,FS,......'窗户',汉明(圆形(0.05 * fs)),......'overlaplencth',圆形(0.025 * fs),......“范围”, 62.5, f / 2);t = linspace(0,大小(audioIn 1) / fs,大小(重心,1));绘制(t,质心)xlabel(“时间(s)”) ylabel ('质心(Hz)'

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

创建一个dsp.audiofilereader.对象以逐帧读取音频数据。创建一个dsp。SignalSink记录谱心计算。

filereader = dsp.audiofilereader('Counting-16-44p1-mono-15secs.wav');logger = dsp.signalsink;

在音频流循环中:

  1. 读入一帧音频数据。

  2. 计算音频帧的谱心。

  3. 记录频谱质心以供以后绘图。

若要仅计算给定输入帧的谱心,请指定与输入帧具有相同样本数的窗口,并将重叠长度设为零。

绘制记录的数据。

~isDone(fileReader) audioIn = fileReader();质心= spectralCentroid (audioIn fileReader。SampleRate,......'窗户',汉明(尺寸(isausin,1)),......'overlaplencth', 0);记录器(重心)结尾情节(logger.Buffer) ylabel ('质心(Hz)'

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

如果你的音频流循环的输入有一个可变的采样帧,一个不一致的采样帧的分析窗口大小Spectralcentroid.,或者如果您想计算重叠数据的谱心,请使用dsp.asyncbuffer.

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

buff = dsp.asyncuffer;重置(记录器)释放(Filereader)

指定光谱质心是为50毫秒帧和25毫秒重叠计算的。

fs = fileReader.SampleRate;samplesPerFrame =圆(fs * 0.05);samplesOverlap =圆(fs * 0.025);samplesPerHop = samplesPerFrame - samplesOverlap;赢得=汉明(samplesPerFrame);~isDone(fileReader) audioIn = fileReader();写(buff,audioin);buff.numunReadsamples> = samplesperhop audiobuffered = read(buff,samplesperframe,samplesoverlap);Centroid = Spectralcentroid(Audiobuffered,FS,......'窗户',赢了,......'overlaplencth', 0);记录器(重心)结尾结尾发布(Filereader)

绘制记录的数据。

情节(logger.Buffer) ylabel ('质心(Hz)'

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

输入参数

全部折叠

输入信号,指定为矢量、矩阵或三维阵列。该功能如何解释X取决于形状F

数据类型:单身的|

以Hz为单位的采样率或频率矢量,分别指定为标量或矢量。该功能如何解释X取决于形状F

  • 如果F是标量,X被解释为时域信号,和F为采样率。在这种情况下,X必须是真正的矢量或矩阵。如果X被指定为矩阵,列被解释为单独的通道。

  • 如果F是矢量,X被解释为频域信号,和F被解释为频率,在Hz中,对应于行的行X.在这种情况下,X必须是一个真实的L.——- - - - - -m——- - - - - -N.阵列,其中L.在给定频率的谱值的数目是多少Fm是个别光谱的数量,和N.是渠道的数量。

  • 行的数量XL.,必须等于元素的数量F

数据类型:单身的|

名称-值对的观点

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

例子:'窗口',汉明(256)

笔记

以下名称值对参数适用X是一个时域信号。如果X是频域信号,忽略名称值对参数。

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

数据类型:单身的|

相邻窗口之间重叠的样本数,指定为由逗号分隔的对组成'overlaplencth'并且范围内的整数[0,尺寸(窗户,1)).

数据类型:单身的|

用于计算DFT的窗口输入样本的频体数量,指定为逗号分隔对“FFTLength”一个正的标量整数。如果未指定的,FFTLENG属性中的元素数量默认为窗户

数据类型:单身的|

Hz的频率范围,指定为逗号分隔对组成“范围”一个两元素的行向量在[0,F/ 2]。

数据类型:单身的|

谱类型,指定为逗号分隔对,由'spectrumtype''力量'“级”

  • '力量'——计算单边功率谱的谱心。

  • “级”——谱心为单边幅值谱计算。

数据类型:字符|细绳

输出参数

全部折叠

以Hz表示的谱心,返回为标量、矢量或矩阵。每一行的封面对应于窗口的谱心X.每列封面对应于独立频道。

算法

如下所述计算谱质心[1]

封面 = σ. K. = B. 1 B. 2 F K. S. K. σ. K. = B. 1 B. 2 S. K.

在哪里

  • FK.是Hz的频率对应于箱K.

  • S.K.是垃圾箱的光谱值K.

  • B.1B.2是波段边缘,在箱子里,在上面计算光谱质心。

参考文献

[1]彼得斯,G。“在CUIDADO项目中,用于声音描述(相似性和分类)的大量音频功能集。”技术报告;法国巴黎,2004年。

扩展能力

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

GPU阵列
使用并行计算工具箱™在图形处理单元(GPU)上运行加速代码。

在R2019A介绍