找到单词结束信号

1视图(30天)
利昂·埃利斯
利昂·埃利斯 2021年9月7日
评论道: 马修•诺伊 2021年9月8日
美好的一天,我有一个良好的信号,我想找到的每个单词在声音信号表示。就像,我想找到数组指每个单词的结束点。提前帮助会感谢,谢谢!
2的评论
利昂·埃利斯
利昂·埃利斯 2021年9月7日
编辑:利昂·埃利斯 2021年9月7日
所以我有一个很长的数组起始点、峰值点和结束点,我想找到端点的数量和他们的索引数组。显然我需要比较值和一定的边界值来检测什么是词,什么不是,所以任何高于0.1将是一个词,我只是努力寻找终点/索引。

登录置评。

接受的答案

马修•诺伊
马修•诺伊 2021年9月8日
你好
你应该首先计算信号的包络(例如使用相同名称的功能 信封)
只是做个测试如果这个信封穿过0.1阈值水平,在这个简单的演示代码如下
在这里我没有信号,而不是编码的信封,我只是使用一个修正正弦波作为例子
时间值的过境点在我的代码中定义的两个变量: t0_pos t0_neg
代码:
clc
clearvars
n = 1000;
x = (1: n) / n;
y = abs (0.3 * sin (10 * x));
阈值= 0.1;%你的价值在这里
[t0_pos, s0_pos t0_neg s0_neg] = crossing_V7 (y, x,阈值,“线性”);%正(pos)和负(底片)斜率过境点
%印第安纳= >时间指数(样本)
% t0 (x) = >对应的时间值
% s0 = >对应的函数(y)值,显然他们必须等于“阈值”
图(1)
情节(x, y, t0_pos s0_pos,“+ r”t0_neg s0_neg,“+ g”,“线宽”2,“markersize”12);网格
传奇(信号包络的,“正斜率过境点”,“负斜率过境点”);
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
函数[t0_pos, s0_pos t0_neg s0_neg] = crossing_V7 (S t水平,imeth)
%(印第安纳州、t0 s0、t0close s0close] = crossing_V6 (S t水平,imeth slope_sign) %以上格式
%穿越的口岸一个给定水平的一个信号
%印第安纳=穿越(S)返回索引向量印第安纳州,这个信号
% S穿过零在印第安纳州或在印第安纳州和印第安纳州+ 1之间
%(印第安纳州,t0] =穿越(S, t)另外返回时间
%向量t0的信号的零交叉十字路口
% *之间是线性插值给定* t
%(印第安纳州,t0] =穿越(S t级别)返回的过境点
%给定水平而不是零交叉
%印第安纳=穿越(年代,[],级别)如上但是没有时间插值
%(印第安纳州,t0] =穿越(S t水平,par)允许额外的参数
% par ={“没有”|“线性”}。
%与插值关闭(par =‘没有’)这个函数
%返回值的零(这是最近的数据点
%的零,小于零交叉)。
%
%检查输入参数的数量
错误(nargchk(1, 4,输入参数个数));
%检查输入向量的时间一致性
如果输入参数个数< 2 | isempty (t)
%如果没有时间向量,使用索引向量随着时间的
t = 1:长度(S);
elseif长度(t) ~ = (S)
%如果S和t不相同的长度,抛出一个错误
错误(t和年代一定是相同长度的!”);
结束
%检查输入水平
如果输入参数个数< 3
%设置标准值0,如果水平不是
水平= 0;
结束
%检查输入插值方法
如果输入参数个数< 4
imeth =“线性”;
结束
%使行向量
t = t (:)”;
S =年代(:);
%总是寻找零。所以,如果我们想要的跨越
%其他阈值“水平”,我们减去它
% 0的值和搜索。
S = S -水平;
%的第一个寻找确切的0
ind0 =找到(S = = 0);
%然后寻找数据点之间的零交叉
S1 = S (1: end-1)。* S(2:结束);
ind1 =找到(S1 < 0);
%将确切0 0和“中间”联系在一起
印第安纳州=排序([ind0 ind1]);
%,选择相关的时间值
t0 = t(印第安纳州);
s0 = S(印第安纳州);
如果~ isempty(印第安纳州)
如果比较字符串(imeth“线性”)
%穿越的线性插值
2 = 1:长度(t0)
%如果abs (S(印第安纳州(ii))) > eps (S(印第安纳州(ii))) % MATLAB V7 et +
如果abs (S(印第安纳州(ii))) > eps * abs (S(印第安纳州(ii)))% MATLAB V6 et - EPS * ABS (X)
%插入只有当数据点没有零
NUM = (t(印第安纳州(2)+ 1)- t(印第安纳州(ii)));
穴= (S(印第安纳州(2)+ 1)年代(印第安纳州(ii)));
斜率= NUM /穴;
slope_sign (ii) =符号(斜率);
t0 (ii) = t0 (ii)年代(印第安纳州(ii)) *斜率;
s0 (ii) =水平;
结束
结束
结束
%提取正斜率过境点
ind_pos =找到(签署(slope_sign) > 0);
t0_pos = t0 (ind_pos);
s0_pos = s0 (ind_pos);
%提取负斜率过境点
ind_neg =找到(符号(slope_sign) < 0);
t0_neg = t0 (ind_neg);
s0_neg = s0 (ind_neg);
其他的
%空输出
ind_pos = [];
t0_pos = [];
s0_pos = [];
%提取负斜率过境点
ind_neg = [];
t0_neg = [];
s0_neg = [];
结束
结束

更多的答案(0)

s manbetx 845


释放

R2020a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!

翻译的