matlab - 在 Matlab 中使用 FFT 计算自相关

标签 matlab signal-processing fft correlation

我读过一些关于如何使用信号的 fft 更有效地计算自相关的解释,将实部乘以复共轭(傅立叶域),然后使用反 fft,但我无法实现这是在 Matlab 中进行的,因为在详细级别上。

最佳答案

就像您所说的那样,取 fft 并逐点乘以其复共轭,然后使用逆 fft(或者在两个信号互相关的情况下:Corr(x,y) <=> FFT(x)FFT(y)*)

x = rand(100,1);
len = length(x);

%# autocorrelation
nfft = 2^nextpow2(2*len-1);
r = ifft( fft(x,nfft) .* conj(fft(x,nfft)) );

%# rearrange and keep values corresponding to lags: -(len-1):+(len-1)
r = [r(end-len+2:end) ; r(1:len)];

%# compare with MATLAB's XCORR output
all( (xcorr(x)-r) < 1e-10 )

事实上,如果你看xcorr.m的代码,这正是它正在做的事情(只是它必须处理所有填充、归一化、向量/矩阵输入等情况……)

关于matlab - 在 Matlab 中使用 FFT 计算自相关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3949324/

相关文章:

iphone - 如何为iPhone制作一个简单的音频均衡器?

python - 使用 CUDA 或 OpenCL 在 python 中进行多维 FFT

matlab - 如何在 Matlab 中调整 y 轴绘图范围?

matlab - MATLAB 中的高通滤波

audio - 声音特效?混合器

algorithm - 快速傅里叶变换算法适用于图像梯度计算吗?

python - 直接傅立叶变换的最大值

matlab - 在 MATLAB 中正确使用 clearvars

image - 在 MATLAB 中填充图像

matlab - 如何禁用一个图中所有子图中的轴?