【问题标题】:Approximation for mean(abs(fft(vector)))?平均值(abs(fft(vector)))的近似值?
【发布时间】:2013-08-21 17:19:04
【问题描述】:

我试图简化的一些 MatLab 代码通过寻找 FFT 的努力,只取绝对值,然后取平均值:

> vector = [0 -1 -2 -1 0 +1 +2 +1];
> mean(abs(fft(vector)))
ans = 2

所有这些系数都是建立起来的,然后又被削减到一个单一的值。我正在开发的平台非常有限,如果我能在不使用 FFT 的情况下过关,那就更好了。有没有办法在没有 FFT 的情况下近似这些操作?

可以假设 vector 的长度最多为 64 个值。

【问题讨论】:

  • 这个值到底应该代表什么?
  • 这样做有什么问题?是性能瓶颈吗?
  • (at) david - 不知道,没有 cmets。 (at) eitan - 是的,很重要。平台没有原生浮点数。
  • 它看起来像是输入向量的某种“平均频率”(单边频谱的平均值)。您可以利用输入向量的任何属性来估计或查找答案吗?例如,输入向量是否总是少数几个值之一?输入信号是否有带宽限制?它总是整数吗?在什么范围内?
  • 这看起来像是对 RMS 或 sqrt(RMS) 的粗略近似的计算。有什么原因导致实际的 RMS 不起作用?

标签: matlab fft approximation


【解决方案1】:

我认为这只是一种非常低效的计算信号 RMS 值的方法。见Parseval's Theorem。您可能可以将表达式简化为:

sqrt(mean(vector.*vector))

【讨论】:

  • 您是如何推断出问题是关于 RMS 的?我既看不到“根”也看不到“方”……
  • 这不可能。如果要计算 mean(abs(fft(vector)).^2),它可能是(没有根)。
  • 我认为这可能已经足够好了。如果 f(x) 是原始公式,g(x) 是你的,那么 f(x) ~= 2*sqrt(pi)*g(x)
  • @PaulR Parseval 的定理适用于均值(abs(fft(vector)).^2)。原题中没有正方形
【解决方案2】:

如果您的向量是实数并且在您的示例中具有零平均值,您可以利用 DFT 的两半是复共轭的事实(来自基本信号处理)并节省一半的 abs 计算。另外,使用sum,比mean快:

fft_vector = fft(vector);
len = length(fft_vector)/2; 
sum(abs(fft_vector(1:len)))/len

【讨论】:

    猜你喜欢
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多