-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdecompose_sincs.m
executable file
·51 lines (47 loc) · 1.93 KB
/
decompose_sincs.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
function [out] = decompose_sincs(adc_data, params, numSincs, ...
sincWindowSize, out_given, plotting)
if ~isempty(out_given)
out = out_given;
return
end
fftsize = 512; %params.opRangeFFTSize;
w = 2*pi*[0:fftsize-1]/fftsize;
rangefft_output = fft(adc_data, fftsize);
if iscolumn(rangefft_output)
rangefft_output = rangefft_output.';
end
n1 = norm(rangefft_output);
cf=0;
out.sincs = zeros(numSincs, fftsize);
% out.search_sincs = zeros(fftsize, 2*params.w_steps+1, numSincs);
out.rangefft_idx = zeros(1, numSincs);
out.amps = zeros(1, numSincs);
out.phis = zeros(1, numSincs);
out.dists = zeros(1, numSincs);
for ii=1:numSincs
[M, I] = max(abs(rangefft_output));
ct = w(I);
phi = angle(rangefft_output(I));
peak_sinc = M*exp(1j*phi)*exp(-1j*(w-ct)*(sincWindowSize-1)/2).*diric(w - ct, sincWindowSize);
out.sincs(ii, :) = peak_sinc;
out.rangefft_idx(ii) = I;
out.amps(ii) = M;
out.phis(ii) = phi;
out.dists(ii) = (ct*(params.sampleRate*1e6)/2/pi)*3e8/2/(params.freqSlope*1e12);
% ct_idx = (I-1)*params.w_steps +1 ;
% ct = params.w(ct_idx);
% cand_ct_idx = [-params.w_steps:params.w_steps] + ct_idx;
% cand_ct = params.w(cand_ct_idx);
% out.search_sincs(:,:,ii) = getChirpSincs(params, cand_ct);
cf = cf + 1;
if plotting
figure(cf);
subplot(2,1,1); plot(abs(rangefft_output)); hold on; plot(abs(peak_sinc)); %xlim([0 1000]);
subplot(2,1,2); plot(abs(rangefft_output-peak_sinc)); %xlim([0 1000]);
n2 = norm(rangefft_output-peak_sinc);
fprintf('[%d] I=%d %.1f/%.1f (%.1f%%)\n', cf, I, n2, n1, 100*n2/n1);
end
rangefft_output = rangefft_output - peak_sinc;
end
% out.dists = (w(out.rangefft_idx)*(params.sampleRate*1e6)/2/pi)*3e8/2/(params.freqSlope*1e12);
end