-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnf_test4.m
84 lines (69 loc) · 1.71 KB
/
nf_test4.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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
%
% nf_test4 -- undecimate and invert numeric filter
%
addpath ../davet
addpath ../source
% get sample interferogram data
rid = 'd20150401_t0712300';
rfile = ['/asl/data/cris/ccast/rdr60_hr/2015/091/RDR_', rid];
load(rfile);
eng = struct([]);
[sci, eng] = scipack(d1, eng);
wlaser = metlaser(eng.NeonCal);
[igmLW, igmMW, igmSW, igmTime, igmFOR, igmSDR] = checkRDR(d1, rid);
clear d1
% select an interferogram
iFOV = 1;
ix = find(igmFOR == 15);
igm = igmLW(:, iFOV, ix(31));
clear igmLW igmMW igmSW
% instrument params
band = 'LW';
opts = struct;
opts.resmode = 'hires2';
opts.addguard = 'true';
[inst, user] = inst_params(band, wlaser, opts);
% interpolate interferogram to undecimated grid
m = inst.npts * inst.df;
x = 1 : inst.df : m;
xi = 1 : m;
yi = interpft(igm, m);
igm2 = yi;
figure(1); clf
plot(x, real(igm), xi, real(yi))
title('interpolated interferogram')
legend('original', 'interpolated')
grid on; zoom on
% freq domain filter
tfile = '../inst_data/FIR_19_Mar_2012.txt';
fNF = specNF(inst, tfile);
vNF = inst.freq;
% time domain filter
d2 = load(tfile);
switch upper(inst.band)
case 'LW', filt = d2(:,1) + 1i * d2(:,2);
case 'MW', filt = d2(:,3) + 1i * d2(:,4);
case 'SW', filt = d2(:,5) + 1i * d2(:,6);
otherwise, error(['bad band spec ', inst.band])
end
% time domain filter as a linear transform
n = inst.df * inst.npts;
k = length(filt);
% n = 5;
% k = 3;
% filt = (1 : k);
Fd = zeros(k, n);
Fi = zeros(k, n);
Fj = zeros(k, n);
for i = 1 : n
Fd(:, i) = filt;
Fi(:, i) = ones(k, 1) * i;
Fj(:, i) = i + (0 : k-1);
end
NF = sparse(Fi(:), Fj(:), Fd(:), n, n + k - 1);
figure(2); clf
ix = 1:255;
plot(ix, real(filt), ix, imag(filt))
title('time domain FIR filter')
legend('real', 'imag')
grid on; zoom on