From 8f2ae1ec4e4b08e10fb56a6cf8ad19295012e811 Mon Sep 17 00:00:00 2001 From: canisio Date: Wed, 10 Jun 2026 11:46:16 -0300 Subject: [PATCH] Added a LFM matlab script testbench to validate FrFT DPW --- codegen_fracFdpw/TBc_fracFdpwLFM.m | 149 ++++++++++++++++++ .../{TBc_fracFdpw.m => TBc_fracFdpwNO.m} | 2 +- codegen_fracFdpw/TBm_fracFdpw.slx | Bin 184268 -> 183874 bytes ...d.xml => Doi5RFBzLXa6WtYn0DqckQqKRLQd.xml} | 0 .../Doi5RFBzLXa6WtYn0DqckQqKRLQp.xml | 2 + .../rEvooC0-TWPmhyjb2otHax51pGId.xml | 6 + .../rEvooC0-TWPmhyjb2otHax51pGIp.xml | 2 + .../rFgbE7J0q1IfyjFFVSXP14Sbh30p.xml | 2 - 8 files changed, 160 insertions(+), 3 deletions(-) create mode 100644 codegen_fracFdpw/TBc_fracFdpwLFM.m rename codegen_fracFdpw/{TBc_fracFdpw.m => TBc_fracFdpwNO.m} (98%) rename resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/{rFgbE7J0q1IfyjFFVSXP14Sbh30d.xml => Doi5RFBzLXa6WtYn0DqckQqKRLQd.xml} (100%) create mode 100644 resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/Doi5RFBzLXa6WtYn0DqckQqKRLQp.xml create mode 100644 resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/rEvooC0-TWPmhyjb2otHax51pGId.xml create mode 100644 resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/rEvooC0-TWPmhyjb2otHax51pGIp.xml delete mode 100644 resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/rFgbE7J0q1IfyjFFVSXP14Sbh30p.xml diff --git a/codegen_fracFdpw/TBc_fracFdpwLFM.m b/codegen_fracFdpw/TBc_fracFdpwLFM.m new file mode 100644 index 0000000..8916a6d --- /dev/null +++ b/codegen_fracFdpw/TBc_fracFdpwLFM.m @@ -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'); \ No newline at end of file diff --git a/codegen_fracFdpw/TBc_fracFdpw.m b/codegen_fracFdpw/TBc_fracFdpwNO.m similarity index 98% rename from codegen_fracFdpw/TBc_fracFdpw.m rename to codegen_fracFdpw/TBc_fracFdpwNO.m index 6372e6a..9a9f5e8 100644 --- a/codegen_fracFdpw/TBc_fracFdpw.m +++ b/codegen_fracFdpw/TBc_fracFdpwNO.m @@ -12,7 +12,7 @@ clc %% Test parameters -a = single(0.999); +a = single(1); N = 1024; Nframes = 1024; diff --git a/codegen_fracFdpw/TBm_fracFdpw.slx b/codegen_fracFdpw/TBm_fracFdpw.slx index 72a2bce66075e61f8c982cb754c5cf3605c40b15..6c8435b657dc0c26d870b306e3509792a2a968fc 100644 GIT binary patch delta 13658 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 + \ No newline at end of file diff --git a/resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/rEvooC0-TWPmhyjb2otHax51pGId.xml b/resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/rEvooC0-TWPmhyjb2otHax51pGId.xml new file mode 100644 index 0000000..99772b4 --- /dev/null +++ b/resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/rEvooC0-TWPmhyjb2otHax51pGId.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/rEvooC0-TWPmhyjb2otHax51pGIp.xml b/resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/rEvooC0-TWPmhyjb2otHax51pGIp.xml new file mode 100644 index 0000000..bffe9bf --- /dev/null +++ b/resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/rEvooC0-TWPmhyjb2otHax51pGIp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/rFgbE7J0q1IfyjFFVSXP14Sbh30p.xml b/resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/rFgbE7J0q1IfyjFFVSXP14Sbh30p.xml deleted file mode 100644 index 045e936..0000000 --- a/resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/rFgbE7J0q1IfyjFFVSXP14Sbh30p.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file