/* TimeDomainResponseChartPanel.java created 2011-02-12 * */ package org.signalml.app.view.montage.filters.charts.elements; import static org.signalml.app.util.i18n.SvarogI18n._; import org.jfree.chart.axis.NumberAxis; import org.signalml.math.iirdesigner.FilterTimeDomainResponse; /** * A chart panel used for displaying time domain responses (impulse response * or step response) of a filter. * @author Piotr Szachewicz */ public class TimeDomainResponseChartPanel extends ResponseChartPanel { /** * Constructor. */ public TimeDomainResponseChartPanel() { super(); } @Override public String getDomainAxisName() { return _("Time [s]"); } @Override protected NumberAxis createRangeAxis() { return new NumberAxis(""); } /** * Sets the time domain response to be shown on the chart. * @param timeDomainResponse response to be shown */ public void setData(FilterTimeDomainResponse timeDomainResponse) { double[] values = timeDomainResponse.getValues(); double[] fixedValues = limitTheValuesIfInstableFilter(values); this.setData(timeDomainResponse.getTime(), fixedValues); } /** * Limits the largest value in the time response to {@link FilterTimeDomainResponse#INSTABILITY_THRESHOLD}. * The values larger than that are set to be equal to {@link Double#NaN}. * * @param values the time response values * @return the array containing the limited values */ protected double[] limitTheValuesIfInstableFilter(double[] values) { double[] limitedValues = new double[values.length]; for (int i = 0; i < values.length; i++) if (Math.abs(values[i]) > FilterTimeDomainResponse.INSTABILITY_THRESHOLD) limitedValues[i] = Double.NaN; else limitedValues[i] = values[i]; return limitedValues; } }