2016-12-01 3 views
0

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

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; 

Scallop Loss Formula

+0

Len является 'N'? и что такое 'w'? не должен ли вы иметь другой вход в функции для 'w [n]'? –

+0

ваш код возвращает ошибку 'win' undefined. Не могли бы вы поместить настоящий код? –

ответ

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; 
1

измените логарифмической функции() для log10(). без него результат полностью неправильный :)

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

Смежные вопросы