From f64f4fde31c0433eb95f3e4c79b772bc0337c783 Mon Sep 17 00:00:00 2001 From: canisio Date: Tue, 9 Jun 2026 16:15:39 -0300 Subject: [PATCH] Added codegen folder and scripts for fracF operating in DPW (matrix) --- codegen_fracFdpw/TBc_fracFdpw.m | 20 +++++ codegen_fracFdpw/TBm_fracFdpw.slx | Bin 0 -> 184363 bytes codegen_fracFdpw/fracF_dpw.m | 51 +++++++++++++ codegen_fracFdpw/fracF_init.m | 70 ++++++++++++++++++ .../0W-QdLjPl5JXWY5WJJ8XuZdPRxsd.xml | 2 + .../0W-QdLjPl5JXWY5WJJ8XuZdPRxsp.xml | 2 + .../1X5PSVWg8jp3h1SyNiJtJmD4jnQd.xml | 6 ++ .../1X5PSVWg8jp3h1SyNiJtJmD4jnQp.xml | 2 + .../GIFBHwpY7Mj_mw96S-Wz-4P1djYd.xml | 6 ++ .../GIFBHwpY7Mj_mw96S-Wz-4P1djYp.xml | 2 + .../VdNularF-Bizb3hmjaa7F00asGMd.xml | 2 + .../VdNularF-Bizb3hmjaa7F00asGMp.xml | 2 + .../_GBXjYOPGNzpaGXZHNU9eBKs2y4d.xml | 6 ++ .../_GBXjYOPGNzpaGXZHNU9eBKs2y4p.xml | 2 + .../rFgbE7J0q1IfyjFFVSXP14Sbh30d.xml | 6 ++ .../rFgbE7J0q1IfyjFFVSXP14Sbh30p.xml | 2 + .../SDMLmaWG7GHkKoV_kJ80kV-luysd.xml | 2 + .../SDMLmaWG7GHkKoV_kJ80kV-luysp.xml | 2 + 18 files changed, 185 insertions(+) create mode 100644 codegen_fracFdpw/TBc_fracFdpw.m create mode 100644 codegen_fracFdpw/TBm_fracFdpw.slx create mode 100644 codegen_fracFdpw/fracF_dpw.m create mode 100644 codegen_fracFdpw/fracF_init.m create mode 100644 resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/0W-QdLjPl5JXWY5WJJ8XuZdPRxsd.xml create mode 100644 resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/0W-QdLjPl5JXWY5WJJ8XuZdPRxsp.xml create mode 100644 resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/1X5PSVWg8jp3h1SyNiJtJmD4jnQd.xml create mode 100644 resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/1X5PSVWg8jp3h1SyNiJtJmD4jnQp.xml create mode 100644 resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/GIFBHwpY7Mj_mw96S-Wz-4P1djYd.xml create mode 100644 resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/GIFBHwpY7Mj_mw96S-Wz-4P1djYp.xml create mode 100644 resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/VdNularF-Bizb3hmjaa7F00asGMd.xml create mode 100644 resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/VdNularF-Bizb3hmjaa7F00asGMp.xml create mode 100644 resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/_GBXjYOPGNzpaGXZHNU9eBKs2y4d.xml create mode 100644 resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/_GBXjYOPGNzpaGXZHNU9eBKs2y4p.xml create mode 100644 resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/rFgbE7J0q1IfyjFFVSXP14Sbh30d.xml create mode 100644 resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/rFgbE7J0q1IfyjFFVSXP14Sbh30p.xml create mode 100644 resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/SDMLmaWG7GHkKoV_kJ80kV-luysd.xml create mode 100644 resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/SDMLmaWG7GHkKoV_kJ80kV-luysp.xml diff --git a/codegen_fracFdpw/TBc_fracFdpw.m b/codegen_fracFdpw/TBc_fracFdpw.m new file mode 100644 index 0000000..78e05c3 --- /dev/null +++ b/codegen_fracFdpw/TBc_fracFdpw.m @@ -0,0 +1,20 @@ +a = single(1); + +[Achirp,AchirpOut,H,scale] = fracF_init(a); + +X = complex(randn(1024,1024,'single'), ... + randn(1024,1024,'single')); + +Fdpw = fracF_dpw(X,... + Achirp,... + AchirpOut,... + H,... + scale); + +Fref = complex(zeros(512,64,'single')); + +for k = 1:1024 + Fref(:,k) = fracF_cg(X(:,k),a); +end + +maxErr = max(abs(Fdpw(:)-Fref(:))) \ No newline at end of file diff --git a/codegen_fracFdpw/TBm_fracFdpw.slx b/codegen_fracFdpw/TBm_fracFdpw.slx new file mode 100644 index 0000000000000000000000000000000000000000..11dc8b82349eae7878a961242a15a54242d255f4 GIT binary patch literal 184363 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 NuO2E;7ij3Se*rSF!-N0; literal 0 HcmV?d00001 diff --git a/codegen_fracFdpw/fracF_dpw.m b/codegen_fracFdpw/fracF_dpw.m new file mode 100644 index 0000000..0c3a425 --- /dev/null +++ b/codegen_fracFdpw/fracF_dpw.m @@ -0,0 +1,51 @@ +function F = fracF_dpw(f,... + Achirp,... + AchirpOut,... + H,... + scale) +%#codegen +% +% fracF_dpw +% +% Matrix FrFT processing for an entire DPW. +% +% INPUT: +% f [1024 x Nframes] complex(single) +% Achirp [1024 x 1] +% AchirpOut [512 x 1] +% H [2048 x 1] +% scale scalar +% +% OUTPUT: +% F [512 x Nframes] + +N = 1024; +Nfft = 2048; + +Nframes = size(f,2); + +%% First chirp multiplication + +g = f .* Achirp; + +%% Zero-padding + +g_pad = complex(zeros(Nfft,Nframes,'single')); + +g_pad(1:N,:) = g; + +%% FFT convolution + +Gfft = fft(g_pad); + +G = ifft(Gfft .* H); + +%% Extract valid region and decimate + +G_valid = G(N+1:2:end,:); + +%% Final chirp multiplication + +F = scale .* G_valid .* AchirpOut; + +end \ No newline at end of file diff --git a/codegen_fracFdpw/fracF_init.m b/codegen_fracFdpw/fracF_init.m new file mode 100644 index 0000000..3b90a03 --- /dev/null +++ b/codegen_fracFdpw/fracF_init.m @@ -0,0 +1,70 @@ +function [Achirp,AchirpOut,H,scale] = fracF_init(a) +%#codegen +% +% fracF_init +% +% Precompute FrFT coefficients for DPW processing. +% +% INPUT: +% a - FrFT order (single) +% +% OUTPUTS: +% Achirp [1024 x 1] +% AchirpOut [512 x 1] +% H [2048 x 1] +% scale scalar + +N = 1024; + +pi_s = single(pi); + +phi = a * (pi_s/2); + +tan_half_phi = tan(phi/2); +sin_phi = sin(phi); +cos_phi = cos(phi); + +csc_phi = 1/sin_phi; +cot_phi = cos_phi/sin_phi; + +twoDelta = 2*sqrt(single(N)/2); + +%% Chirp A + +n = single((-N/2:N/2-1).') / twoDelta; + +Achirp = exp(-1j*pi_s*(n.^2)*tan_half_phi); + +%% Chirp B + +m = single((-N:N-1).') / twoDelta; + +Bchirp = exp(1j*pi_s*csc_phi*(m.^2)); + +%% FFT of Chirp B + +H = fft(Bchirp); + +%% Output chirp + +AchirpOut = Achirp(1:2:end); + +%% Scale factor + +scale = sqrt(1 - 1j*cot_phi) / twoDelta; + +%% Force single precision complex + +Achirp = complex(single(real(Achirp)), ... + single(imag(Achirp))); + +AchirpOut = complex(single(real(AchirpOut)), ... + single(imag(AchirpOut))); + +H = complex(single(real(H)), ... + single(imag(H))); + +scale = complex(single(real(scale)), ... + single(imag(scale))); + +end \ No newline at end of file diff --git a/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/0W-QdLjPl5JXWY5WJJ8XuZdPRxsd.xml b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/0W-QdLjPl5JXWY5WJJ8XuZdPRxsd.xml new file mode 100644 index 0000000..49737c5 --- /dev/null +++ b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/0W-QdLjPl5JXWY5WJJ8XuZdPRxsd.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/0W-QdLjPl5JXWY5WJJ8XuZdPRxsp.xml b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/0W-QdLjPl5JXWY5WJJ8XuZdPRxsp.xml new file mode 100644 index 0000000..32216e7 --- /dev/null +++ b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/0W-QdLjPl5JXWY5WJJ8XuZdPRxsp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/1X5PSVWg8jp3h1SyNiJtJmD4jnQd.xml b/resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/1X5PSVWg8jp3h1SyNiJtJmD4jnQd.xml new file mode 100644 index 0000000..99772b4 --- /dev/null +++ b/resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/1X5PSVWg8jp3h1SyNiJtJmD4jnQd.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/1X5PSVWg8jp3h1SyNiJtJmD4jnQp.xml b/resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/1X5PSVWg8jp3h1SyNiJtJmD4jnQp.xml new file mode 100644 index 0000000..0e2ec36 --- /dev/null +++ b/resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/1X5PSVWg8jp3h1SyNiJtJmD4jnQp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/GIFBHwpY7Mj_mw96S-Wz-4P1djYd.xml b/resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/GIFBHwpY7Mj_mw96S-Wz-4P1djYd.xml new file mode 100644 index 0000000..99772b4 --- /dev/null +++ b/resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/GIFBHwpY7Mj_mw96S-Wz-4P1djYd.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/GIFBHwpY7Mj_mw96S-Wz-4P1djYp.xml b/resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/GIFBHwpY7Mj_mw96S-Wz-4P1djYp.xml new file mode 100644 index 0000000..fc4d1ec --- /dev/null +++ b/resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/GIFBHwpY7Mj_mw96S-Wz-4P1djYp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/VdNularF-Bizb3hmjaa7F00asGMd.xml b/resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/VdNularF-Bizb3hmjaa7F00asGMd.xml new file mode 100644 index 0000000..4356a6a --- /dev/null +++ b/resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/VdNularF-Bizb3hmjaa7F00asGMd.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/VdNularF-Bizb3hmjaa7F00asGMp.xml b/resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/VdNularF-Bizb3hmjaa7F00asGMp.xml new file mode 100644 index 0000000..01cb34e --- /dev/null +++ b/resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/VdNularF-Bizb3hmjaa7F00asGMp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/_GBXjYOPGNzpaGXZHNU9eBKs2y4d.xml b/resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/_GBXjYOPGNzpaGXZHNU9eBKs2y4d.xml new file mode 100644 index 0000000..99772b4 --- /dev/null +++ b/resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/_GBXjYOPGNzpaGXZHNU9eBKs2y4d.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/_GBXjYOPGNzpaGXZHNU9eBKs2y4p.xml b/resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/_GBXjYOPGNzpaGXZHNU9eBKs2y4p.xml new file mode 100644 index 0000000..cc70dc2 --- /dev/null +++ b/resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/_GBXjYOPGNzpaGXZHNU9eBKs2y4p.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/rFgbE7J0q1IfyjFFVSXP14Sbh30d.xml b/resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/rFgbE7J0q1IfyjFFVSXP14Sbh30d.xml new file mode 100644 index 0000000..99772b4 --- /dev/null +++ b/resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/rFgbE7J0q1IfyjFFVSXP14Sbh30d.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/rFgbE7J0q1IfyjFFVSXP14Sbh30p.xml b/resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/rFgbE7J0q1IfyjFFVSXP14Sbh30p.xml new file mode 100644 index 0000000..045e936 --- /dev/null +++ b/resources/project/SDMLmaWG7GHkKoV_kJ80kV-luys/rFgbE7J0q1IfyjFFVSXP14Sbh30p.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/SDMLmaWG7GHkKoV_kJ80kV-luysd.xml b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/SDMLmaWG7GHkKoV_kJ80kV-luysd.xml new file mode 100644 index 0000000..4356a6a --- /dev/null +++ b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/SDMLmaWG7GHkKoV_kJ80kV-luysd.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/SDMLmaWG7GHkKoV_kJ80kV-luysp.xml b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/SDMLmaWG7GHkKoV_kJ80kV-luysp.xml new file mode 100644 index 0000000..846fc2b --- /dev/null +++ b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/SDMLmaWG7GHkKoV_kJ80kV-luysp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file