我们在进行项目开发时,经常会遇到帧同步的问题,帧同步是在接收的信号中找到数据的起始位置;实际的信号,跟理想的信号一般都有偏移,偏移多少位的数据,直接从数据中不容易观察,这时就需要用到相关运算。
一般的算法类项目开发是基于C++来做,标准的C++中是没有相关运算的函数库,可以基于FFT和IFFT算法来实现:
为了提高系统的数据处理速度,可以采用FFT技术来求接收信号的互相关:
实现框图:
上图中,x2(n) 信号是基于 x1(n) 信号有偏移;
峰值搜索为计算数组中最大值的索引;
用matlab做验证
clear;
clc;
xx = [1,3,5,7,9,1,3,5,5,2,4,6,8,10,6];
tempxx = zeros(1,16);
tempyy = zeros(1,16);
for i = 1:length(xx)
tempxx(i) = xx(i);
end
%yy 基于xx偏移5个数据
yy = [xx(6:15),xx(1:5)];
for i = 1:length(yy)
tempyy(i) = yy(i);
end
FFT_input11 = fft(tempxx);
FFT_input22 = fft(tempyy);
FFT_input_conj22 = conj(FFT_input22);
result = FFT_input11.*FFT_input_conj22;
out = ifft(result);
ff = abs(out);
gg = ff.^2;
plot(gg)
[value index]= max(gg);
运行结果: