将信号能量归一化为0db

时间:2016-10-05 13:45:34

标签: matlab signal-processing

这个问题很简单,但我无法理解我错过了什么。所以我有一个录音,首先我用128个样本框架50%重叠,然后对于每个帧我想要计算帧的能量。所以我计算它,但当我想将它标准化为0db时,我得到奇怪的结果。这是我的matlab代码:

for i=1:size(dataF,2)
E(:,i)=20*log10((abs(dataF(:,i)).^2));
emax(:,i)=max(E(:,i));
E1(:,i)=E(:,i)/emax(i);
end

这是第一帧的输出能量,下面是0db的归一化能量,但不正确 enter image description here enter image description here

任何建议真的很感激。提前谢谢。

1 个答案:

答案 0 :(得分:0)

要将每个帧标准化为0 dB,您必须除以对数之前的最大值。此外,您可能需要将因子20替换为10,因为您已经对数据进行了平方:

for i = 1:size(dataF,2)
    dataFmax(:,i) = max(abs(dataF(:,i)).^2)
    E1(:,i) = 10*log10((abs(dataF(:,i)).^2)/dataFmax(:,i));
end

或者,您可以在对数后减去最大值:

for i=1:size(dataF,2)
    E(:,i) = 10*log10((abs(dataF(:,i)).^2));
    emax(:,i) = max(E(:,i));
    E1(:,i) = E(:,i) - emax(i);
end