主要内容

acousticFluctuation

感知声波信号波动强度

描述

例子

波动= acousticFluctuation (audioInfs以Zwicker等为基础,得到了波动强度。[1]ISO 532-1时变响度[2]

例子

波动= acousticFluctuation (audioInfscalibrationFactor指定用于计算响度的非默认传声器校准因子。

例子

波动= acousticFluctuation (specificLoudnessIn利用时变比响度计算波动。

例子

波动= acousticFluctuation (___名称,值使用一个或多个选项指定选项名称,值对参数。

例子:涨落=声学涨落(audioIn,fs,'SoundField','diffuse')返回假设弥漫声场的波动。

波动specificFluctuation] =声学波动(___还返回特定波动强度。

波动specificFluctuation在你] =声学波动(___还返回主要调制频率。

例子

acousticFluctuation (___在无输出参数的情况下,绘制波动强度和特定波动强度,并以文本方式显示调制频率。如果输入是立体声,三维图显示两个通道的和。

例子

全部折叠

基于Zwicker等的声波波动测量[2]ISO 532-1[1].假设记录电平经过校准,使1 kHz的音调在声压级表上注册为100 dB。

[audioIn,fs] = audioread(“WashingMachine-16-44p1-stereo-10secs.wav”);波动=声学波动(audioIn,fs);

按照图表所示建立一个实验。

创建一个audioDeviceReader对象从麦克风读取audioDeviceWriter对象写给你的说话人。

Fs = 48e3;deviceReader = audioDeviceReader(fs,“SamplesPerFrame”, 2048);deviceWriter = audioDeviceWriter(fs);

创建一个audioOscillator对象产生1千赫的正弦信号。

osc = audio振荡器(“正弦”1 e3,“SampleRate”fs,“SamplesPerFrame”, 2048);

创建一个dsp。AsyncBuffer对象来缓冲从麦克风获取的数据。

Dur = 5;buff = dsp.AsyncBuffer(dur*fs);

用五秒钟的时间,通过扬声器播放正弦波,然后用麦克风录音。当音频流,注意响度报告你的声压级仪表。一旦完成,读取缓冲区对象的内容。

numFrames = dur*(fs/osc.SamplesPerFrame);ii = 1:numFrames audioOut = osc();deviceWriter (audioOut);audioIn = deviceReader();写(浅黄色,audioIn);结束SPLreading = 60.4;micRecording = read(buff);

若要计算麦克风的校准因子,请使用calibrateMicrophone函数。

calibrationFactor = calibrateMicrophone(micRecording(fs+1:end,:),deviceReader.SampleRate,SPLreading);

现在,您可以使用确定的校准因子来测量通过相同的麦克风记录链获得的任何声音的波动。

再次执行实验,这一次,添加100%的振幅调制在4赫兹。要创建调制信号,使用audioOscillator并指定振幅为0.5,直流偏置为0.5在0和1之间振荡。

mod = audiooscator (“正弦”4“SampleRate”fs,...“振幅”, 0.5,“DCOffset”, 0.5,“SamplesPerFrame”, 2048);Dur = 5;buff = dsp.AsyncBuffer(dur*fs);numFrames = dur*(fs/osc.SamplesPerFrame);ii = 1:numFrames audioOut = osc().*mod();deviceWriter (audioOut);audioIn = deviceReader();写(浅黄色,audioIn);结束micRecording = read(buff);

调用acousticFluctuation用麦克风录音,采样率,和校准系数。报告的波动acousticFluctuation使用532-1规定的真实声响度测量。显示5秒内的平均波动强度。

波动=声学波动(micRecording,deviceReader.SampleRate,calibrationFactor);流('平均波动= %d(波动)',意味着(波动(501:最终,:)))
平均波动= 1.413824e+00(波动)
acousticFluctuation (micRecording deviceReader.SampleRate calibrationFactor)

读入音频文件。

[audioIn,fs] = audioread(“Engine-16-44p1-stereo-20sec.wav”);

调用acousticLoudness计算具体响度。

[~,specificLoudness] = audisticloudness (audioIn,fs,“TimeVarying”,真正的);

调用acousticSharpness没有任何输出来绘制声锐度。

acousticSharpness (specificLoudness“TimeVarying”,真正的)

图中包含一个轴对象。标题为Time-Varying shartness (DIN 45692)的axis对象包含2个类型为line的对象。这些对象代表通道1和通道2。

调用acousticFluctuation没有任何输出来绘制声波波动。

acousticFluctuation (specificLoudness)

图中包含2个轴对象和另一个subplottext类型的对象。轴对象1与标题f M o d空白=空白{空白2 4。8 8,空白2 4。8 8 blank} blank H z包含2个line类型的对象。这些对象代表通道1和通道2。坐标轴对象2包含一个曲面类型的对象。

生成中心频率为1500hz,频率偏差约700hz,调制频率为0.25 Hz的纯音。

Fs = 48e3;你=0.25;大调的=20.;numSamples = dur*fs;t = (0:numSamples-1)/fs;tone = sin(2*pi*t*fMod)';fc =1500;excursionRatio =0.47;偏移= 2*pi*(fc*偏移率/fs);audioIn =调制(音调,fc,fs,“调频”,游览);

听录音的前5秒,画出声谱图。

声音(audioIn (1:5 * fs), fs)谱图(audioIn (1:5 * fs),损害(512年“周期”fs), 256年,1024年,“桠溪”

图中包含一个轴对象。axis对象包含一个image类型的对象。

调用acousticFluctuation在没有输出参数的情况下绘制声涨落强度。

acousticFluctuation (audioIn fs);

图中包含2个轴对象和另一个subplottext类型的对象。轴对象1与标题f M o d空白=空白0。2 5空白H z包含一个类型为line的对象。坐标轴对象2包含一个曲面类型的对象。

acousticFluctuation函数使您能够指定一个已知的波动频率。如果未指定已知波动频率,该函数将自动检测波动。

创建一个dsp。AudioFileReader对象逐帧读取音频信号。创建一个audioOscillator对象来创建调制波。将调制波应用到音频文件。

fileReader = dsp。AudioFileReader (“Engine-16-44p1-stereo-20sec.wav”);你=10.8;振幅=0.15;osc = audio振荡器(的正弦作用,...“DCOffset”, 0.5,...“振幅”振幅,...“SampleRate”, fileReader。SampleRate,...“SamplesPerFrame”, fileReader.SamplesPerFrame);testSignal = [];~isDone(fileReader) x = fileReader();testSignal = [testSignal;osc().*fileReader()];结束

听两秒钟的测试信号并绘制其波形。

samplesToView = 1:2*fileReader.SampleRate;声音(testSignal (samplesToView:), fileReader.SampleRate);情节(samplesToView / fileReader.SampleRate testSignal (samplesToView,:))包含(“时间(s)”

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

绘制声波涨落图。检测到的调制频率以文本形式显示。

acousticFluctuation (testSignal fileReader.SampleRate);

图中包含2个轴对象和另一个subplottext类型的对象。轴对象1与标题f M o d空白=空白{空白1 0。8 0,空白10 0。8 0 blank} blank H z包含2个类型为line的对象。这些对象代表通道1和通道2。坐标轴对象2包含一个曲面类型的对象。

指定已知的调制频率,然后再绘制声波波动图。

acousticFluctuation (testSignal fileReader。SampleRate,“ModulationFrequency”,在你)

图中包含2个轴对象和另一个subplottext类型的对象。轴对象1与标题f M o d空白=空白{空白1 0。8 0,空白10 0。8 0 blank} blank H z包含2个类型为line的对象。这些对象代表通道1和通道2。坐标轴对象2包含一个曲面类型的对象。

输入参数

全部折叠

音频输入,指定为列向量(单声道)或两列矩阵(立体声)。

提示

为了测量给定调制频率的波动强度,建议最小信号持续时间为10秒。

数据类型:|

采样率(以Hz为单位),指定为正标量。新录音的推荐采样率为48khz。

请注意

最小可接受的采样率为8千赫。

数据类型:|

传声器校准因子,指定为正标量。默认校准因子对应于声压级为100 dB (SPL)的满量程1 kHz正弦波。若要计算特定于系统的校准因子,请使用calibrateMicrophone函数。

数据类型:|

sones/Bark中的特定响度,用a表示T由- - - - - - - 240C数组,地点:

  • T是时变信号的1 / 2ms。

  • 240是特定响度域中的Bark箱的数量。树皮箱是0.1:0.1:24

  • C是通道数。

您可以使用acousticLoudness函数使用以下语法计算时变的特定响度:

[~,specificLoudness] = audisticloudness (audioIn,fs,“TimeVarying”,真正的);

数据类型:|

名称-值参数

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

在R2021a之前,使用逗号分隔每个名称和值,并将其括起来的名字在报价。

例子:acousticFluctuation (fs, audioIn ModulationFrequency, 50)

已知调制频率(以Hz为单位)“自动检测”或作为值在范围内的标量或两元素向量[0.1,100].如果ModulationFrequency设置为“自动检测”,则该功能将搜索范围限制在0.2 ~ 64hz之间。如果输入是单声道,那么调制频率必须指定为标量。如果输入是立体声,那么调制频率可以指定为标量或两元矢量。

数据类型:||字符|字符串

音频录制的声场,指定为“免费”“扩散”

数据类型:字符|字符串

以帕斯卡为单位计算dB的参考压力,指定为正标量。默认值为20微帕斯卡,是空气的常用值。

数据类型:|

输出参数

全部折叠

波动强度在波动,作为一个回归K-by-1列向量或K-by-2矩阵的独立通道。K对应于时间维度。

数据类型:|

树干/树皮的比波动强度,以a表示K-乘47矩阵或aK-by-47-by-2数组。第一个维度specificFluctationK,对应于时间维度,匹配的第一个维度波动.第二个维度specificFluctation, 47对应于Bark尺度上的频带,中心为0.5到23.5(含),增量为0.5。第三维度specificFluctation对应于通道的数量,并与的第二个维度相匹配波动

数据类型:|

主要调制频率(以Hz为单位),对于单声道输入以标量形式返回,对于立体声输入以1 × 2矢量形式返回。

数据类型:|

算法

声波波动强度是对振幅或频率缓慢调制的感知测量。声响度算法在[1]并在acousticLoudness函数。声涨落计算描述在[2].声波波动的算法概述如下。

f l u c t u 一个 t o n 0.008 z 0 24 Δ l d z f 国防部 4 + 4 f 国防部

在哪里f国防部是否检测到或已知调制频率和Δl是感知的调制深度。如果在调用时没有指定调制频率acousticFluctuation,它是自动检测的峰值拾取声响度的频域表示。感知调制深度,Δl,计算方法是将整流的特定响度带通过½倍频滤波器f国防部,然后是低通滤波器来确定包络。

参考文献

[1] iso 532-1:2017(e)。声学。响度计算方法。第1部分:兹威克法国际标准化组织

[2]兹威克,埃伯哈德和H.法斯特尔。心理声学:事实与模型.第二次更新版,施普林格,1999。

扩展功能

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

版本历史

R2020b中介绍