Exemple #1
0
        public async Task <TestPulseWaveformResponse> Post(
            TestPulseWaveformRequest testPulseWaveformRequest)
        {
            if (testPulseWaveformRequest.Sections == null)
            {
                throw new ArgumentException("Sections not supplied");
            }

            const int samplingFrequency = 10;

            testPulseWaveformRequest.PulseFrequency.ChanceOfHigh          = 1;
            testPulseWaveformRequest.PulseFrequency.Variation.Progression = 0;
            // progression 0 is so it will always choose to use a feature, for the no feature one we use feature chooser to nullify it.

            var hfPulseGenerator = pulseGeneratorProvider.GetPulseGenerator(testPulseWaveformRequest,
                                                                            new GetPulseGeneratorParams {
                ChooseFeature = nameof(FeatureProbabilityModel.Frequency), SamplingFrequency = samplingFrequency
            });

            testPulseWaveformRequest.PulseFrequency.ChanceOfHigh = 0;
            var lfPulseGenerator = pulseGeneratorProvider.GetPulseGenerator(testPulseWaveformRequest,
                                                                            new GetPulseGeneratorParams {
                ChooseFeature = nameof(FeatureProbabilityModel.Frequency), SamplingFrequency = samplingFrequency
            });

            var nfPulseGenerator = pulseGeneratorProvider.GetPulseGenerator(testPulseWaveformRequest,
                                                                            new GetPulseGeneratorParams {
                ChooseFeature = string.Empty, SamplingFrequency = samplingFrequency
            });                                                                                                       // never chooses a feature

            int N      = testPulseWaveformRequest.Sections.SectionLengthSeconds * samplingFrequency;
            var dataNf = new List <double[]>();
            var dataLf = new List <double[]>();
            var dataHf = new List <double[]>();

            for (int n = 0; n <= N; n++)
            {
                var t   = testPulseWaveformRequest.Sections.SectionLengthSeconds * (double)n / N;
                var alf = await lfPulseGenerator.Amplitude(t, n, 0);

                var ahf = await hfPulseGenerator.Amplitude(t, n, 0);

                var anf = await nfPulseGenerator.Amplitude(t, n, 0);

                dataNf.Add(new[] { t, anf });
                dataLf.Add(new[] { t, alf });
                dataHf.Add(new[] { t, ahf });
            }
            return(new TestPulseWaveformResponse
            {
                Success = true,
                SampleNoFeature = dataNf.ToArray(),
                SampleHighFrequency = dataHf.ToArray(),
                SampleLowFrequency = dataLf.ToArray()
            });
        }
Exemple #2
0
        public PulseGenerator GetPulseGenerator(TestPulseWaveformRequest testPulseWaveformRequest, GetPulseGeneratorParams parameters)
        {
            var pulseFrequencyModel        = mapper.Map <PulseFrequency, PulseFrequencyModel>(testPulseWaveformRequest.PulseFrequency);
            var sectionsModel              = mapper.Map <Sections, SectionsModel>(testPulseWaveformRequest.Sections);
            var waveformExpressionProvider = new WaveformExpressionProvider(testPulseWaveformRequest.WaveformExpression);
            var trackLength               = TimeSpan.FromSeconds(testPulseWaveformRequest.Sections.SectionLengthSeconds);
            var waveFileMetadata          = new WavefileMetadata(numberOfChannels: 1, phaseShiftCarrier: false, phaseShiftPulses: false, randomization: false, trackLength: trackLength);
            var featureChooser            = new AlwaysFeatureChooser(parameters.ChooseFeature);
            var samplingFrequencyProvider = new SamplingFrequencyProvider(parameters.SamplingFrequency);

            // this composes a subset of the main file-creation component stack
            // (DependencyConfig.Configure(settings) creates the full stack)
            var nestedContainer = container.GetNestedContainer();

            nestedContainer.AddInstance(sectionsModel);
            nestedContainer.AddInstance(pulseFrequencyModel);
            nestedContainer.AddInstance <IWaveformExpressionProvider>(waveformExpressionProvider);
            nestedContainer.AddInstance <IWaveFileMetadata>(waveFileMetadata);
            nestedContainer.AddInstance <IFeatureChooser>(featureChooser);
            nestedContainer.AddInstance <ISamplingFrequencyProvider>(samplingFrequencyProvider);
            var pulseGenerator = nestedContainer.Resolve <PulseGenerator>();

            return(pulseGenerator);
        }