Files (0)
Variables
Derived variables
Formula help
Operators
+ - * / ^ ( )
Functions
sqrt(x), abs(x), log(x), log10(x), power(x,n), root(x,n), diff(x)
Variables
Start typing to autocomplete variable and function names.
Example
x / y^2 * 100
Data tools
Outlier detection help
Spike/dropout
Uses a moving median and local MAD to catch short gross excursions that return to the neighborhood.
Bounds
Flags finite values outside the physical minimum or maximum you enter.
6
21
Fill methods help
Linear
A straight line in time between the samples either side of the hole.
Cubic
PCHIP never overshoots the values it joins; Akima is smoother through curvature and shrugs off a single wild sample.
Smoothed local trend
Fits a weighted straight line through the surrounding samples, so a noisy signal is bridged along its trend instead of between two noisy readings.
Two kinds of hole
One NaN between two good samples one Ξt apart is reconstruction: the signal cannot have gone far in between. Sixty NaN spanning a stretch the file never sampled is invention: the same formula, with nothing to constrain it. The limit below is exactly where you draw that line, which is why the panel quotes the longest run in samples and in time.
Longest gap to fill
Runs longer than this are left as they are. Type a number larger than the slider to go past it.
What it cannot do
It replaces NaN samples in place: same length, same time axis, so the result is a variable of this file. It cannot create rows the file does not have β a stretch where the logger stopped contains no NaN to replace. Resample at the fileβs own Ξt with Gaps in the source: leave them empty to materialise those rows as NaN, then come back here.
10
21
2
101
Coefficients
Direction help
Forward (causal)
Runs from the first sample to the last, so every output uses only the past β exactly what a filter running in real time on an instrument does. The unavoidable price is delay: the output lags the input, and by a different amount at every frequency.
Forward and back (zero phase)
Filters the signal, then filters that result backwards. The second pass applies exactly the opposite delay, so the two cancel and nothing moves in time at all β a feature stays at the sample it happened on.
This makes it a non-causal filter: each output depends on samples that come after it. That is impossible in real time and perfectly ordinary offline, which is what this app does β but it means the result cannot be reproduced by any filter running on live data. Two further consequences: the signal passes through the response twice, so the attenuation is squared (a filter that halves at some frequency now quarters it), and the effective order is doubled.
Initial conditions help
A recursive filter needs a past to start from: y[0] depends on x[β1] and y[β1], which the file does not contain. All four options answer that one question β what was happening just before the data begins β and they only differ in how you would rather say it.
Steady state (no startup transient)
The default. As if the input had been sitting at the first sample forever, so a signal at 300 opens at 300 instead of swinging up from zero. Use it unless you have a reason not to.
Zero (filter starts at rest)
Everything before the start is taken as 0, which is what a real DSP does when it powers up. Reproduces the startup transient of an embedded filter β including the swing from zero, which here is a real part of the answer rather than an artefact.
Constant level before the start
One number: the value the input had been holding before the recording began. Steady state with the level named by you instead of read from the first sample β the right answer when the file starts mid-event and its first sample is not where the signal had been resting.
Past samples of x and y
The fully general option, and the one to reach for when you know the history. Two boxes, N values each for a filter of order N, newest first: the inputs box takes x[β1], x[β2] β¦ and the outputs box takes y[β1], y[β2] β¦, separated like the coefficients. Each placeholder names its own values.
Give the past outputs too, not just the inputs. Leaving y at zero while x is not describes a filter that was fed a history but had its output memory wiped β a state no running filter is ever in, and it produces a startup kick of its own. If you do not know the past outputs, one of the three options above is a better answer than guessing them.
When it is used
The state is set at the first sample and again at every restart (see Missing values / NaN). Zero phase ignores this setting: it derives its own edges from the reflection padding. Changing b or a clears the values you typed, because a history of the wrong length belongs to a different filter.
Missing values / NaN
samples
Missing values / NaN help
The output
Holes stay holes. The result is missing wherever the input is missing, and wherever the file skipped a stretch of time β nothing is invented across a break. Fill the holes first if you want the filter to run through them; that is a decision with its own parameters, and Fill missing data owns it.
The state is what you configure
A single missing value inside a recursive filter would enter the state and make every later sample missing too, so the recursion cannot simply run on. What the threshold below decides is whether the filter's memory survives a break or is rebuilt on the far side of it.
The unit is samples
Samples, never seconds. The number is how many consecutive sample positions may carry no usable value and still be stepped over. A filter has no notion of time, so counting the break in seconds would mean nothing to it.
What is counted
Two things that look different in the file but are the same break in the signal: rows that exist and hold a missing value, and stretches of time the file simply skipped. The second is measured against the file's own nominal step β a jump of 10 Ξt counts as 9 missing samples even though no row is there to see.
0 β restart at every break
The default, and the conservative choice: nothing is carried across a hole. The recursion begins again on the far side under the initial conditions you chose, which costs one settling transient per break.
Higher β step over short breaks
A break of at most this many samples is stepped over with the filter's state left standing, so the signal continues as though the gap had not happened and you spend one transient instead of many. Sound when the hole is short next to the filter's memory, misleading when it is long β the state then carries a memory of a moment that is already far in the past.
Digital filter help
What it computes
aβΒ·y[n] = bβΒ·x[n] + bβΒ·x[nβ1] + β¦ β aβΒ·y[nβ1] β aβΒ·y[nβ2] β β¦
Leave a at 1 for an FIR: with no feedback term the output depends only on the input.
Numerator and denominator
Both are lists in ascending delay order: b is bβ, bβ, bβ β¦ (weights on x[n], x[nβ1], x[nβ2] β¦) and a is aβ, aβ, aβ β¦ (weights on y[n], y[nβ1], y[nβ2] β¦). The lists need not be the same length; the shorter one is padded with zeros.
aβ need not be 1. It divides every other coefficient, so it may be any non-zero number and the filter is normalised for you β 2, 1 is the same filter as 1, 0.5. Only zero is refused: that is not a difference equation.
Separate the numbers with commas, spaces, semicolons or newlines, and square brackets are accepted so a list can be pasted straight from MATLAB or NumPy. All of these are the same: 0.5, 0.24 Β· 0.5 0.24 Β· [0.5 0.24] Β· [0.5, 0.24]
Stability
An unstable filter cannot be created: its own output feeds back and grows until every later sample is infinite. The poles of a are checked before anything runs.
Sample rate
A digital filter is defined per SAMPLE, not per second: the coefficients know nothing about the time axis. On a file with an irregular Ξt the cut-off is therefore not a fixed frequency in the data's own units, and the panel says so. Resample to a uniform grid first if you need the cut-off to mean a frequency.
s
detected
Resampling help
Reading the curve
Linear, cubic, nearest and hold read the signal at each new time. Right for upsampling; downsampling this way aliases fast detail into slow structure.
Reducing a bin
Average, median, minimum and maximum reduce every sample around each new time. Average is the anti-aliased downsample; minimum and maximum keep the envelope.
Missing data
A missing VALUE stays missing: a new time surrounded by NaN, or an empty bin, comes out NaN whatever you choose below.
Absent ROWS are the separate question Gaps in the source answers. A file that stopped logging for a minute has no NaN in it at all β the samples either side are perfectly good β so a point method can reach across. The two cases are the same formula with opposite standing: interpolating between two samples one Ξt apart reconstructs, interpolating across sixty of them invents.
Leave them empty (the default) marks those samples NaN β which is also what the bin methods have always done with an interval holding nothing β and then Fill NaN values bridges them with a method, a length limit and an edge policy of your choosing. Interpolate across them does it here in one step, with no control over how far is too far. Bin methods never reach across anything, so the choice does not apply to them.
A new file
The result has its own time axis, so it arrives as a new file next to this one rather than as a variable inside it.
Transformations
Options
Legend
Layout
Hover a panel to split or close it.
Franco FERRUCCI Β·
ferrucci-franco.github.io
π
Drag & drop a result or text file here
or
Loading application...
π