我的任务是加载一个信号,然后每隔8个样本进行采样并将其与0进行比较。
如果样本> 0->样本= 1,否则样本-> 0。
我有这样的代码:
sn = wavread('example.wav',100);
z = sn(1 : 1 : end);
x = sn(1 : 1 : end);
for i = 1:rows(z);
for j = 1:columns(z);
if(z(i,j) < 0);
z(i,j) = 0;
else
z(i,j) = 1;
endif
endfor
endfor
plot(x, "*",z, "o");
我的问题是,如果我像这样选择每8个样本:
z = sn(1 : 8 : end);
它仅保留第8个样本,结果是这样的:
我需要保留100个样本并仅每8个打印一次,以保持第一张图片的比例。
谢谢你的建议。
编辑:我用过
idx = 1:8:numel(z);
z(idx) = z(idx) > 0;
现在看起来像这样:
是否有任何方法只能打印出值为1或0的样本并强制其保留在其原始索引上?例如,在索引1,9,17,25,33上是val 1或0。当我调用plot(z)时,我希望它们保留在那些索引上并忽略其他索引。
答案 0 :(得分:2)
对于每个点,您都有两个坐标,即数据值
z = sn(1 : 1 : end);
和数据位置
p=1 : 1 : 100;
所以您的图(z)相当于图(p,z)。
减少/减少样本时,您需要同时保留两个坐标
zd=z(1:8:end);
pd=p(1:8:end);
plot(pd,zd,"+")
例如
p=1:1:100;
z=sin(p*pi()/50);
subplot(1,2,1)
plot(p,z,"+")
pd=p(1:8:end);
zd=z(1:8:end);
subplot(1,2,2)
plot(pd,zd,"*")
print -djpg figure1.jpg
答案 1 :(得分:0)
不用于循环,很容易将其向量化:
z = rand (100, 1);
idx = 1:8:numel(z);
z(idx) = z(idx) > 0;