我试图简化的一些MatLab代码通过寻找FFT的努力,只取绝对值,然后是平均值:
> vector = [0 -1 -2 -1 0 +1 +2 +1];
> mean(abs(fft(vector)))
ans = 2
建立所有这些系数,然后将其切换回单个值。我正在研究的平台非常有限,如果我可以不使用FFT,那就更好了。有没有办法在没有FFT的情况下近似这些操作?
可以假设vector
的长度最多为64个。
答案 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