Transforms
"basic" m/sin]
(gg/->file (gg/functions [["noisy" (fn [x] (+ (m/sin x) (* 0.2 (- (rand) 0.5))))]]
[:x [m/-TWO_PI m/TWO_PI]
{:ylim [-2 2]
:steps 500
:palette gg/palette-blue-0}))
fn [[x y]] (m/sin (m/* x (m/cos y)))) {:x [m/-TWO_PI m/TWO_PI]
(gg/->file (gg/function2d (:y [m/-TWO_PI m/TWO_PI]
:title "sin(x*cos(y))"
:legend-name "value"}))
fn [[x y]] (m/sin (m/* x (m/cos y)))) {:x [m/-TWO_PI m/TWO_PI]
(gg/function2d (:y [m/-TWO_PI m/TWO_PI]
:title "sin(x*cos(y))"
:legend-name "value"})
:x [m/-TWO_PI m/TWO_PI]
(gg/function m/tan {:title "tan(x)"
:ylab "y=tan(x)"
:ylim [-2 2] ;; we need to limit y axis
:steps 500})
let [xs (repeatedly 2000 r/grand)
(map (fn [x] (+ (r/grand (+ 0.1 (* x 0.5))) (m/sin (* 2 x)))) xs)]
ys (:title "Scatter"})) (gg/scatter xs ys {
let [xy (take 1000 (r/sequence-generator :r2 2))]
(nil {:title "R2 low-discrepancy sequence generator"})) (gg/scatter xy
"tan" m/tan]
(gg/functions [["cot" m/cot]
["sin" m/sin]
["cos" m/cos]]
[:x [m/-TWO_PI m/TWO_PI]
{:title "Basic trigonometric functions"
:ylim [-2 2]
:steps 500
:palette gg/palette-blue-1})
(gg/->file (gg/function m/sec:x [m/-TWO_PI m/TWO_PI]
{:ylim [-2 2]
:steps 500}))
General description of the topic
transformer
forward-1d
,forward-2d
reverse-1d
,reverse-2d
FFT
Details about FFT and use-cases
Some examples:
def fft-real (t/transformer :real :fft )) (
seq (t/forward-1d fft-real [1 2 -10 1])) ;; => (-6.0 -12.0 11.0 -1.0)
(seq (t/reverse-1d fft-real [-6 -12 11 -1])) ;; => (1.0 2.0 -10.0 1.0) (
Wavelets
Compression and denoising
An use case with charts
def domain (m/slice-range 0 10 512)) (
def signal (map (fn [x] (+ (Math/sin x)
(* 0.1 (- (rand) 0.5)))) ;; add some noise
( domain))
def denoised-signal (t/denoise fft-real signal {:method :hard})) (
![]() |
![]() |
Reference
fastmath.transform
Transforms.
See transformer and TransformProto for details.
### Wavelet
Based on JWave library.
Be aware that some of the wavelet types doesn’t work properly. :battle-23
, :cdf-53
, :cdf-97
.
### Cos/Sin/Hadamard
Orthogonal or standard fast sine/cosine/hadamard 1d transforms.
### Fourier
DFT, FFT, DHT.
compress
(compress trans xs mag)
(compress xs mag)
Compress transformed signal xs
with given magnitude mag
.
compress-peaks-average
(compress-peaks-average trans xs)
(compress-peaks-average xs)
Compress transformed signal xs
with peaks average as a magnitude
denoise
(denoise xs {:keys [method threshold skip], :or {method :hard, threshold :universal, skip 0}})
(denoise trans xs method)
(denoise xs)
Wavelet shrinkage with some threshold.
Methods can be: * :hard
(default)
* :soft
* :garrote
* :hyperbole
:threshold
can be a number of one of the denoise-threshold methods (default: :visu
)
:skip
can be used to leave :skip
number of coefficients unaffected (default: 0)
Use on transformed sequences or call with transformer object.
denoise-threshold
(denoise-threshold xs threshold)
Calculate optimal denoise threshold.
threshold
is one of the following
:visu
- based on median absolute deviation estimate (default):universal
- based on standard deviation estimate:sure
or:rigrsure
- based on SURE estimator:hybrid
or:heursure
- hybrid SURE estimator
forward-1d
(forward-1d t xs)
Forward transform of sequence or array.
forward-2d
(forward-2d t xss)
Forward transform of sequence or array.
reverse-1d
(reverse-1d t xs)
Forward transform of sequence or array.
reverse-2d
(reverse-2d t xss)
Forward transform of sequence or array.
transformer
Create transform object for given wavelet.
#### Wavelets
:fast
for 1d or 2d Fast Wavelet Transform. Size of data should be power of2
.:packet
for 1d or 2d Wavelet Packet Transform. Size of data should be power of2
.:decomposed-fast
for 1d Fast Wavelet Transform. Data can have any size (Ancient Egyptian Decomposition is used).:decomposed-packet
for 1d Wavelet Packet Transform. Data can have any size (Ancient Egyptian Decomposition is used).
Second argument is wavelet name as key. See wavelets-list for all supported names.
#### Sine/Cosine/Hadamard
:standard
for 1d:sine
,:cosine
,:hadamard
.:orthogonal
for 1d:sine
,:cosine
.
Note that :sine
and :cosine
require first element to be equal 0
. Size of data should be power of 2.
#### Fourier
:standard
:dft
- 1d Discrete Fourier Transform - returns double-array where even elements are real part, odd elements are imaginary part.
wavelets-list
List of all possible wavelets.
source: clay/transform.clj