2016-12-01 2 views
0

Je souhaite créer une fonction qui calcule la valeur de la perte de pétoncles pour une fenêtre Rectangulaire, Hamming et Blackman à l'aide de la formule de perte de pétoncles. J'ai créé une fonction mais elle ne renvoie que la réponse 0, ai-je fait une erreur?Fonction de calcul de la perte de pétoncles

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 est 'N'? Qu'est-ce que 'w'? ne devriez-vous pas avoir une autre entrée dans la fonction pour 'w [n]'? –

+0

votre code renvoie une erreur 'win' indéfini. Pouvez-vous s'il vous plaît mettre le vrai code qui s'exécute? –

Répondre

2

Vous avez un problème de maths:

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

Ils ne sont pas les mêmes!

Changer votre code:

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

s'il vous plaît changer la fonction log() à log10(). sans cela le résultat est complètement faux :)

Je veux dire cette ligne: résultat = 20 * log10 * (num_total/den_total);