zerocrossrate
讨论二阶导数过零率
语法
描述
zerocrossrate (___)
没有输出参数的情况下率
沿着y-轴和相应的窗口号沿x设在。如果窗口长度等于完整的信号长度,则该函数将窗口长度沿x-轴和窗口中间的交叉速率。
例子
在信号中计算零交叉
考虑一个符号交替的向量。绘制数据图。
X = [1 -1 1 -1 1 -1 1 -1 1 -1 1 -1];情节(x)
计算的过零率x
.
R =零交叉率(x)
R = 0.9500
使用第三个输出参数查找交叉发生的位置。情节x
和过零点的位置。该函数返回交叉后下一个样本的索引,不一定是准确的交叉位置。第一个样本被标记为交叉点,因为函数考虑的初始状态x
默认为零。
[~,~,indices] = zerocrossrate(x);情节(x)在情节(x(指标),‘*’)举行从
计算的过零率x
使用比较法。该比率与使用差值法计算的值不同。
rC = zerocrossrate(x,Method=“比较”)
rC = 0.9000
计算的过零率x
再次使用差分方法,并指定0为正数。速率等于使用比较方法计算的值。
rZ =零交叉率(x,零正=1)
rZ = 0.9000
现在指定的初始状态x
作为1
.速率等于之前的结果。
rI = 0 (x,InitialState=1)
rI = 0.9000
计算温度数据中的水平交叉点
载入2011年1月在波士顿洛根机场每小时拍摄的一组摄氏温度读数。创建一个时间表
和使用调整时间
将数据汇总成日平均值。
负载bostempT =小时(1:24*31)';TT =时间表(t,tempC);rTT = retime(TT,“每天”,“的意思是”);
计算温度超过月平均值的天数。绘制数据图,并在月平均温度处画一条水平线,以显示交叉点发生的位置。
avg = mean(TT.tempC)
Avg = -1.3007
[~,count] = 0 (rTT,Level=avg)
计数= 9
plot(hours(rTT.t/24),rTT.tempC) yline(avg) xlabel(自2011年1月1日起已经过的时间(天)) ylabel (每日平均气温(\circC))轴紧
使用零交叉来识别语音和非语音
语音可分为有声和无声两种。表达了发声,比如元音,是在声带震动时发出的。在无声的说话时,如大多数辅音,声带不振动。您可以使用零交叉来分类音频信号中的浊音和浊音区域。
加载一个音频信号到MATLAB®工作空间。那个声音说:“橡树很坚固,也能遮荫。”
[y,fs] = audioread(“oak.m4a”);输入soundsc(y,fs)
信号在44.1千赫采样。使用比较方法计算10毫秒窗口的过零率。
Win = fs*0.01;(y,WindowLength=win,Method= .“比较”);
情节率
为了可视化每一段的交叉率。语音语音的交叉率较低,而无声语音的交叉率较高。
情节(率)
使用阈值0.1
区分浊音段和浊音段。创建一个signalMask
对象,有两个类别(“unvocal”和“vocal”),并绘制感兴趣的区域(roi)。将发声和不发声的区域与每个发声单词的位置进行比较。
您可以使用Audio Toolbox™语音转文本功能从音频文件中提取单词。加载标记的信号集ls
从SpeechTranscription.mat
进入工作区。标记的信号集包含音频信号、ROI限制和每个口语单词的标签。有关标记音频信号的详细信息,请参见在语音信号中标注口语.在情节中展示所讲的单词。
H = 0.1;Idu = find(rate > h);Idu (1:2) = [];Vi = [(idu-1) idu]*win;M = sigroi2binmask(vi,length(y));mask = signalMask([m ~m],Categories=[“无声”“表示”), SampleRate = fs);plotsigroi(面具,y)负载SpeechTranscriptionln = getLabelNames(ls);v = getLabelValues(ls,1,ln);v.Value = category (v.Value,v.Value);RL = v.ROILimits;VL = v.值;持有在文本(意思是(RL, 2), -0.7 *(大小(重要的)),六世,HorizontalAlignment =“中心”,...字形大小= 11,FontWeight =“大胆”)举行从
流数据过零率
加载一个包含15秒原声吉他音乐的音频文件。采样率为44.1 kHz。要播放音乐,取消最后一行代码的注释。
Fs = 44100;Y = audieread (“guitartune.wav”);%的声音(y, Fs)
将音频信号缓冲为重叠帧,每个帧有4096个样本。使用512个样本的重叠。
winLength = 4096;重叠= 512;[yB,~] = buffer(y,winLength,overlap,“nodelay”);
获得每一帧的过零率。要考虑帧重叠,请将初始状态指定为每帧中第一个样本的先前值。
init = winLength - overlap;状态= 0;ZCR = [];为i = 1:size(yB,2) zcr = [zcr;zerocrossrate(yB(:,i),InitialState=state)];state = yB(init,i);结束
绘制音频信号并覆盖每一帧的过零率。
图yyaxis左x = 0:1/Fs:(数字(y)-1)/Fs;情节(x, y)包含(“秒”) ylabel (“振幅”) yyaxis正确的xx = (1:size(yB,2))*((winLength-overlap)/Fs);情节(xx”,zcr) ylabel (“零点交叉率”)
计算未缓冲信号的过零率。若要获得等效于缓冲信号过零率的结果,请设置WindowLength
来4096
而且OverlapLength
来512
.判断两个结果是否相等。
zcr_batch = zerocrossrate(y,WindowLength=winLength,OverlapLength=overlap);isequal (zcr_batch zcr)
ans =逻辑1
输入参数
x
- - - - - -数据
实值向量|实值矩阵
数据,指定为实值向量或矩阵。如果x
是一个矩阵,该函数将过零率作为行向量返回,其中每个值对应于一列数据。
数据类型:单
|双
名称-值参数
指定可选参数对为Name1 = Value1,…,以=家
,在那里的名字
参数名称和价值
对应的值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。
在R2021a之前,使用逗号分隔每个名称和值,并将其括起来的名字
在报价。
例子:zerocrossrate (x) =“比较”的方法,水平= 7,transitionEdge =“上升”)
使用比较方法来计算的速率x
正向过渡7
.
InitialState
- - - - - -以前的状态
0
(默认)|向量
以前的状态x
,指定为一个向量,其元素的数量等于输入通道的数量。
例子:zerocrossrate(x,InitialState=[1 0 -1 3])
返回四通道输入信号的交叉速率x
.
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
方法
- - - - - -过零率的计算方法
“差异”
(默认)|“比较”
计算过零率的方法,指定为“差异”
或“比较”
.如果您没有指定方法
时,函数采用差分法计算交叉率。
比较
—该函数标记指数
当一个十字路口完全完成时也是如此。区别
—该函数标记指数
如果是真的abs(符号(x我)‘(x我1) > 0.
例子:zerocrossrate (x,方法= "比较")
计算的交叉率x
使用比较法。
数据类型:字符
|字符串
WindowLength
- - - - - -窗口长度
正整数
计算交叉速率的窗口长度,指定为正整数。默认窗口长度为信号长度。
例子:zerocrossrate (x, WindowLength = 20)
返回20个样本窗口的交叉率x
.
例子:zerocrossrate (x, WindowLength = f * 0.05)
返回窗口内50毫秒的交叉速率x
给定一个样本率fs
.
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
OverlapLength
- - - - - -重叠样本数
0
(默认)|正整数
相邻段之间的重叠样本数,以正整数指定。重叠部分必须小于窗口长度。
例子:zerocrossrate (x, OverlapLength = 0)
返回没有重叠的段的交叉率。
例子:zerocrossrate (x, WindowLength = 20, OverlapLength = 5)
返回具有五个重叠样本的重叠段的交叉率。
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
水平
- - - - - -信号电平
0
(默认)|真正的标量
为其计算交叉率的信号电平,指定为实标量。函数减去水平
值,然后找到零交叉点。如果您没有指定水平
时,该函数使用默认值0
并返回过零率。
例子:zerocrossrate (x) = 1)
返回输入信号的速率x
十字架1
.
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
阈值
- - - - - -阈值
0
(默认)|真正的标量
阈值高于和低于水平
用于计算交叉速率的值,指定为实标量。该函数设置[-]范围内的所有输入值阈值
,阈值
)0
然后求零交点。
例子:zerocrossrate (x,阈值= 0.1)
返回公差为-0.1到0.1的交叉率。
请注意
当你同时指定两者时水平
而且阈值
时,函数首先从输入中减去水平值,然后设置为0
[-]范围内的结果输入值阈值
,阈值
]。
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
TransitionEdge
- - - - - -转换
“两个”
(默认)|“下降”
|“上升”
计算零交叉时要包含的转换,指定为“下降”
,“上升”
,或“两个”
.如果你指定“下降”
时,函数只计算负向跃迁。如果你指定“上升”
时,该函数只计算正向转换。
例子:zerocrossrate (x, TransitionEdge = "上升")
的交叉速率x
只适用于正向过渡。
数据类型:字符
|字符串
ZeroPositive
- - - - - -签署公约
0
或假
(默认)|1
或真正的
符号约定,指定为逻辑标量。如果你指定ZeroPositive
如果为真,则函数考虑0
要积极。如果你指定ZeroPositive
如果为false,则函数考虑0
,1
,和+1
有明显的标志遵循的惯例标志
函数。
例子:zerocrossrate (x, ZeroPositive = 1)
返回输入信号的交叉速率x
并认为0是正的。
数据类型:逻辑
输出参数
率
-过零率
行向量|矩阵
过零率,作为行向量或矩阵返回。当WindowLength
等于信号长度,率
行向量的元素数是否等于其中的通道数x
或TT
.当WindowLength
小于信号长度,函数返回率
作为一个矩阵我的交叉速率我-th窗口和j-th列对应于j-th输入通道。
数
-过路次数
N——- - - - - -米矩阵
交叉次数,返回为N——- - - - - -米矩阵N是多少个窗口和米是输入通道的数量。的我的交叉计数我-th窗口和j的交叉计数jth通道。
指数
—逻辑索引
N——- - - - - -WindowLength
——- - - - - -米数组
交叉发生的信号位置上的逻辑索引,返回为N——- - - - - -WindowLength
——- - - - - -米数组,N是多少个窗口和米是输入通道的数量。
请注意
指数可能不能代表信号交叉的确切位置。的zerocrossrate
函数返回交叉后下一个示例的索引。
扩展功能
C/ c++代码生成
使用MATLAB®Coder™生成C和c++代码。
使用注意事项和限制:
当指定了窗口长度且输入多个通道时,代码生成不支持禁金宝app用动态内存分配。
GPU数组
通过使用并行计算工具箱™在图形处理单元(GPU)上运行来加速代码。
本功能完全支持GPU阵列。金宝app有关更多信息,请参见在图形处理器上运行MATLAB函数(并行计算工具箱).
版本历史
R2021b中引入
Abrir比如
Tiene una versión modificada de este ejemplo。¿Desea abrir este ejemplo con sus modificaciones?
MATLAB突击队
Ha hecho clic en unenlace que对应一个este commando de MATLAB:
弹射突击队introduciéndolo en la ventana de commandos de MATLAB。Los navegadores web no permission comandos de MATLAB。
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。