#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. Рад, что смог помочь. Добро пожаловать на сайт!