isce3 0.25.0
Loading...
Searching...
No Matches
Crossmul.h
1#pragma once
2
3#include "forward.h"
4
5#include <complex>
6#include <isce3/core/LUT1d.h>
7#include <isce3/io/forward.h>
8
14 public:
15 // Constructor from product
16 Crossmul() {};
17
18 ~Crossmul() {};
19
30 void crossmul(isce3::io::Raster& refSlcRaster,
31 isce3::io::Raster& secSlcRaster,
32 isce3::io::Raster& ifgRaster,
33 isce3::io::Raster& coherence,
34 isce3::io::Raster* rngOffsetRaster = nullptr) const;
35
39
41 inline void refDoppler(isce3::core::LUT1d<double> refDopp) { _refDoppler = refDopp; }
42
44 inline const isce3::core::LUT1d<double> & refDoppler() const { return _refDoppler; }
45
47 inline void secDoppler(isce3::core::LUT1d<double> secDopp) { _secDoppler = secDopp; }
48
50 inline const isce3::core::LUT1d<double> & secDoppler() const { return _secDoppler; }
51
53 inline void startingRangeShift(double rng_shift) { _offsetStartingRangeShift = rng_shift; }
54
56 inline double startingRangeShift() const { return _offsetStartingRangeShift; }
57
59 inline void rangePixelSpacing(double rgPxlSpacing) { _rangePixelSpacing = rgPxlSpacing; }
60
62 inline double rangePixelSpacing() const { return _rangePixelSpacing; }
63
65 inline void wavelength(double wvl) { _wavelength = wvl; }
66
68 inline double wavelength() const { return _wavelength; }
69
71 inline void rangeLooks(int);
72
74 inline int rangeLooks() const { return _rangeLooks; }
75
77 inline void azimuthLooks(int);
78
80 inline int azimuthLooks() const { return _azimuthLooks; }
81
83 inline void oversampleFactor(size_t oversamp) { _oversampleFactor = oversamp; }
84
86 inline size_t oversampleFactor() const { return _oversampleFactor; }
87
89 inline void linesPerBlock(size_t linesPerBlock) { _linesPerBlock = linesPerBlock; }
90
92 inline size_t linesPerBlock() const { return _linesPerBlock; }
93
95 inline bool multiLookEnabled() const { return _multiLookEnabled; }
96
98 inline void rangeFrequencyShift(std::valarray<std::complex<float>> &refAvgSpectrum,
99 std::valarray<std::complex<float>> &secAvgSpectrum,
100 std::valarray<double> &rangeFrequencies,
101 size_t linesPerBlockData,
102 size_t fft_size,
103 double &frequencyShift);
104
106 inline void getPeakIndex(std::valarray<float> data,
107 size_t &peakIndex);
108
109 private:
110 //Doppler LUT for the refernce SLC
111 isce3::core::LUT1d<double> _refDoppler;
112
113 //Doppler LUT for the secondary SLC
114 isce3::core::LUT1d<double> _secDoppler;
115
116 // starting range shifts between the secondary and reference RSLC in meters
117 double _offsetStartingRangeShift = 0.0;
118
119 // range pixel spacing
120 double _rangePixelSpacing;
121
122 // radar wavelength
123 double _wavelength;
124
125 // number of range looks
126 int _rangeLooks = 1;
127
128 // number of azimuth looks
129 int _azimuthLooks = 1;
130
131 bool _multiLookEnabled = false;
132
133 // number of lines per block
134 size_t _linesPerBlock = 1024;
135
136 // upsampling factor
137 size_t _oversampleFactor = 1;
138
139
140};
141
142// Get inline implementations for Crossmul
143#define ISCE_SIGNAL_CROSSMUL_ICC
144#include "Crossmul.icc"
145#undef ISCE_SIGNAL_CROSSMUL_ICC
Data structure to hold a 1D Lookup table.
Definition LUT1d.h:15
Data structure meant to handle Raster I/O operations.
Definition Raster.h:32
Intereferogram generation by cross-multiplication of reference and secondary SLCs.
Definition Crossmul.h:13
void oversampleFactor(size_t oversamp)
Set oversample factor.
Definition Crossmul.h:83
bool multiLookEnabled() const
Get boolean multilook flag.
Definition Crossmul.h:95
double startingRangeShift() const
Get reference and secondary starting range shift.
Definition Crossmul.h:56
double wavelength() const
Get Wavelength.
Definition Crossmul.h:68
void wavelength(double wvl)
Set Wavelength.
Definition Crossmul.h:65
double rangePixelSpacing() const
Get range pixel spacing.
Definition Crossmul.h:62
void rangePixelSpacing(double rgPxlSpacing)
Set range pixel spacing.
Definition Crossmul.h:59
void startingRangeShift(double rng_shift)
Set reference and seconary starting range shift.
Definition Crossmul.h:53
void crossmul(isce3::io::Raster &refSlcRaster, isce3::io::Raster &secSlcRaster, isce3::io::Raster &ifgRaster, isce3::io::Raster &coherence, isce3::io::Raster *rngOffsetRaster=nullptr) const
Crossmultiply 2 SLCs.
Definition Crossmul.cpp:69
int azimuthLooks() const
Get number of azimuth looks.
Definition Crossmul.h:80
size_t oversampleFactor() const
Get oversample factor.
Definition Crossmul.h:86
void refDoppler(isce3::core::LUT1d< double > refDopp)
Set dopplers LUT for reference SLC.
Definition Crossmul.h:41
void getPeakIndex(std::valarray< float > data, size_t &peakIndex)
estimate the index of the maximum of a vector of data
Definition Crossmul.icc:118
int rangeLooks() const
Get number of range looks.
Definition Crossmul.h:74
size_t linesPerBlock() const
Get linesPerBlock.
Definition Crossmul.h:92
void secDoppler(isce3::core::LUT1d< double > secDopp)
Set dopplers LUT for secondary SLC.
Definition Crossmul.h:47
void rangeFrequencyShift(std::valarray< std::complex< float > > &refAvgSpectrum, std::valarray< std::complex< float > > &secAvgSpectrum, std::valarray< double > &rangeFrequencies, size_t linesPerBlockData, size_t fft_size, double &frequencyShift)
Compute the avergae frequency shift in range direction between two SLCs.
Definition Crossmul.icc:75
const isce3::core::LUT1d< double > & refDoppler() const
Get doppler LUT for reference SLC.
Definition Crossmul.h:44
const isce3::core::LUT1d< double > & secDoppler() const
Get doppler LUT for secondary SLC.
Definition Crossmul.h:50
void doppler(isce3::core::LUT1d< double >, isce3::core::LUT1d< double >)
Set doppler LUTs for reference and secondary SLCs.
Definition Crossmul.icc:20
void linesPerBlock(size_t linesPerBlock)
Set linesPerBlock.
Definition Crossmul.h:89

Generated for ISCE3.0 by doxygen 1.13.2.