Reference
JetPackTransforms.JopDct
— MethodA = JopDct(T, n...[;dims=()])
where A
is a type II discrete cosine transfrom (DCT), T is the element type of the domain and range if A, and n is the size of A. If dims
is not set, then A
is the N-dimensional DCT and where N=length(n)
. Otherwise, A
is a DCT over the dimensions specified by dims
.
Examples
1D
A = JopDct(Float64, 128)
m = rand(domain(A))
d = A*m
2D
A = JopDct(Float64, 128, 64)
m = rand(domain(A))
d = A*m
2D transform over 3D array
A = JopDct(Float64,128,64,32;dims=(1,2))
m = rand(domain(A))
d = A*m
Notes
- the adjoint pair is achieved by application
sqrt(2/N)
andsqrt(2)
factors. See:- https://en.wikipedia.org/wiki/Discretecosinetransform
- http://www.fftw.org/fftw3doc/1d-Real002deven-DFTs-0028DCTs0029.html#gt1d-Real002deven-DFTs-0028DCTs0029
JetPackTransforms.JopDwt
— MethodA = JopDwt(T, n...[, wt=wavelet(WT.haar, WT.Lifting)])
A
is the N-D (N=1,2 or 3) wavelet transform operator, operating on the domain of type T
and dimensions n
. The optional argument wt
is the wavelet type. The supported wavelet types are WT.haar
and WT.db
(Daubechies).
Notes
- For 2 and 3 dimensional transforms the domain must be square. In other-words,
size(dom,1)==size(dom,2)==size(dom,3)
. - If your domain is rectangular, please consider using 1D wavelet transforms in combination wih the kronecker product (
JopKron
). - The wavelet transform is provide by the Wavelets.jl package:
http://github.com/JuliaDSP/Wavelets.jl
- You may try other wavelet classes supported by
Wavelets.jl
; however, these have yet to be tested for correctness with respect to the
transpose.
Example
A = JopDwt(Float64, 64, 64; wt=wavelet(WT.db5))
d = A*rand(domain(A))
JetPackTransforms.JopFft
— MethodA = JopFft(T, n...[; dims=()])
where A
is a Fourier transform, the domain of A is (T,n). If dims
is not set, then A
is an N-dimensional Fourier transform and where N=ndims(dom)
. Otherwise, A
is a Fourier transform over the dimensions specifed by dims
.
For a complex-to-complex transform: range(A)::JetSpace
. For a real-to-complex transform: range(A)::JetSpaceSymmetric
. Normally, JopFft is responsible for constructing range(A). In the event that you need to manually construct this space, we provide a convenience method:
R = symspace(JopLn{JopFft_df!}, T, symdim, n...)
where T
is the precision (generally Float32
or Float64
), n...
is the dimensions of the domain of A
, and symdim
is the first dimension begin Fourier transformed.
Examples
1D, real to complex
A = JopFft(Float64,128)
m = rand(domain(A))
d = A*m
1D, complex to complex
A = JopFft(ComplexF64,128)
m = rand(domain(A))
d = A*m
2D, real to complex
A = JopFft(Float64,128,256)
m = rand(domain(A))
d = A*m
3D, real to complex, transforming over only the first dimension
A = JopFft(Float64,128,256; dims=(1,))
m = rand(domain(A))
d = A*m
JetPackTransforms.JopSft
— Methodop = JopSft(dom,freqs,dt)
Polychromatic slow Fourier transforms for a specified list of frequencies. Tranform along the fast dimension of dom::JetSpace{<:Real}
.
Notes: - it is expected that the domain is 2D real of size [nt,ntrace] - the range will be 2D complex of size [length(freqs),ntrace] - regarding the factor of (2/n): the factor "1/n" is from the Fourier transform, and the "2" is from Hermittian symmetry.
JetPackTransforms.JopSlantStack
— MethodA = JopSlantStack(dom[; dz=10.0, dh=10.0, h0=-1000.0, ...])
where A
is the 2D slant-stack operator mapping for z-h
to tau-p
. The domain of the operator is nz
x nh
with precision T, dz
is the depth spacing, dh
is the half-offset spacing, and h0
is the origin of the half-offset axis. The additional named optional arguments along with their default values are,
theta=-60:1.0:60
- range of opening angles. The ray parameter is: p=sin(theta/2)/cpadz=0.0,padh=0.0
- fractional padding in depth and offset to apply before applying the Fourier transfromtaperz=(0,0)
- beginning and end taper in the z-direction before transforming fromz-h
tokz-kh
taperh=(0,0)
- beginning and end taper in the h-direction before transforming fromz-h
tokz-kh
taperkz=(0,0)
- beginning and end taper in the kz-direction before transforming fromkz-kh
toz-h
taperkh=(0,0)
- beginning and end taper in the kh-direction before transforming fromkz-kh
toz-h
Notes
It should be possible to extend this operator to 3D
If your domain is t-h rather than z-h, you can still use this operator