【发布时间】:2014-04-03 16:59:09
【问题描述】:
我有 MFCC 特征矩阵“ceps”,并且有如下假设的 20 个点的数组,
sp=[200 400 500 ........7568]
我想在两个段之间进行比较,例如:)比较从 1 到 200(一个段)和 200 到 400(第二段)的特征数据值。比较工作的值将是负数或正数....我已将所有这些值存储在一个向量中
a=zeros((length(sp)-1),1)
a=a';
cont=0;
for i=1:length(sp)-1
cont=cont+1;
if cont==1
ceps1=ceps(:,1:sp(i));
obj=gm.distribution.fit(ceps1',1,'options',options);
y=-obj.NlogL;
else
ceps1=ceps(:,sp(i):sp(i+1));
obj=gm.distribution.fit(ceps1',1,'options',options);
y=-obj.NlogL;
end
ceps2=ceps(:,sp(i):sp(i+1));
[m n]=size(ceps2');
y1=-obj.NlogL;
if cont==1
ceps3=ceps(:,1:sp(i+1));
obj=gm.distribution.fit(ceps3',1,'options',options);
y2=-obj.NlogL;
else
ceps3=ceps(:,sp(i-1):sp(i+1));
obj=gm.distribution.fit(ceps3',1,'options',options);
y2=-obj.NlogL;
end
a(i+1)=y1+y-y2;
end
上面的结果是具有所有比较值的向量,有些是负数,有些是正数....在上面的程序中,迭代是连续进行的,例如:对于第一次迭代,比较在第一段之间(即:从1到200)和第二段(即:从200到400),在第二次迭代中,比较在第二段(200到400)和第三段(400到500)之间..
但现在我想修改它,因为在第一次迭代中,比较应该在第一段(1 到 200)和第二段(200 到 400)之间。比较的结果将是正数或负数。
案例1: 如果它是负数,则将该点设为绿色并移动以进行第二次迭代,我们将在第二段(200 到 400)和第三段(400 到 500)之间进行比较
案例2: 如果结果是肯定的,我们会将该点保持为绿色 olny,但现在对于下一次迭代,比较在第一段(1 到 400)和第二段(400 到 500)之间。
sp 向量有 20 个值,现在我通过为每个点赋予属性将这 20 个值绘制在图上。
figure
plot(sp,'--rs','markeredgecolor','k','markerfacecolor','g','markersize','2');
现在我对上面的每个点进行处理,结果要么是正面的,要么是负面的。 如果结果是否定的,那么我需要更改处理的那个点的颜色属性。 如果是肯定的,那么它应该保持不变。
所以我需要一个图表,其中负值点应为红色,所有其他(正值点)应为绿色。
最后它应该丢弃图表中的所有绿色点
我该怎么做...
【问题讨论】: