Matlab获得裁剪量

时间:2015-08-03 08:21:58

标签: matlab clipping

您好我正在尝试用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)的循环尝试了它,但是使用此方法需要很长时间。

任何人都有建议我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

正如@Daniel在his answer中指出您之前的问题,您可以找到所有达到最大值的样本

maxReached = max(unclipped(:))==unclipped;

要删除仅针对一个样本达到最大值的所有位置,您可以使用带有结构元素[1,1]的形态开口:

clippedSamples = imopen(maxReached, [1 1]);

剪切样本的数量现在是

sum(clippedSamples);

当然,您必须对那些达到最低标准的样本做同样的事情。