8#if !defined(ISCE_SIGNAL_CROSSMUL_ICC)
9#error "Crossmul.icc is an implementation detail of class Crossmul"
14#include <isce3/except/Error.h>
23 _refDoppler = refSlcDoppler;
25 _secDoppler = secSlcDoppler;
36 std::string error_msg =
"ERROR crossmul range multilook < 1";
37 throw isce3::except::InvalidArgument(ISCE_SRCINFO(), error_msg);
41 if (_rangeLooks > 1 or _azimuthLooks > 1) {
42 _multiLookEnabled =
true;
44 _multiLookEnabled =
false;
55 std::string error_msg =
"ERROR crossmul azimuth multilook < 1";
56 throw isce3::except::InvalidArgument(ISCE_SRCINFO(), error_msg);
60 if (_rangeLooks > 1 or _azimuthLooks > 1) {
61 _multiLookEnabled =
true;
63 _multiLookEnabled =
false;
76 std::valarray<std::complex<float>> &secSpectrum,
77 std::valarray<double> &rangeFrequencies,
80 double &frequencyShift)
83 std::valarray<float> refAvgSpectrum(fft_size);
85 std::valarray<float> secAvgSpectrum(fft_size);
89 for (
size_t col = 0; col < fft_size; ++col){
90 refAvgSpectrum[col] += std::abs(refSpectrum[line*fft_size + col]);
91 secAvgSpectrum[col] += std::abs(secSpectrum[line*fft_size + col]);
107 std::cout <<
"idx1, idx2: "<< idx1 <<
" , " << idx2 << std::endl;
110 frequencyShift = rangeFrequencies[idx1] - rangeFrequencies[idx2];
118getPeakIndex(std::valarray<float> data,
size_t &peakIndex)
120 size_t dataLength = data.size();
122 double peak = data[peakIndex];
123 for (
size_t i = 1; i< dataLength; ++i){
124 if (std::abs(data[i]) > peak){
Data structure to hold a 1D Lookup table.
Definition LUT1d.h:15
void rangeLooks(int)
Set number of range looks.
Definition Crossmul.icc:32
void azimuthLooks(int)
Set number of azimuth looks.
Definition Crossmul.icc:51
int azimuthLooks() const
Get number of azimuth looks.
Definition Crossmul.h:80
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
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
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