From 7dd20a04fa5c6366e2dc740e028262522e8fca07 Mon Sep 17 00:00:00 2001 From: canisio Date: Wed, 10 Jun 2026 16:05:30 -0300 Subject: [PATCH] compared both TBc and TBm, results are equivalent (not identical because of interpolation filter) --- codegen_fracFdpw/TBc_fracFdpwLFM.m | 138 ++++++++++++++++++++++++++++- codegen_fracFdpw/TBm_fracFdpw.slx | Bin 183874 -> 191102 bytes 2 files changed, 134 insertions(+), 4 deletions(-) diff --git a/codegen_fracFdpw/TBc_fracFdpwLFM.m b/codegen_fracFdpw/TBc_fracFdpwLFM.m index 8916a6d..efab983 100644 --- a/codegen_fracFdpw/TBc_fracFdpwLFM.m +++ b/codegen_fracFdpw/TBc_fracFdpwLFM.m @@ -19,19 +19,19 @@ % - FrFT is computed on the interpolated signal. % - Power spectra are averaged across the entire DPW. -clear +clearvars -except out clc close all %% Signal parameters N = 512; -Nframes = 64; +Nframes = 1024; Fs = single(512e6); T = single(1e-6); -B = single(64e6); +B = single(32e6); beta = B/T; %% Time axis @@ -146,4 +146,134 @@ ylabel('Power (dB)') fprintf('\n'); fprintf('FFT peak bin : %d\n',idxFFT); fprintf('FrFT peak bin : %d\n',idxFrFT); -fprintf('\n'); \ No newline at end of file +fprintf('\n'); + +%% Compare TBc against TBm (optional) +% +% If the Simulink model has been executed and produced out.Fsim, +% compare both implementations. + +if exist('out','var') + + fprintf('\n'); + fprintf('TBc vs TBm Comparison\n'); + fprintf('---------------------\n'); + + Ftbm = out.Fsim; + + %% Dimension check + + fprintf('TBc size : [%d %d]\n', ... + size(Ffrft,1), size(Ffrft,2)); + + fprintf('TBm size : [%d %d]\n', ... + size(Ftbm,1), size(Ftbm,2)); + + assert(isequal(size(Ffrft),size(Ftbm)), ... + 'TBc and TBm dimensions differ.'); + + %% Error metrics + + err = Ftbm - Ffrft; + + maxErr = max(abs(err(:))); + + rmsErr = sqrt(mean(abs(err(:)).^2)); + + refPeak = max(abs(Ffrft(:))); + + relErr = maxErr / refPeak; + + %% Results + + fprintf('\n'); + fprintf('Reference peak : %.9g\n',double(refPeak)); + fprintf('Maximum error : %.9g\n',double(maxErr)); + fprintf('RMS error : %.9g\n',double(rmsErr)); + fprintf('Relative error : %.9g\n',double(relErr)); + + if maxErr == 0 + + fprintf('\nPASS: Outputs are bit-identical.\n'); + + elseif relErr < 1e-5 + + fprintf('\nPASS: Outputs are numerically equivalent.\n'); + + else + + fprintf('\nWARNING: Outputs differ.\n'); + + end + + %% Visual comparison + + frameIdx = 1; + + figure + + subplot(3,1,1) + + plot(abs(Ffrft(:,frameIdx))) + + grid on + + title('TBc Output') + xlabel('Bin') + ylabel('|F|') + + subplot(3,1,2) + + plot(abs(Ftbm(:,frameIdx))) + + grid on + + title('TBm Output') + xlabel('Bin') + ylabel('|F|') + + subplot(3,1,3) + + plot(abs(Ftbm(:,frameIdx) - Ffrft(:,frameIdx))) + + grid on + + title('Absolute Error') + xlabel('Bin') + ylabel('|Error|') + + %% Mean power spectrum comparison + + Ptbc = mean(abs(Ffrft).^2,2); + + Ptbm = mean(abs(Ftbm).^2,2); + + Ptbc_dB = 10*log10(Ptbc/max(Ptbc)); + + Ptbm_dB = 10*log10(Ptbm/max(Ptbm)); + + figure + + plot(Ptbc_dB,'LineWidth',1.5) + + hold on + + plot(Ptbm_dB,'--','LineWidth',1.5) + + grid on + + ylim([-60 5]) + + xlabel('Bin') + ylabel('Power (dB)') + + title('TBc vs TBm Mean Power Spectrum') + + legend('TBc','TBm') + +else + + fprintf('\n'); + fprintf('TBm comparison skipped (out.Fsim not found).\n'); + +end \ No newline at end of file diff --git a/codegen_fracFdpw/TBm_fracFdpw.slx b/codegen_fracFdpw/TBm_fracFdpw.slx index 6c8435b657dc0c26d870b306e3509792a2a968fc..91cd7d0b9275d9fb1db5a30521307e60cbe0a7f4 100644 GIT binary patch delta 17352 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 delta 18871 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 MSbg7X5YwRl1rJ2h$N&HU