Added a LFM matlab script testbench to validate FrFT DPW
This commit is contained in:
149
codegen_fracFdpw/TBc_fracFdpwLFM.m
Normal file
149
codegen_fracFdpw/TBc_fracFdpwLFM.m
Normal file
@@ -0,0 +1,149 @@
|
||||
%% Test fracF_dpw using a physical LFM
|
||||
%
|
||||
% Parameters chosen to match previous FrFT validation work:
|
||||
%
|
||||
% Fs = 512 MHz
|
||||
% T = 1 us
|
||||
% B = 64 MHz
|
||||
%
|
||||
% Matched FrFT order:
|
||||
%
|
||||
% a = -(2/pi)*atan(Fs/(beta*T))
|
||||
%
|
||||
% where:
|
||||
%
|
||||
% beta = B/T
|
||||
%
|
||||
% Notes:
|
||||
% - FFT is computed on the original (non-interpolated) signal.
|
||||
% - FrFT is computed on the interpolated signal.
|
||||
% - Power spectra are averaged across the entire DPW.
|
||||
|
||||
clear
|
||||
clc
|
||||
close all
|
||||
|
||||
%% Signal parameters
|
||||
|
||||
N = 512;
|
||||
Nframes = 64;
|
||||
|
||||
Fs = single(512e6);
|
||||
T = single(1e-6);
|
||||
|
||||
B = single(64e6);
|
||||
beta = B/T;
|
||||
|
||||
%% Time axis
|
||||
|
||||
t = single((-N/2:N/2-1).') / Fs;
|
||||
|
||||
%% Generate LFM
|
||||
|
||||
x = exp(1j*pi*beta*(t.^2));
|
||||
|
||||
x = complex(single(real(x)), ...
|
||||
single(imag(x)));
|
||||
|
||||
%% Create DPW
|
||||
|
||||
X = repmat(x,1,Nframes);
|
||||
|
||||
%% Interpolate exactly as Simulink
|
||||
|
||||
halfbandInterp = dsp.FIRHalfbandInterpolator;
|
||||
|
||||
Xint = halfbandInterp(X);
|
||||
|
||||
%% Matched FrFT order
|
||||
|
||||
aMatch = single(-(2/pi)*atan(Fs/(beta*T)));
|
||||
|
||||
fprintf('\n');
|
||||
fprintf('Fs = %.3f MHz\n',double(Fs)/1e6);
|
||||
fprintf('T = %.3f us\n',double(T)*1e6);
|
||||
fprintf('B = %.3f MHz\n',double(B)/1e6);
|
||||
fprintf('aMatch = %.6f\n',double(aMatch));
|
||||
|
||||
%% FFT reference
|
||||
%
|
||||
% FFT detector operates on the original non-interpolated signal.
|
||||
|
||||
FFTref = fftshift(fft(X,[],1),1)/N;
|
||||
|
||||
%% FrFT
|
||||
%
|
||||
% FrFT detector operates on the interpolated signal.
|
||||
|
||||
[Achirp,H,Cchirp,Aa] = fracF_init(aMatch);
|
||||
|
||||
Ffrft = fracF_dpw( ...
|
||||
Xint,...
|
||||
Achirp,...
|
||||
H,...
|
||||
Cchirp,...
|
||||
Aa);
|
||||
|
||||
%% Mean power spectrum across the DPW
|
||||
|
||||
Pfft = mean(abs(FFTref).^2,2);
|
||||
|
||||
Pfrft = mean(abs(Ffrft).^2,2);
|
||||
|
||||
%% Peak comparison
|
||||
|
||||
peakFFT = max(Pfft);
|
||||
peakFrFT = max(Pfrft);
|
||||
|
||||
gain_dB = 10*log10(double(peakFrFT/peakFFT));
|
||||
|
||||
fprintf('\n');
|
||||
fprintf('FFT peak power : %.6f\n',double(peakFFT));
|
||||
fprintf('FrFT peak power : %.6f\n',double(peakFrFT));
|
||||
fprintf('Processing gain : %.3f dB\n',gain_dB);
|
||||
|
||||
%% Normalize spectra for display
|
||||
|
||||
Pfft_dB = 10*log10(Pfft/max(Pfft));
|
||||
|
||||
Pfrft_dB = 10*log10(Pfrft/max(Pfrft));
|
||||
|
||||
%% Display averaged spectra
|
||||
|
||||
figure
|
||||
|
||||
subplot(2,1,1)
|
||||
|
||||
plot(Pfft_dB)
|
||||
|
||||
grid on
|
||||
|
||||
ylim([-60 5])
|
||||
|
||||
title('FFT Mean Power Spectrum')
|
||||
xlabel('FFT Bin')
|
||||
ylabel('Power (dB)')
|
||||
|
||||
subplot(2,1,2)
|
||||
|
||||
plot(Pfrft_dB)
|
||||
|
||||
grid on
|
||||
|
||||
ylim([-60 5])
|
||||
|
||||
title(sprintf('FrFT Mean Power Spectrum (a = %.6f)', ...
|
||||
double(aMatch)))
|
||||
|
||||
xlabel('FrFT Bin')
|
||||
ylabel('Power (dB)')
|
||||
|
||||
%% Report peak locations
|
||||
|
||||
[~,idxFFT] = max(Pfft);
|
||||
[~,idxFrFT] = max(Pfrft);
|
||||
|
||||
fprintf('\n');
|
||||
fprintf('FFT peak bin : %d\n',idxFFT);
|
||||
fprintf('FrFT peak bin : %d\n',idxFrFT);
|
||||
fprintf('\n');
|
||||
@@ -12,7 +12,7 @@ clc
|
||||
|
||||
%% Test parameters
|
||||
|
||||
a = single(0.999);
|
||||
a = single(1);
|
||||
|
||||
N = 1024;
|
||||
Nframes = 1024;
|
||||
Binary file not shown.
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info location="TBc_fracFdpwLFM.m" type="File"/>
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info>
|
||||
<Category UUID="FileClassCategory">
|
||||
<Label UUID="design"/>
|
||||
</Category>
|
||||
</Info>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info location="TBc_fracFdpwNO.m" type="File"/>
|
||||
@@ -1,2 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info location="TBc_fracFdpw.m" type="File"/>
|
||||
Reference in New Issue
Block a user