平均值的近似值(abs(fft(vector)))?

时间:2013-08-21 17:19:05

标签: matlab fft approximation

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

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

建立所有这些系数,然后将其切换回单个值。我正在研究的平台非常有限,如果我可以不使用FFT,那就更好了。有没有办法在没有FFT的情况下近似这些操作?

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

2 个答案:

答案 0 :(得分:3)

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

sqrt(mean(vector.*vector))

答案 1 :(得分:1)

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

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