Exemple #1
0
        public ScalogramContainer CreateScalogram(List <float> frequenciesToAnalyze, float cyclesCount = 3)
        {
            ProgressRatio         = 0;
            _frequenciesToAnalyze = frequenciesToAnalyze;
            var container = new ScalogramContainer(_signalFT.Length, frequenciesToAnalyze.Count);

            //Parallel.ForEach(frequenciesToAnalyze, frequency =>
            //{
            //Interlocked.Increment(ref _frequenciesCalculated);
            //});

            for (int frequencyIndex = 0; frequencyIndex < frequenciesToAnalyze.Count; frequencyIndex++)
            {
                var frequency = frequenciesToAnalyze[frequencyIndex];
                var sigma     = 6;
                var scalogram = WaveletTransformCPU.CreateScalogram(frequency, _signalFT, AudioContainer.SampleRate, cyclesCount, sigma);
                for (int i = 0; i < scalogram.Length / 2; i++)
                {
                    var temp = scalogram[i];
                    scalogram[i] = scalogram[scalogram.Length / 2 + i];
                    scalogram[scalogram.Length / 2 + i] = temp;
                }
                container.SetFrequencyData(frequencyIndex, scalogram);

                ProgressRatio = (float)(frequencyIndex + 1) / frequenciesToAnalyze.Count;
            }

            container.Normalize();
            IsFinished = true;
            return(container);
        }
        public WaveletGenerationViewModel(SoundDataModel soundDataModel)
        {
            SoundDataModel = soundDataModel;

            GenerateWavelet = new DelegateCommand(() =>
            {
                //todo: put to wavelet model;
                var complex   = WaveletTransformCPU.GenerateMorletWavelet(WaveFrequency, SampleRate, CyclesCount, PointsCount, SigmaValue);
                var real      = complex.Select(v => (float)v.Real).ToArray();
                var duration  = 1.0 / SampleRate * PointsCount;
                var container = new AudioContainer((float)duration, SampleRate, real);
                SoundDataModel.LoadContainer.OnNext(container);
            });

            WaveFrequency = 1;
            CyclesCount   = 5;
            PointsCount   = 1024;
            SampleRate    = 64;
            SigmaValue    = 5;
        }