нормализовать энергию сигнала до 0 дБ

#matlab #signal-processing

#matlab #обработка сигналов

Вопрос:

вопрос достаточно прост, но я не могу понять, чего мне не хватает. Итак, у меня есть запись, сначала я создаю ее с перекрытием 128 выборок на 50%, затем для каждого кадра я хочу рассчитать энергию кадра. Итак, я вычисляю это, но когда я хочу нормализовать его до 0 дБ, я получаю странные результаты. Вот мой код 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
  

Вот выходная энергия для первого кадра, а ниже приведена нормированная энергия до 0 дБ, но это неверно
введите описание изображения здесь

введите описание изображения здесь

Любые предложения действительно оценены. Заранее спасибо.

Ответ №1:

Чтобы нормализовать каждый кадр до 0 дБ, вы должны разделить на максимум перед логарифмом. Кроме того, вам, вероятно, нужно заменить коэффициент 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
  

Комментарии:

1. Рад, что смог помочь. Добро пожаловать на сайт!