isce3 0.25.0
Loading...
Searching...
No Matches
gpuFilter.h
1//
2// Author: Liang Yu
3// Copyright 2019
4//
5
6#pragma once
7
8#include "forward.h"
9#include <isce3/core/forward.h>
10
11#include <complex>
12#include <valarray>
13#include <thrust/complex.h>
14
15#include "gpuSignal.h"
16
17namespace isce3::cuda::signal {
18
19// Definition of base class
20template<class T>
21class gpuFilter {
22 public:
23 gpuFilter() {};
24 ~gpuFilter();
25
27 void filter(std::valarray<std::complex<T>> &signal,
28 std::valarray<std::complex<T>> &spectrum);
29
31 void filter(gpuSignal<T> &signal);
32
34 void filter(thrust::complex<T> *data);
35
37 void writeFilter(size_t ncols, size_t nrows);
38
39 protected:
40
41 thrust::complex<T> *_d_filter; // device unified memory pointer
42 bool _filter_set = false;
43 gpuSignal<T> _signal;
44};
45
46// Azimuth filter class derived from base class
47template <class T>
48class gpuAzimuthFilter : public gpuFilter<T> {
49 public:
50 gpuAzimuthFilter();
51 ~gpuAzimuthFilter() {};
52
54 void initiateAzimuthFilter(std::valarray<std::complex<T>> &signal,
55 std::valarray<std::complex<T>> &spectrum,
56 size_t ncols,
57 size_t nrows);
58
59 void constructAzimuthCommonbandFilter(const isce3::core::LUT1d<double> & refDoppler,
60 const isce3::core::LUT1d<double> & secDoppler,
61 double bandwidth,
62 double prf,
63 double beta,
64 //std::valarray<std::complex<T>> &signal,
65 size_t ncols,
66 size_t nrows);
67};
68
69// Range filter class derived from base class
70template <class T>
71class gpuRangeFilter : public gpuFilter<T> {
72 public:
73 gpuRangeFilter();
74 ~gpuRangeFilter();
75
76 // same name wrappers for filter init and construction functions with HostToDevice cp
78 void initiateRangeFilter(std::valarray<std::complex<T>> &signal,
79 std::valarray<std::complex<T>> &spectrum,
80 size_t ncols,
81 size_t nrows);
82
84 void constructRangeBandpassFilter(double rangeSamplingFrequency,
85 std::valarray<double> subBandCenterFrequencies,
86 std::valarray<double> subBandBandwidths,
87 std::valarray<std::complex<T>> &signal,
88 std::valarray<std::complex<T>> &spectrum,
89 size_t ncols,
90 size_t nrows,
91 std::string filterType);
92
93 void constructRangeBandpassFilter(double rangeSamplingFrequency,
94 std::valarray<double> subBandCenterFrequencies,
95 std::valarray<double> subBandBandwidths,
96 size_t ncols,
97 size_t nrows,
98 std::string filterType);
99
101 void constructRangeBandpassBoxcar(std::valarray<double> subBandCenterFrequencies,
102 std::valarray<double> subBandBandwidths,
103 double dt,
104 int nfft,
105 std::valarray<std::complex<T>> &_filter1D);
106
107 void constructRangeBandpassCosine(std::valarray<double> subBandCenterFrequencies,
108 std::valarray<double> subBandBandwidths,
109 double dt,
110 std::valarray<double>& frequency,
111 double beta,
112 std::valarray<std::complex<T>>& _filter1D);
113
114 void filterCommonRangeBand(T *d_refSlc, T *d_secSlc, T *range);
115
116 size_t rangeFrequencyShiftMaxIdx(thrust::complex<T> *spectrum,
117 int n_rows,
118 int n_cols);
119
120 void getPeakIndex(T *data, int data_lenth, size_t &peakIndex);
121
122 private:
123 double _wavelength;
124 double _rangePixelSpacing;
125 double _freqShift;
126 double _rangeBandWidth;
127 double _rangeSamplingFrequency;
128 double _rangeBandwidth;
129 T *_d_spectrumSum;
130 bool _spectrumSum_set = false;
131};
132
133template<class T>
134__global__ void phaseShift_g(thrust::complex<T> *slc, T *range, double pxlSpace, T conj, double wavelength, T wave_div, int n_elements);
135
136template<class T>
137__global__ void sumSpectrum_g(thrust::complex<T> *spectrum, T *spectrum_sum, int n_rows, int n_cols);
138
139} // namespace isce3::cuda::signal
Data structure to hold a 1D Lookup table.
Definition LUT1d.h:15
void initiateAzimuthFilter(std::valarray< std::complex< T > > &signal, std::valarray< std::complex< T > > &spectrum, size_t ncols, size_t nrows)
constructs forward abd backward FFT plans for filtering a block of data in azimuth direction.
Definition gpuAzimuthFilter.cu:25
void writeFilter(size_t ncols, size_t nrows)
carry over from parent class.
Definition gpuFilter.cu:103
void filter(std::valarray< std::complex< T > > &signal, std::valarray< std::complex< T > > &spectrum)
Filter a signal in frequency domain.
Definition gpuFilter.cu:76
void constructRangeBandpassBoxcar(std::valarray< double > subBandCenterFrequencies, std::valarray< double > subBandBandwidths, double dt, int nfft, std::valarray< std::complex< T > > &_filter1D)
Construct a box car range band-pass filter for multiple bands.
Definition gpuRangeFilter.cu:126
void constructRangeBandpassFilter(double rangeSamplingFrequency, std::valarray< double > subBandCenterFrequencies, std::valarray< double > subBandBandwidths, std::valarray< std::complex< T > > &signal, std::valarray< std::complex< T > > &spectrum, size_t ncols, size_t nrows, std::string filterType)
Construct range band-pass filter.
Definition gpuRangeFilter.cu:52
void initiateRangeFilter(std::valarray< std::complex< T > > &signal, std::valarray< std::complex< T > > &spectrum, size_t ncols, size_t nrows)
constructs forward abd backward FFT plans for filtering a block of data in range direction.
Definition gpuRangeFilter.cu:35
Definition gpuSignal.h:14
Definition GDALDataTypeUtil.h:10

Generated for ISCE3.0 by doxygen 1.13.2.