主要内容

spectralFlatness

音频信号和听觉谱图的光谱平整度

描述

例子

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

例子

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

[平面度arithmeticMeangeometricMean) = spectralFlatness (___返回谱算术平均值和谱几何平均值。

例子

全部折叠

读入音频文件,使用默认参数计算平面度,然后绘制结果。

[audioIn, fs] = audioread ('Counting-16-44p1-mono-15secs.wav');平坦度= Spectralflatness(AudioIn,FS);t = linspace(0,大小(audioIn 1) / fs,大小(平面度,1));绘制(T,平整度)XLabel(“时间(s)”) ylabel ('平坦度'

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

在音频文件中读取,然后使用该音频文件计算MEL频谱图MELSPectRoge.功能。

[audioIn, fs] = audioread ('Counting-16-44p1-mono-15secs.wav');[S,CF,T] = MELSPectRoge(AudioIn,FS);

随着时间的推移计算MEL谱图的平坦度。绘制结果。

平坦度=光谱果实(S,CF);绘制(T,平整度)XLabel(“时间(s)”) ylabel ('平坦度'

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

在音频文件中读取。

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

随时间计算功率谱的平坦度。使用25毫秒重叠的数据的50毫米汉明窗口计算平整度。使用62.5 Hz的范围FS./ 2为平坦计算。绘制结果。

平坦度= Spectralflatness(AudioIn,FS,......'窗户',汉明(圆形(0.05 * fs)),......'overlaplencth',圆形(0.025 * fs),......“范围”, 62.5, f / 2);t = linspace(0,大小(audioIn 1) / fs,大小(平面度,1));绘制(T,平整度)XLabel(“时间(s)”) ylabel ('平坦度'

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

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

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

在音频流循环中:

  1. 读入一帧音频数据。

  2. 计算音频帧的光谱平坦度。

  3. 记录稍后绘制的光谱平整度。

若要仅计算给定输入帧的谱平面度,请指定与输入帧具有相同采样数的窗口,并将重叠长度设为零。绘制日志数据。

win = haming(filereader.samplesperframe);~isDone(fileReader) audioIn = fileReader();平面度= spectralFlatness (audioIn fileReader。SampleRate,......'窗户',赢了,......'overlaplencth',0);记录器(平坦度)结尾情节(logger.Buffer) ylabel ('平坦度'

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

使用dsp.asyncbuffer.如果

  • 对音频流循环的输入具有每个帧的变量样本。

  • 对音频流循环的输入与分析窗口的每个帧具有不一致的样本spectralFlatness

  • 您想计算重叠数据的光谱平整度。

创建一个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);迷。NumUnreadSamples >= samplesPerHop audioBuffered = read(buff,samplesPerFrame,samplesOverlap); flatness = spectralFlatness(audioBuffered,fs,......'窗户',赢了,......'overlaplencth',0);记录器(平坦度)结尾结尾发布(Filereader)

绘制日志数据。

情节(logger.Buffer) ylabel ('平坦度'

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

输入参数

全部折叠

输入信号,指定为矢量、矩阵或三维阵列。该功能如何解释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''力量'“级”

  • '力量'——谱平面度计算为单侧功率谱。

  • “级”——谱平面度计算为单侧幅值谱。

数据类型:字符|细绳

输出参数

全部折叠

谱平面度,以标量、向量或矩阵的形式返回。每一排平面度对应于某一窗口的光谱平整度X.每列平面度对应于独立频道。

谱算术平均值,以标量、向量或矩阵的形式返回。每一排arithmeticMean的一个窗口的频谱的算术平均数X.每列arithmeticMean对应于独立频道。

光谱几何平均值,作为标量,向量或矩阵返回。每一排geometricMean对应的一个窗口的频谱的几何平均值X.每列geometricMean对应于独立频道。

算法

如下所述计算光谱平坦度[1]

平面度 = π K. = B. 1 B. 2 S. K. 1 B. 2 - B. 1 1 B. 2 - B. 1 σ. K. = B. 1 B. 2 S. K.

在哪里

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

  • B.1B.2是带边,在箱子里,在上面计算光谱扩展。

参考

[1]约翰斯顿,法学博士。使用感知噪声准则的音频信号变换编码在通信中选定区域的IEEE日记帐.第6卷,第2期,1988年,第314-323页。

扩展能力

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

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

也可以看看

在R2019A介绍