Transforms

(gg/->file (gg/functions [["basic" m/sin]
                          ["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}))

(gg/->file (gg/function2d (fn [[x y]] (m/sin (m/* x (m/cos y)))) {:x [m/-TWO_PI m/TWO_PI]
                                                                 :y [m/-TWO_PI m/TWO_PI]
                                                                 :title "sin(x*cos(y))"
                                                                 :legend-name "value"}))

(gg/function2d (fn [[x y]] (m/sin (m/* x (m/cos y)))) {:x [m/-TWO_PI m/TWO_PI]
                                                      :y [m/-TWO_PI m/TWO_PI]
                                                      :title "sin(x*cos(y))"
                                                      :legend-name "value"})

(gg/function m/tan {:x [m/-TWO_PI m/TWO_PI]
                    :title "tan(x)"
                    :ylab "y=tan(x)"
                    :ylim [-2 2] ;; we need to limit y axis
                    :steps 500})

(let [xs (repeatedly 2000 r/grand)
      ys (map (fn [x] (+ (r/grand (+ 0.1 (* x 0.5))) (m/sin (* 2 x)))) xs)]
  (gg/scatter xs ys {:title "Scatter"}))

(let [xy (take 1000 (r/sequence-generator :r2 2))]
  (gg/scatter xy nil {:title "R2 low-discrepancy sequence generator"}))

(gg/functions [["tan" m/tan]
               ["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

Defined functions
  • 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 ))
Examples
(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 of 2.
  • :packet for 1d or 2d Wavelet Packet Transform. Size of data should be power of 2.
  • :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.