private DigitalFilter CreateFilter(DigitalFilter source, int left, int right) { double[] coeffs = Arrays.New(right - left + 1, i => source[i + left]); double factor = GetFactor(coeffs); return(new DigitalFilter(-left, coeffs.Select(x => x / factor).ToArray())); }
public virtual T Sample(T[] source, int center) { DigitalFilter filter = filters.GetFilter(center, source.Length); T sum = new T(); for (int i = filter.Left; i <= filter.Right; i++) { sum += (dynamic)source[center + i] * filter[i]; } return(sum); }
public DirichletBoundaryHandler(int max) { fullFilter = NormalizedDirichlet(max); leftFilters[0] = new DigitalFilter(0, new[] { 0.5, 0.5 }); rightFilters[0] = new DigitalFilter(1, new[] { 0.5, 0.5 }); for (int i = 1; i < max; i++) { DigitalFilter filter = NormalizedDirichlet(i); leftFilters[2 * i] = leftFilters[2 * i - 1] = rightFilters[2 * i] = rightFilters[2 * i - 1] = filter; } }
public SumBoundaryHandler(DigitalFilter filter) { fullFilter = CreateFilter(filter, filter.Left, filter.Right); for (int left = filter.Left + 1; left <= 0; left++) { leftFilters[-left] = CreateFilter(filter, left, filter.Right); } for (int right = 0; right <= filter.Right - 1; right++) { rightFilters[right] = CreateFilter(filter, filter.Left, right); } }
public DigitalSampler(DigitalFilter filter) : this(new SumBoundaryHandler(filter)) { }