2016-12-01 6 views
0

스캘럽 손실 수식을 사용하여 직사각형, 해밍 및 블랙맨 창에 대한 스캘럽 손실 값을 계산하는 함수를 만들고 싶습니다. 함수를 만들었지 만 그 대답 만 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; 

Scallop Loss Formula

+0

렌은 'N'입니까? 'w'는 무엇입니까? 'w [n]'함수의 또 다른 입력을 가져야하지 않습니까? –

+0

코드에서 'win' 오류가 반환됩니다. 실행되는 실제 코드를 넣으시겠습니까? –

답변

2

당신은 수학 문제가 : 그들은이 동일하지

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

을!

가 코드를 변경

: LOG10에 로그() 함수를 변경하십시오

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

(). 그것 없이는 결과가 완전히 잘못되었습니다 :)

이 줄은 다음과 같습니다. 결과 = 20 * log10 * (num_total/den_total);