【问题标题】:Function to compute Scallop Loss计算扇贝损失的函数
【发布时间】:2016-12-01 13:14:41
【问题描述】:

我想创建一个函数,使用扇贝损失公式计算矩形、汉明和布莱克曼窗口的扇贝损失值。 我创建了一个函数,但它只返回那个答案 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;

【问题讨论】:

  • Len 是 N?什么是w?你不应该在w[n] 的函数中有另一个输入吗?
  • 您的代码返回错误win undefined。能不能把实际运行的代码放上来?

标签: matlab signal-processing windowing


【解决方案1】:

你有一道数学题:

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;

【讨论】:

    【解决方案2】:

    请将 log() 函数更改为 log10()。没有它,结果是完全错误的:)

    我的意思是这一行: 结果 = 20*log10*(num_total/den_total);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-01
      • 2021-12-08
      • 1970-01-01
      • 2021-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-11
      相关资源
      最近更新 更多