仅绘制一些音频信号样本的八度问题
Octave problem with ploting only some samples of audiosignal
我的任务是加载一个信号,然后每 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");
Result1
我的问题是,如果我 select 每 8 个样本如下:
z = sn(1 : 8 : end);
它只保留每 8 个样本,结果是这样的:
Result2
我需要的是保留我的 100 个样本并仅每 8 次打印一次,以便保持第一张图片的比例。
感谢您的任何建议。
编辑:我使用了
idx = 1:8:numel(z);
z(idx) = z(idx) > 0;
现在看起来像这样:
result3
有没有办法只打印出值为 1 或 0 的样本并强制它们保留在原始索引上?例如,索引 1、9、17、25、33 是 val 1 或 0。我希望它们保留在这些索引上并在我调用 plot(z) 时忽略其他索引。
不要使用 for 循环,向量化很容易:
z = rand (100, 1);
idx = 1:8:numel(z);
z(idx) = z(idx) > 0;
对于每个点你有两个坐标,数据的值
z = sn(1 : 1 : end);
和数据的位置
p=1 : 1 : 100;
所以你的 plot(z) 等同于 plot(p,z)。
当你 reduce/decimate 你需要同时维护两个坐标的样本时
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
我的任务是加载一个信号,然后每 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");
Result1
我的问题是,如果我 select 每 8 个样本如下:
z = sn(1 : 8 : end);
它只保留每 8 个样本,结果是这样的:
Result2
我需要的是保留我的 100 个样本并仅每 8 次打印一次,以便保持第一张图片的比例。
感谢您的任何建议。
编辑:我使用了
idx = 1:8:numel(z);
z(idx) = z(idx) > 0;
现在看起来像这样:
result3
有没有办法只打印出值为 1 或 0 的样本并强制它们保留在原始索引上?例如,索引 1、9、17、25、33 是 val 1 或 0。我希望它们保留在这些索引上并在我调用 plot(z) 时忽略其他索引。
不要使用 for 循环,向量化很容易:
z = rand (100, 1);
idx = 1:8:numel(z);
z(idx) = z(idx) > 0;
对于每个点你有两个坐标,数据的值
z = sn(1 : 1 : end);
和数据的位置
p=1 : 1 : 100;
所以你的 plot(z) 等同于 plot(p,z)。
当你 reduce/decimate 你需要同时维护两个坐标的样本时
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