Функция для расчета потери гребешка

Я хочу создать функцию, которая вычисляет значение потери гребешка для прямоугольного окна, окна Хэмминга и Блэкмана, используя формулу потери гребешка. Я создал функцию, но она возвращает только ответ 0, я сделал ошибку?

function s_l = scallop loss(len)
window = rectwin(len);
num_total = 0;
den_total = 0;

for n = 0:len-1
    A1 = exp(-((1i*(n)*pi)/len));
    A2 = window(n+1)*A1;
    num = abs(A2);
    den = win(n+1);
    num_total = num_total + num;
    den_total = den_total + den:
end

result = 20*log(num_total/den_total);

s_l = result;

Формула для гребешка

2 ответа

Решение

У вас есть математическая задача:

abs(sum(A)) != sum(abs(A))

Они не то же самое!

Измените свой код на:

window = rectwin(len);
num_total = 0;
den_total = 0;

for n = 0:len-1
    A1 = exp(-((1i*(n)*pi)/len));
    A2 = window(n+1)*A1;
    num = A2;                      % !!
    den = abs(window(n+1));        % you also forgot the abs  here
    num_total = num_total + num;
    den_total = den_total + den;
end
num_total=abs(num_total);    % !!
result = 20*log(num_total/den_total);

s_l = result;

Пожалуйста, измените функцию log() на log10(). без этого результат совершенно неверный:)

Я имею в виду эту строку:результат = 20*log10*(num_total/den_total);

Другие вопросы по тегам