Command glossary — console commands, verbs, functions
Everything the console understands: 62 registered commands, 132 matrix functions and 74 recipe verbs. ICoreCommandGlossary is the one catalog the app itself builds from these three sources — it feeds the glossary command, Tab completion and the suggestion popup.
Run one headlessly: ICoreBlocks --console "<command line>" — a bare --console with no command hangs forever, so always pass the command. The binary is the app bundle, not the loose build-mac/ICoreBlocks.
Commands#
| Command | What it does | Registered in |
|---|---|---|
clear | Clear the current output log (same as cls) | ICoreCommandSamples.cpp |
clearAll | Clear all logs, the variables space, and recipe handles | ICoreCommandSamples.cpp |
clearAllLogs | Clear all output logs | ICoreCommandSamples.cpp |
clearCommandHistory | Forget every command line recalled by the Up arrow, in this session and previous ones | ICoreCommandHistoryStore.cpp |
clearRecipeHandles | Clear all recipe handle bindings | ICoreCommandSamples.cpp |
clearVariablesSpace | Clear all variables from the variables space | ICoreCommandSamples.cpp |
cls | Clear the current output log | ICoreCommandSamples.cpp |
commandParityPrepare | — | ICoreCommandParityCommands.cpp |
diagramExportVerify | — | ICoreParityDiagramCommands.cpp |
diagramPrepare | — | ICoreParityDiagramCommands.cpp |
docsSample | — | ICoreDocsSampleCommands.cpp |
echo | Print the arguments back | ICoreCommandSamples.cpp |
exportVerify | — | ICoreParityCommands.cpp |
generateRecipe | Print a recipe script reproducing a subsystem's block diagram (default: Home) | ICoreCommandSamples.cpp |
getModelConfig | Print one simulation/solver setting: getModelConfig <property> | ICoreModelConfigCommands.cpp |
getName | — | ICoreModelConfiguratorCommands.cpp |
getName | — | ICoreModelConfiguratorCommands.cpp |
getName | — | ICoreModelConfiguratorCommands.cpp |
getSlowPaceStepDelay | Get the slow-pace step delay in milliseconds | ICoreModelConfiguratorCommands.cpp |
gitCommit | Stage everything and commit: gitCommit <message> (saves the diagram to .iproj first) | ICoreGitCommands.cpp |
gitFetch | Fetch every remote without merging | ICoreGitCommands.cpp |
gitInit | Initialize a git repository in the active project folder | ICoreGitCommands.cpp |
gitLog | Show the last N commits (default 30): gitLog [count] | ICoreGitCommands.cpp |
gitPull | Pull from origin; reloads the project from disk if new commits arrived | ICoreGitCommands.cpp |
gitPush | Push HEAD to origin, setting upstream if needed | ICoreGitCommands.cpp |
gitRemote | Print origin's URL | ICoreGitCommands.cpp |
gitRoot | Print the repository root, or fail if the project folder is not a repository | ICoreGitCommands.cpp |
gitSetRemote | Set origin's URL, or remove origin when called with no URL: gitSetRemote [url] | ICoreGitCommands.cpp |
gitStatus | Show the working-tree status (porcelain, with branch/upstream) | ICoreGitCommands.cpp |
glossary | List all commands, matrix functions, and syntax | ICoreCommandSamples.cpp |
guiBless | — | ICoreGuiRegressionCommands.cpp |
guiList | — | ICoreGuiRegressionCommands.cpp |
guiTest | — | ICoreGuiRegressionCommands.cpp |
help | List all registered commands | ICoreCommandEngine.cpp |
listName | — | ICoreModelConfiguratorCommands.cpp |
matlabExportScript | — | ICoreMatlabCommandBridge.cpp |
modelConfig | Print every simulation/solver setting and its current value | ICoreModelConfigCommands.cpp |
name | — | ICoreCommandEngine.cpp |
navigationRootAccess | Print whether the tree above Home (Root / Temp / ClipBoard / Trash) is reachable | ICoreNavigationCommands.cpp |
openTemplate | Open any template as a new project: openTemplate <id> [name] | ICoreTemplateCommands.cpp |
parityExport | — | ICoreParityCommands.cpp |
parityPrepare | — | ICoreParityCommands.cpp |
regress | — | ICoreConsoleRegressionCommands.cpp |
regressBless | — | ICoreConsoleRegressionCommands.cpp |
regressCoverage | — | ICoreConsoleRegressionCommands.cpp |
regressionList | — | ICoreRegressionCommands.cpp |
regressionTest | — | ICoreRegressionCommands.cpp |
regressList | — | ICoreConsoleRegressionCommands.cpp |
reverse | Reverse the given text | ICoreCommandSamples.cpp |
saveTemplate | Save the current diagram level as a reusable subsystem template: saveTemplate <name> | ICoreTemplateCommands.cpp |
setModelConfig | Set one simulation/solver setting: setModelConfig <property> <value> | ICoreModelConfigCommands.cpp |
setName | — | ICoreModelConfiguratorCommands.cpp |
setName | — | ICoreModelConfiguratorCommands.cpp |
setName | — | ICoreModelConfiguratorCommands.cpp |
setNavigationRootAccess | Show or hide the tree above Home: setNavigationRootAccess <on\|off> | ICoreNavigationCommands.cpp |
setSlowPaceStepDelay | Set the slow-pace step delay in milliseconds | ICoreModelConfiguratorCommands.cpp |
templates | List the ready-to-use diagram templates (optionally filtered by category or kind) | ICoreTemplateCommands.cpp |
tfestMethods | List the system-identification estimators tfest() accepts, with a summary of each | ICoreMathToolCommands.cpp |
timeSeriesDemo | Declare a demo time series in the variables space (default name: demoSignal) | ICoreCommandSamples.cpp |
toMatlab | — | ICoreMatlabCommandBridge.cpp |
trim-slashes | Strip leading/trailing slashes from a path | ICoreCommandSamples.cpp |
useTemplate | Insert a subsystem template into a diagram level: useTemplate <id> [parent] [x] [y] | ICoreTemplateCommands.cpp |
Recipe verbs#
Block-diagram statements, handled by ICoreRecipeInterpreter before the math grammar. These are what a .iscript template is written in (Template catalog — every .iscript).
| Verb | Signature | Meaning |
|---|---|---|
addPort | p = handle.addPort(in|out, type?, facing?) | Add a port to a block (type defaults to ICoreDouble; refused if that port list is private) |
applyStyle | linePathHandle.applyStyle(styleBlob) | Apply a ";"-joined ICoreChartLinePath::captureStyle blob (color, pen, visibility, ...) — round-trip, not meant for hand-authoring |
area | a? = area(parent?) | Create a canvas work area (parent defaults to Home) |
autoArrange | subsystemHandle.autoArrange() | Auto-arrange every block in a subsystem (handle must be a subsystem's block, as bound by subsystem()) |
block | handle = block(type, parent?) | Create a block (parent defaults to Home) and bind it to a handle |
chart | c = handle.chart() | Bind a handle to a block's attached chart (Scope-type blocks only) — behaves like a plot() chart handle |
clear | chartHandle.clear | Delete every line path on a chart |
clearAllSelections | selectionModelHandle.clearAllSelections | Drop everything a selection model currently holds |
clearDiagram | clearDiagram(parent?) | Permanently delete everything in a subsystem (defaults to Home) |
clearImage | imageHandle.clearImage | Drop an image holder's picture, back to the placeholder |
clearPorts | handle.clearPorts() | Delete every port on the block's non-private port lists |
commentOut | handle.commentOut | Comment out a block so it is excluded from the run |
connect | l? = connect(out<i>|branchHandle, in<j>) | Link an output port to an input port (operands may also be port handles), or — with a link-branch handle first — branch that link toward a free input port; l = ... binds the created (root) branch |
delete | handle.delete | Permanently delete a block, link branch, area, image or textbox (no trash, no undo); deleting a link's root branch deletes the whole link |
deselectArea | selectionModelHandle.deselectArea(areaHandle) | Remove a canvas area from a selection model |
deselectBlock | selectionModelHandle.deselectBlock(blockHandle) | Remove a block from a selection model |
deselectImage | selectionModelHandle.deselectImage(imageHandle) | Remove an image holder from a selection model |
deselectLinkBranch | selectionModelHandle.deselectLinkBranch(branchHandle) | Remove a link branch from a selection model |
deselectTextBox | selectionModelHandle.deselectTextBox(textboxHandle) | Remove a text box from a selection model |
disableFlushingTimer | chartHandle.disableFlushingTimer | Stop the auto-flush timer (flushing whatever is buffered once more first) |
disconnect | portHandle.disconnect | Detach the port from its link branch; the link stays, with that end left dangling |
duplicate | selectionModelHandle.duplicate(destination?, dx?, dy?) | Clone everything selected into a subsystem (destination defaults to Home), offsetting position by (dx, dy) (+y up, defaults to (0, 0)); clears the model's selection when done |
enableFlushingTimer | chartHandle.enableFlushingTimer | Start auto-flushing buffered points (from pushPoint) onto the chart every 100ms |
exportAsImage | chartHandle.exportAsImage(path) | Export a chart to a png/jpg image (format from the extension) |
exportAsPDF | chartHandle.exportAsPDF(path) | Export a chart to a PDF file |
exportAsSVG | chartHandle.exportAsSVG(path) | Export a chart to an SVG file |
exportDataCSV | chartHandle.exportDataCSV(path) | Export a chart's plotted data to a CSV file |
get | v? = handle.get(property) | Print one block property (name, path, x, y, width, ...); v = ... stores a numeric snapshot in the variables space |
getBufferWidth | chartHandle.getBufferWidth | Print a chart's streaming buffer width |
getConfig | v? = handle.getConfig(variableName) | Print one non-private block config variable; v = ... stores a numeric snapshot in the variables space |
getCorners | branchHandle.getCorners | Print a link branch's path corners in the same '(x, y), ...' form setCorners accepts |
getText | textboxHandle.getText | Print a text box's text |
getTitle | areaHandle.getTitle | Print a canvas area's title bar text |
hideName | handle.hideName | Hide the name label drawn under a block |
holdOn | chartHandle.holdOn(matrix) | Plot another matrix onto an existing chart, keeping its current lines |
image | i? = image(parent?) | Create an image holder (parent defaults to Home) |
info | handle.info | Print the block's full property sheet |
inputPort | p = handle.inputPort(i) | Bind a handle to a block's existing input port [i], or chain a port method: handle.inputPort(i).disconnect() |
isInfiniteStreaming | chartHandle.isInfiniteStreaming | Print whether infinite streaming is on for a chart |
listConfig | handle.listConfig | Print the block's non-private config variables |
loadImage | imageHandle.loadImage(path) | Load a picture from disk into an image holder (quotes optional) |
migrate | selectionModelHandle.migrate(destination?, dx?, dy?) | Move everything selected into a subsystem (destination defaults to Home), offsetting position by (dx, dy) (+y up, defaults to (0, 0)); clears the model's selection when done |
move | handle.move(x, y) | Move a block, area, image or textbox relative to the origin anchor (+y is up) |
optimizeLinks | subsystemHandle.optimizeLinks() | Re-run the link path optimizer over every block in a subsystem (handle must be a subsystem's block, as bound by subsystem()) |
outputPort | p = handle.outputPort(i) | Bind a handle to a block's existing output port [i], or chain a port method: handle.outputPort(i).disconnect() |
path | p? = chartHandle.path(i) | Bind a handle to one of a chart's existing line paths |
plot | c? = plot(matrix) | plot(x, y) | plot(series) | Create a standalone chart window and plot into it: a matrix (vector against index, or each column past the first as its own line against column 0), two equal-length x/y vectors, or a time series (against its recorded time, one line per channel); does not touch the block diagram |
pushPoint | linePathHandle.pushPoint(x, y) | Buffer one point onto a line path (pair with the chart's enableFlushingTimer to see it appear) |
removePort | handle.removePort(portHandleOrName) | Delete one port from a block (refused if that port list is private) |
rename | handle.rename(newName) | Rename a block (name must be unique, no special characters) |
resize | handle.resize(width, height) | Set the width and height of a block, area, image or textbox |
rotate | handle.rotate(angle) | Set a block's rotation in degrees |
selectArea | selectionModelHandle.selectArea(areaHandle) | Add a canvas area to a selection model (refused if not a sibling of the model's current selection) |
selectBlock | selectionModelHandle.selectBlock(blockHandle) | Add a block to a selection model (refused if not a sibling of the model's current selection) |
selectImage | selectionModelHandle.selectImage(imageHandle) | Add an image holder to a selection model (refused if not a sibling of the model's current selection) |
selectionModel | s = selectionModel() | Create a standalone canvas selection model (not tied to any canvas/tab, does not touch the diagram); the handle must be bound |
selectLinkBranch | selectionModelHandle.selectLinkBranch(branchHandle) | Add a link branch to a selection model (the whole link if it's the root branch); refused if not a sibling of the model's current selection |
selectTextBox | selectionModelHandle.selectTextBox(textboxHandle) | Add a text box to a selection model (refused if not a sibling of the model's current selection) |
setAxisFont | chartHandle.setAxisFont(x|y, fontBlob) | Set an axis label's font from a ";"-joined ICoreStudioStaticCommands::serializeFont blob (round-trip, not meant for hand-authoring) |
setColor | areaHandle.setColor(r, g, b[, a] | nameOrHex) | Set a canvas area's color (0-255 channels, or a named/#rrggbb color) |
setConfig | handle.setConfig(variableName, value) | Set a non-private block config variable |
setCorners | branchHandle.setCorners((x1, y1), (x2, y2), ...) | Set a link branch's path corners (at least 2), relative to the origin anchor (+y is up, like move) |
setDescription | portHandle.setDescription(text) | Set a port's description label (empty text clears it) |
setInfiniteStreaming | chartHandle.setInfiniteStreaming(true|false) | Toggle whether a chart keeps only the last getBufferWidth() points per line |
setMovingWindowWidth | chartHandle.setMovingWindowWidth(n) | Set how many points a streaming chart keeps per line |
setPathName | linePathHandle.setPathName(text) | Rename a chart line path |
setText | textboxHandle.setText(text) | Set a text box's text (quotes optional; empty clears) |
setTitle | areaHandle.setTitle(text) | Set a canvas area's title bar text (quotes optional) |
showName | handle.showName | Show the name label under a block again |
subsystem | handle = subsystem(parent?) | Create a subsystem (parent defaults to Home); the handle binds to its block |
textbox | t? = textbox(parent?) | Create a canvas text box (parent defaults to Home) |
uncomment | handle.uncomment | Re-include a commented-out block in the run |
xlabel | chartHandle.xlabel(text) | Set a chart's X-axis label |
ylabel | chartHandle.ylabel(text) | Set a chart's Y-axis label |
Matrix functions#
From ICoreExpressionEvaluator::functions() — usable in any expression the console or a config field evaluates.
| Function | Signature | Meaning |
|---|---|---|
transpose | transpose(A) | Transpose of A (same as A') |
inv | inv(A) | Inverse of a square matrix A |
pinv | pinv(A) | Moore-Penrose pseudo-inverse of A |
det | det(A) | Determinant of a square matrix A |
trace | trace(A) | Sum of the diagonal of a square matrix A |
cond | cond(A) | Condition number (max/min singular value) |
sqrtm | sqrtm(A) | Principal matrix square root (square A) |
chol | chol(A) | Cholesky lower factor L, A = L*L^T (SPD A) |
null | null(A) | Basis for the null space of A |
eig | eig(A|sys) | Eigenvalues of a matrix or state-space model |
eigvec | eigvec(A) | Eigenvectors of a square matrix A (real part) |
expm | expm(A) | Matrix exponential (square A) |
logm | logm(A) | Matrix logarithm (square A) |
rank | rank(A) | Numerical rank of A |
solve | solve(A,b) | Solve A*x = b |
diag | diag(A) | Vector -> diagonal matrix; matrix -> its diagonal as a vector |
kron | kron(A,B) | Kronecker product of A and B |
dot | dot(a,b) | Dot product of two equal-shaped matrices/vectors |
cross | cross(a,b) | Cross product of two 3x1 vectors |
pow | pow(A,n) | Element-wise power A.^n |
qrq | qrq(A) | QR decomposition: orthogonal factor Q |
qrr | qrr(A) | QR decomposition: upper-triangular factor R |
lul | lul(A) | LU decomposition: lower factor L (square A) |
luu | luu(A) | LU decomposition: upper factor U (square A) |
lup | lup(A) | LU decomposition: permutation matrix P, P*A = L*U |
svdu | svdu(A) | SVD: left singular vectors U |
svds | svds(A) | SVD: singular values as a column vector |
svdv | svdv(A) | SVD: right singular vectors V |
ldltl | ldltl(A) | LDLT decomposition: unit lower factor L (symmetric A) |
ldltd | ldltd(A) | LDLT decomposition: diagonal D as a column vector |
ldltp | ldltp(A) | LDLT decomposition: permutation matrix P, P^T*L*diag(D)*L^T*P = A |
issymmetric | issymmetric(A) | 1 if A is symmetric, else 0 |
ispd | ispd(A) | 1 if A is symmetric positive-definite, else 0 |
abs | abs(A) | Element-wise absolute value |
exp | exp(A) | Element-wise exponential |
log | log(A) | Element-wise natural logarithm |
sqrt | sqrt(A) | Element-wise square root |
sin | sin(A) | Element-wise sine (radians) |
cos | cos(A) | Element-wise cosine (radians) |
tan | tan(A) | Element-wise tangent (radians) |
emin | emin(A,B) | Element-wise minimum (B may be a scalar) |
emax | emax(A,B) | Element-wise maximum (B may be a scalar) |
clamp | clamp(A,lo,hi) | Clamp every element of A into [lo,hi] |
mpower | mpower(A,n) | Matrix power A^n (integer n; negative uses inverse) |
gt | gt(A,B) | Element-wise A > B |
lt | lt(A,B) | Element-wise A < B |
ge | ge(A,B) | Element-wise A >= B |
le | le(A,B) | Element-wise A <= B |
eq | eq(A,B) | Element-wise A == B (tolerance-based) |
ne | ne(A,B) | Element-wise A != B (tolerance-based) |
rand | rand(r,c) | r x c matrix, uniform random in [0,1) |
randn | randn(r,c) | r x c matrix, standard normal random |
sum | sum(A) | Sum of all elements of A |
mean | mean(A) | Mean of all elements of A |
max | max(A) | Largest element of A |
min | min(A) | Smallest element of A |
normfro | normfro(A) | Frobenius norm |
normrms | normrms(A) | RMS norm |
norm1 | norm1(A) | 1-norm (max absolute column sum) |
norm2 | norm2(A) | 2-norm (largest singular value, power iteration) |
norminf | norminf(A) | Infinity norm (max absolute row sum) |
nucnorm | nucnorm(A) | Nuclear norm (sum of singular values) |
sumrows | sumrows(A) | Sum of each row, as a column vector |
sumcols | sumcols(A) | Sum of each column, as a row vector |
meanrows | meanrows(A) | Mean of each row, as a column vector |
meancols | meancols(A) | Mean of each column, as a row vector |
maxrows | maxrows(A) | Largest element of each row, as a column vector |
maxcols | maxcols(A) | Largest element of each column, as a row vector |
minrows | minrows(A) | Smallest element of each row, as a column vector |
mincols | mincols(A) | Smallest element of each column, as a row vector |
cumsum | cumsum(A) | Cumulative sum (down columns, or along a row vector) |
cumprod | cumprod(A) | Cumulative product (down columns, or along a row vector) |
reshape | reshape(A,r,c) | Reshape A into r x c, same element order |
flipud | flipud(A) | Flip A vertically (reverse row order) |
fliplr | fliplr(A) | Flip A horizontally (reverse column order) |
repmat | repmat(A,r,c) | Tile A r times vertically, c times horizontally |
linspace | linspace(a,b,n) | n evenly spaced points from a to b, as a column vector |
logspace | logspace(a,b,n) | n points spaced logarithmically from 10^a to 10^b |
cov | cov(A) | Covariance matrix of A's columns (rows = observations) |
corr | corr(A) | Correlation matrix of A's columns |
normalize | normalize(v) | Unit vector v / \|\|v\|\| |
angle | angle(a,b) | Angle between two vectors, in radians |
lyap | lyap(A,Q) | Continuous Lyapunov: solves A*X + X*A' + Q = 0 |
dlyap | dlyap(A,Q) | Discrete Lyapunov: solves A*X*A' - X + Q = 0 |
sylvester | sylvester(A,B,C) | Solves A*X + X*B = C |
care | care(A,B,Q,R) | Continuous algebraic Riccati equation: A'X+XA-XBR^-1B'X+Q=0 (LQR gain design) |
dare | dare(A,B,Q,R) | Discrete algebraic Riccati equation: A'XA-X-A'XB(R+B'XB)^-1B'XA+Q=0 (LQR gain design) |
fft | fft(x) | Discrete Fourier transform; returns the N x 2 [real,imag] spectrum |
ifft | ifft(X) | Inverse DFT of an N x 2 [real,imag] spectrum -> time-domain signal |
fftmag | fftmag(x) | Magnitude of fft(x) |
fftphase | fftphase(x) | Phase (radians) of fft(x) |
interp1 | interp1(x,y,xq[,degree]) | Spline-interpolate y=f(x) at query points xq (default cubic) |
quatfromaxisangle | quatfromaxisangle(axis,angle) | Quaternion from a rotation axis and angle (radians) |
quatfromeuler | quatfromeuler(yaw,pitch,roll) | Quaternion from ZYX Euler angles (radians) |
quat2rotm | quat2rotm(q) | Quaternion to 3x3 rotation matrix |
rotm2quat | rotm2quat(R) | 3x3 rotation matrix to quaternion |
quat2euler | quat2euler(q) | Quaternion to ZYX Euler angles (radians) |
quatmul | quatmul(q1,q2) | Hamilton product q1*q2 (compose rotations) |
quatconj | quatconj(q) | Quaternion conjugate |
quatinv | quatinv(q) | Quaternion inverse |
quatnormalize | quatnormalize(q) | Unit-normalize a quaternion |
quatslerp | quatslerp(q1,q2,t) | Spherical linear interpolation, t in [0,1] |
rotatevector | rotatevector(q,v) | Rotate 3x1 vector v by quaternion q |
tfest | tfest(u,y,numOrder,denOrder,Ts[,"method"]) | Fit a discrete transfer function of given order to input/output data; the optional method names one of the 10 estimators (see tfestMethods) |
tfestfit | tfestfit(u,y,numOrder,denOrder,Ts[,"method"]) | NRMSE fit percentage of that same estimate (100 = exact) |
simtf | simtf(tf,u) | Simulate discrete transfer function tf's response to input u |
gradient | gradient("expr",x0) | Central-difference gradient of a scalar expression (vars x1..xn) at x0 |
poly | poly([..]) | Polynomial from descending coefficients |
tf | tf(num,den[,Ts]) | Transfer function from coefficient vectors |
ss | ss(A,B,C,D[,Ts]) | State-space model from matrices |
timeSeries | timeSeries(time,values) | Time series from an N-element time vector and an N x M value matrix |
time | series.time() | Time vector of a time series, as an N x 1 matrix |
values | series.values() | Value block of a time series, as an N x M matrix |
tf2ss | tf2ss(G) | State-space realization of a transfer function |
ss2tf | ss2tf(sys) | Transfer function of a SISO state-space model |
roots | roots(p) | Roots of a polynomial / coefficient vector |
poles | poles(G|sys) | Poles of a transfer function or state-space model |
zeros | zeros(G) | Zeros of a transfer function |
dcgain | dcgain(G) | DC gain of a transfer function |
isstable | isstable(G|p) | 1 if stable, else 0 |
ctrb | ctrb(sys) | Controllability matrix |
obsv | obsv(sys) | Observability matrix |
bode | bode(G,wStart,wEnd,n) | Nx3 [omega, magnitude_dB, phase] logarithmic frequency sweep |
nyquist | nyquist(G,wStart,wEnd,n) | Nx2 [real, imag] of G(jw) over a logarithmic frequency sweep |
rootlocus | rootlocus(G,gains) | Closed-loop poles under unity feedback, swept over gains (Nx2 [real,imag]) |
step | step(G[,duration[,points]]) / G.step(...) | Step response as a time series (ZOH-sampled if G is continuous); no duration picks one from the poles |
impulse | impulse(G[,duration[,points]]) / G.impulse(...) | Impulse response as a time series (unit-area Dirac if G is continuous); no duration picks one from the poles |
ramp | ramp(G[,duration[,points]]) / G.ramp(...) | Ramp response as a time series; no duration picks one from the poles |
polezero | G.polezero() | Plot poles and zeros on one complex plane (plot-only; use poles()/zeros() for values) |
butterlp | butterlp(order,cutoffHz,fsHz) | Discrete Butterworth lowpass transfer function |
butterhp | butterhp(order,cutoffHz,fsHz) | Discrete Butterworth highpass transfer function |
butternotch | butternotch(order,centerHz,bandwidthHz,fsHz) | Discrete Butterworth band-stop (notch) transfer function |