Example #1
0
        public void writeWaveletTransformToFile(string fileName, WTransform transform)
        {
            var writer = new StreamWriter(fileName);

            for (var i = 0; i < transform.rows(); ++i)
            {
                for (var j = 0; j < transform.cols(); ++j)
                {
                    writer.Write(transform.mag(i, j));
                }
                writer.Write("\n");
            }
        }
Example #2
0
        public static WTransform cwt(Signal s, RangeFunctor.RangeFunctor Scales,
                                     RangeFunctor.RangeFunctor Translations, Wavelet.Wavelet MotherWavelet, int ivalp, string Name)
        {
            // Result
            WTransform wt;

            // references to internal Signal/WTransform data
            double[] s_re, s_im;
            double[] wt_re, wt_im;
            // signal params
            int    n  = s.length();
            double fs = s.getFs();
            // WT params
            double a, b, T;
            double i, istep;
            // indexes and dimensions
            int dx, dy;
            int rows, cols;
            int row, row_dx;


            // check arguments
            if (Scales.Steps() <= 0 || Translations.Steps() <= 0 || n <= 0 ||
                fs <= 0.0 || ivalp <= 0)
            {
                throw new ArgumentException();
            }

            // create result object
            wt = new WTransform(Scales, Translations, MotherWavelet, Name);

            // obtain result dimensions and references to data
            rows  = wt.rows();
            cols  = wt.cols();
            wt_re = wt.reData();
            wt_im = wt.imData();
            s_re  = s.reData();
            s_im  = s.imData();

            // index step (used in convolution stage)
            istep = 1.0 / (double)ivalp;

            // Scales
            for (dy = 0; dy < rows; dy++)
            {
                // obtain current scale
                a = Scales.Evaluate(dy) * fs;
                if (Math.Abs(a) < 0.0)
                {
                    a = Double.MinValue;
                }

                // set starting index of current row
                row = dy * cols;

                // Translations
                for (dx = 0; dx < cols; dx++)
                {
                    // obtain current translation
                    b = Translations.Evaluate(dx) * fs;

                    // index of convolution result
                    row_dx = row + dx;

                    // Perform convolution
                    wt_re[row_dx] = 0.0;
                    wt_im[row_dx] = 0.0;
                    for (i = 0.0; i < n; i += istep)
                    {
                        T              = (i - b) / a;
                        wt_re[row_dx] += cmplxMulRe(s_re[(int)i], s_im[(int)i],
                                                    MotherWavelet.reT(T), -MotherWavelet.imT(T));
                        wt_im[row_dx] += cmplxMulRe(s_re[(int)i], s_im[(int)i],
                                                    MotherWavelet.reT(T), -MotherWavelet.imT(T));
                        // NOTE: "-" before Wavelet imaginary part indicates complex
                        // conjunction.
                    }

                    wt_re[row_dx] *= 1.0 / (Math.Sqrt(a) * ivalp);
                    wt_im[row_dx] *= 1.0 / (Math.Sqrt(a) * ivalp);
                }
            }

            return(wt);
        }