public FirstOrderBandPassFilteredYoVariable(String name, String description, double minPassThroughFrequency_Hz, double maxPassThroughFrequency_Hz, YoDouble yoTime, YoVariableRegistry registry) { super(name, description, maxPassThroughFrequency_Hz, yoTime, FirstOrderFilterType.LOW_PASS, registry); this.highPassFilteredInput = new FirstOrderFilteredYoVariable(name + "HighPassFilteredOnly", description, minPassThroughFrequency_Hz, yoTime, FirstOrderFilterType.HIGH_PASS, registry); setPassBand(minPassThroughFrequency_Hz, maxPassThroughFrequency_Hz); }
public FirstOrderBandPassFilteredYoVariable(String name, String description, double minPassThroughFrequency_Hz, double maxPassThroughFrequency_Hz, DoubleYoVariable yoTime, YoVariableRegistry registry) { super(name, description, maxPassThroughFrequency_Hz, yoTime, FirstOrderFilterType.LOW_PASS, registry); this.highPassFilteredInput = new FirstOrderFilteredYoVariable(name + "HighPassFilteredOnly", description, minPassThroughFrequency_Hz, yoTime, FirstOrderFilterType.HIGH_PASS, registry); setPassBand(minPassThroughFrequency_Hz, maxPassThroughFrequency_Hz); }
@ContinuousIntegrationTest(estimatedDuration = 0.1) @Test(timeout=300000) public void testBandPassAttenuationForSinusoidalInput() { double inputFrequencyRadPerSec = 10.0; double a = inputFrequencyRadPerSec / 5.0; double b = inputFrequencyRadPerSec * 5.0; double filterAttenuation = 1.0; double properBandPassAttenuation; FirstOrderBandPassFilteredYoVariable bandPassFilteredYoVariable = new FirstOrderBandPassFilteredYoVariable("sineWave", "", a, b, yoTime, registry); while (filterAttenuation > 0.1 && a > 0.0 && b > 0.0) { bandPassFilteredYoVariable.setPassBand(a / (2.0*Math.PI), b / (2.0*Math.PI)); filterAttenuation = computeSteadyStateFilteredOutputAmplitude(yoTime, DT, inputFrequencyRadPerSec, bandPassFilteredYoVariable); properBandPassAttenuation = computeProperBandPassAttenuation(inputFrequencyRadPerSec, a, b); assertEquals(properBandPassAttenuation, filterAttenuation, 1e-2); a -= 10.0; b -= 10.0; } }