如何在 MATLAB 中构造多相 (Frank) 代码

信息处理 自相关
2022-02-03 02:06:40

我在 MATLAB 中编写了一段代码来生成 Frank 代码 -用于脉冲压缩的Pastebin 链接。

我知道弗兰克码是线性频率调制(LFM)的步进频率近似值。

LFM 参数在这里获得:

PW = 100e-6;% Pulse Width
PCR = 100; % Pulse Compression Ratio
CPW = PW/PCR;% Compressed pulse width
Fm = 2/CPW; %Frequency sweep
  • LFM 的步进频率逼近:
    stepFreq = 0:Fm/(N-1):Fm;
  • 相位矩阵在以下行中生成:
    矩阵 = mod(矩阵*incPhi,360);
  • 在 for 循环中生成 Frank 代码:
    FCP = [FCP,exp(1j*(2*pi f t + 矩阵(i,p)*pi/180))];
  • 此处计算以 dB 为单位的自相关:
    自相关dB = 20*log10(abs(AutoCorrelation)/max(abs(AutoCorrelation)));

我的问题:

获得的峰值旁瓣电平仅在3.5 dB. 我是否遵循正确的方法来生成弗兰克代码?峰值旁瓣电平由 MA Richards 的《现代雷达原理:基本原理》20*log10(1/(N*sin(pi/M)))一书的公式给出- 第 825 页,它等于29 dB对于我的情况(N=100,M=10)。

1个回答
% created by MUSTAFA SAMI AHMED
% Email mustafa_sami87@yahoo.com
clc;
clear all;
M =100;
L=sqrt(M);
bv = 0:L-1;
Matrix = bv'*bv ;
anglout = radtodeg(pi);
% alfa= (4*pi)/(L);

% Matrix_new = alfa*Matrix; 
incPhi = (2*pi)/L; %incremental phase change
Matrix = mod(Matrix*incPhi,2*pi);

b=reshape(Matrix,1,[]); % matrix 1D size 1xM
for p = 1:M
  d(p) = exp(1j*b(p)) ;
end    

AutoCorrelation = xcorr(d);

AutoCorrelationdB =10*log10(abs(AutoCorrelation)/max(abs(AutoCorrelation)));
 figure(1);
 stem(b);
%   x=wden(AutoCorrelationdB,'heursure','h','mln',10,'sym10');
  %x=wiener2(AutoCorrelationdB, [3 80 ]);
  figure(2);
plot((AutoCorrelationdB));