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 0000000..11dc8b8 Binary files /dev/null and b/codegen_fracFdpw/TBm_fracFdpw.slx differ 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