您好我正在尝试用matlab测量音频文件中剪切样本的数量。这意味着我想获得满量程值(最小值和最大值)的所有样本数。但是,当此值至少有两个以下样本时,它应该只计算它们。
到目前为止我的代码:
for i = 1 :20
fileName = ['Elektro',num2str(i) '.wav'];
unclipped = audioread(fileName);
summeMax = sum(1 ==unclipped);
summeMin = sum(-1==unclipped);
summe = summeMin +summeMax;
str=sprintf('%d ',summe);
disp(str);
end
当你看到它对每个样本进行计数时,我需要一个循环和if语句来检测fullscale值是否有多个样本。
我使用来自j = 1 : length(unclipped)
的循环尝试了它,但是使用此方法需要很长时间。
任何人都有建议我怎么能这样做?
答案 0 :(得分:1)
正如@Daniel在his answer中指出您之前的问题,您可以找到所有达到最大值的样本
maxReached = max(unclipped(:))==unclipped;
要删除仅针对一个样本达到最大值的所有位置,您可以使用带有结构元素[1,1]
的形态开口:
clippedSamples = imopen(maxReached, [1 1]);
剪切样本的数量现在是
sum(clippedSamples);
当然,您必须对那些达到最低标准的样本做同样的事情。