public FeaturesContainer GetFeatures(SignalContainer signal) { var features = signal.GetFrames().Select(frame => new FrameFeatures(frame.Bounds, frame.Signal)). Where(feature => feature.FeatureDimension == signal.FrameSize).ToList(); return(new FeaturesContainer(features)); }
public SignalContainer GetSpeech(SignalContainer rawSignal) { SignalContainer singal = rawSignal.Copy(); singal.FrameSize = 100; //ToDo! Constant change singal.FrameShift = singal.FrameSize; List <double> framesEnergy = singal.GetFrames().Select(frame => SignalHelper.GetAverageEnergy(frame.Signal)).ToList(); double averageEnergy = framesEnergy.Average(); double[] flattenedFramesEnergy = ApplyMeanFilter(framesEnergy.ToArray(), 3); SpeechBounds speechFramesBounds = GetSpeechBounds(flattenedFramesEnergy, averageEnergy); var speechFrames = singal.GetFrames().Skip(speechFramesBounds.Start).Take(speechFramesBounds.Width); double[] speechSignal = speechFrames.SelectMany(frame => frame.Signal).ToArray(); return(new SignalContainer(speechSignal) { FrameSize = rawSignal.FrameSize, FrameShift = rawSignal.FrameShift }); }
public FeaturesContainer GetFeatures(SignalContainer signal) { IList <Frame> frames = signal.GetFrames(); List <FrameFeatures> features = new List <FrameFeatures>(); foreach (Frame frame in frames) { SignalContainer extendedSignal = GetSignalForFiltering(frame.Signal); IList <FilterProcessResult> extendedSignalChannels = FilterBankCore.ProcessSignal(extendedSignal); FilterBankCore.Reset(); IList <FilterProcessResult> signalChannels = GetFilteredSignalsPart(extendedSignalChannels, frame.Bounds.Width); double[] channelsNormalizedEnergy = GetChannelsEnergy(signalChannels); features.Add(new FrameFeatures(frame.Bounds, channelsNormalizedEnergy)); } return(new FeaturesContainer(features)); }