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; }