1

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

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

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

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

4

2 回答 2

3

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

sqrt(mean(vector.*vector))
于 2013-08-21T17:37:40.400 回答
1

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

fft_vector = fft(vector);
len = length(fft_vector)/2; 
sum(abs(fft_vector(1:len)))/len
于 2013-08-21T19:41:03.370 回答