我试图简化的一些 MatLab 代码通过寻找 FFT 的努力,只取绝对值,然后取平均值:
> vector = [0 -1 -2 -1 0 +1 +2 +1];
> mean(abs(fft(vector)))
ans = 2
所有这些系数都是建立起来的,然后又被削减到一个单一的值。我正在开发的平台非常有限,如果我能在不使用 FFT 的情况下度过难关,那就更好了。有没有办法在没有 FFT 的情况下近似这些操作?
可以假设vector
长度最多为 64 个值。
我试图简化的一些 MatLab 代码通过寻找 FFT 的努力,只取绝对值,然后取平均值:
> vector = [0 -1 -2 -1 0 +1 +2 +1];
> mean(abs(fft(vector)))
ans = 2
所有这些系数都是建立起来的,然后又被削减到一个单一的值。我正在开发的平台非常有限,如果我能在不使用 FFT 的情况下度过难关,那就更好了。有没有办法在没有 FFT 的情况下近似这些操作?
可以假设vector
长度最多为 64 个值。
我认为这只是一种计算信号 RMS 值的非常低效的方法。参见Parseval 定理。您可能可以将表达式简化为:
sqrt(mean(vector.*vector))
如果您的向量是实数并且在您的示例中具有零平均值,您可以利用 DFT 的两半是复共轭的事实(来自基本信号处理)并节省一半的 abs 计算。此外,使用sum
,它比 更快mean
:
fft_vector = fft(vector);
len = length(fft_vector)/2;
sum(abs(fft_vector(1:len)))/len