represents the single-input, single-output model of a zero-order hold.
HolderModel[specs]
represents a holder with specifications specs.
HolderModel
represents the single-input, single-output model of a zero-order hold.
HolderModel[specs]
represents a holder with specifications specs.
Details
- HolderModel is known as zero-order hold (ZOH), first-order hold (FOH) and inverse sampling.
- HolderModel is typically used to convert a discrete-time signal coming from a digital microcontroller or a digital signal processor to a continuous-time signal used when actuating in the physical world or with a model of the physical world.
- A holder is the model of an operation that takes a discrete-time signal
defined for integers and generates a continuous-time signal
, where
is the sampling period. This holds the value constant between samples. - The specification spec is an association and can have the following keys:
-
"InputVariables" {u[t]} input variables "Order" 0 hold order, a non-negative integer "OutputVariables" {y[t]} output variables "SamplingPeriod" 1 sampling period "SignalCount" 1 number of inputs and outputs "TemporalVariable" t temporal variable - The "Order" property specifies the order of the extrapolation to use. An order
extrapolator uses the
previous points to derive an interpolating polynomial of degree
. This polynomial is then used to extrapolate the value over the next sampling period. - HolderModel[…]["prop"] can be used to obtain various properties of the model.
- The value of "prop" can be any of the keys in spec and the following:
-
"Properties" list of property names "PropertyAssociation" property names and values as an association "PropertyDataset" property names and values as a dataset {p1,p2,…} values of properties pi
Examples
open all close allBasic Examples (2)
A zero-order hold (ZOH) model:
HolderModel[]%["PropertyDataset"]Simulate the response of a ZOH to a sinusoidal input:
r = InputOutputResponse[HolderModel[], Table[Sin[t], {t, 0, 3π}]]Plot the response and the input sequence:
Show[Plot[r, {, 0, 3π}], ListPlot[Table[{t, Sin[t]}, {t, 0, 3π}], IconizedObject[«opts»]]]Scope (9)
HolderModel[]HolderModel[<|"Order" -> 1|>]A hold with custom properties:
HolderModel[<|"InputVariables" -> u[t], "OutputVariables" -> y[t], "TemporalVariable" -> t|>]%["Dataset"]List all available properties:
HolderModel[Association["DiscreteVariables" -> {Subscript[, 1][t]}, "InputVariables" -> {u[t]},
"OutputVariables" -> {y[t]}, "InitialStateValues" -> {}, "TemporalVariable" -> t,
"WhenEvent" -> Mod[t, 1] == 0, "WhenEventAction" -> {Subscript[ ... tion", "StateEquations",
"OutputExpressions", "SignalCount", "Type", "PropertyFunction", "Order", "SamplingPeriod",
"SummaryItems"}], {"InputVariables", "Order", "OutputVariables", "SamplingPeriod",
"SignalCount", "TemporalVariable"}]["Properties"]HolderModel[Association["DiscreteVariables" -> {Subscript[, 1][t]}, "InputVariables" -> {u[t]},
"OutputVariables" -> {y[t]}, "InitialStateValues" -> {}, "TemporalVariable" -> t,
"WhenEvent" -> Mod[t, 1] == 0, "WhenEventAction" -> {Subscript[ ... tion", "StateEquations",
"OutputExpressions", "SignalCount", "Type", "PropertyFunction", "Order", "SamplingPeriod",
"SummaryItems"}], {"InputVariables", "Order", "OutputVariables", "SamplingPeriod",
"SignalCount", "TemporalVariable"}]["SamplingPeriod"]HolderModel[Association["DiscreteVariables" -> {Subscript[, 1][t]}, "InputVariables" -> {u[t]},
"OutputVariables" -> {y[t]}, "InitialStateValues" -> {}, "TemporalVariable" -> t,
"WhenEvent" -> Mod[t, 1] == 0, "WhenEventAction" -> {Subscript[ ... tion", "StateEquations",
"OutputExpressions", "SignalCount", "Type", "PropertyFunction", "Order", "SamplingPeriod",
"SummaryItems"}], {"InputVariables", "Order", "OutputVariables", "SamplingPeriod",
"SignalCount", "TemporalVariable"}][{"Order", "SignalCount"}]Obtain the properties as an association:
HolderModel[Association["DiscreteVariables" -> {Subscript[, 1][t]}, "InputVariables" -> {u[t]},
"OutputVariables" -> {y[t]}, "InitialStateValues" -> {}, "TemporalVariable" -> t,
"WhenEvent" -> Mod[t, 1] == 0, "WhenEventAction" -> {Subscript[ ... tion", "StateEquations",
"OutputExpressions", "SignalCount", "Type", "PropertyFunction", "Order", "SamplingPeriod",
"SummaryItems"}], {"InputVariables", "Order", "OutputVariables", "SamplingPeriod",
"SignalCount", "TemporalVariable"}]["PropertyAssociation"]HolderModel[Association["DiscreteVariables" -> {Subscript[, 1][t]}, "InputVariables" -> {u[t]},
"OutputVariables" -> {y[t]}, "InitialStateValues" -> {}, "TemporalVariable" -> t,
"WhenEvent" -> Mod[t, 1] == 0, "WhenEventAction" -> {Subscript[ ... tion", "StateEquations",
"OutputExpressions", "SignalCount", "Type", "PropertyFunction", "Order", "SamplingPeriod",
"SummaryItems"}], {"InputVariables", "Order", "OutputVariables", "SamplingPeriod",
"SignalCount", "TemporalVariable"}]["PropertyDataset"]Simulate the response of a first-order hold to a sinusoidal sequence:
Short[r1 = InputOutputResponse[HolderModel[<|"Order" -> 1|>], Table[Sin[t], {t, 0, 2.5π}]]]Plot the response and the sequence:
Show[Plot[r1, {, 0, 2.5π}, PlotRange -> All], ListPlot[Table[{t, Sin[t]}, {t, 0, 2.5π}], IconizedObject[«opts»]]]Decrease the sampling period to obtain a better approximation of the sinusoid:
Short[r2 = InputOutputResponse[HolderModel[<|"Order" -> 1, "SamplingPeriod" -> 0.5|>], Table[Sin[t], {t, 0, 2.5π, 0.5}]]]Plot the response and the input sequence of the better approximation:
Show[Plot[r2, {, 0, 2.5π}, PlotRange -> All], ListPlot[Table[{t, Sin[t]}, {t, 0, 2.5π, 0.5}], IconizedObject[«opts»]]]The lower sampling period results in a better approximation:
NIntegrate[Abs /@ {Sin[] - r1[[1]], Sin[] - r2[[1]]}, {, 0, 2.5π}]Applications (1)
A holder model is a subsystem of a sampled data system:
csys = SystemsConnectionsModel[{TransferFunctionModel[{{{1.}}, (1 + s)^3}, s],
TransferFunctionModel[{{{4.539074548064891 - 9.145098981931369* + 4.606282997931085*^2}},
{{0.23358983848622455 - 0.5071796769724491* + 0.2735898384862246*^2}}}, , ... ummaryItems"}], {"InputVariables", "OutputVariables", "SamplingPeriod", "SignalCount",
"TemporalVariable"}]}, {{4, 1} -> {3, 1}, {3, 1} -> {2, 1}, {2, 1} -> {5, 1}, {5, 1} -> {1, 1},
{1, 1} -> {6, 1}, {6, 1} -> {3, 2}}, {{4, 1}}, {{1, 1}}];r = InputOutputResponse[csys, 1, {t, 0, 10}]Plot[r, {t, 0, 10}]Properties & Relations (3)
A sampler model is essentially a time-based action:
u = Tanh[t];
sp = 0.5;The response based on WhenEvent:
r1 = NDSolveValue[{WhenEvent@@{Mod[t, sp] == 0, y[t] -> u}, y[0] == 0, Derivative[1][$][t] == 0, $[0] == 0}, y[t], {t, 0, 5}, DiscreteVariables -> {y[t]}]The response of sampler model:
r2 = InputOutputResponse[SamplerModel[<|"SamplingPeriod" -> sp|>], u, {t, 0, 5}]Plot[{r1, r2}, {t, 0, 5}, PlotRange -> All]A first-order hold is based on a linear interpolation of the current and previous input values:
u = Tanh[t];
sp = 0.5;The variable
is the current input value,
is the previous input value and
is the total time elapsed:
action = {Subscript[x, 1][t], Subscript[x, 2][t], 𝒯[t]} -> {u, Subscript[x, 1][t], 𝒯[t] + sp};The discrete variables
,
and
are updated at each sampling instant:
we = WhenEvent@@{Mod[t, sp] == 0, action}Solve for the slope
and intercept
of the linear interpolation:
sol = Solve[{Subscript[x, 1][t] == m 𝒯[t] + c, Subscript[x, 2][t] == m(𝒯[t] - sp) + c}, {m, c}]out = m t + c /. sol//Simplifyr1 = NDSolveValue[{we, Derivative[1][$][t] == 0, $[0] == 0, Subscript[x, 1][0] == 0, Subscript[x, 2][0] == 0, 𝒯[0] == 0}, out, {t, 0, 5}, DiscreteVariables -> {Subscript[x, 1][t], Subscript[x, 2][t], 𝒯[t]}]The solution using the holder model:
r2 = InputOutputResponse[HolderModel[<|"SamplingPeriod" -> sp, "Order" -> 1|>], u, {t, 0, 5}]Plot[{r1, r2}, {t, 0, 5}, PlotRange -> All]A holder model inverses the operation of a sampler model:
f = 3;
u = Sech[f t];
sp = 1 / ( 50f);A sampler model in series with a holder model:
sys = SystemsConnectionsModel[{SamplerModel[<|"SamplingPeriod" -> sp|>], HolderModel[<|"SamplingPeriod" -> sp|>]}, {{1, 1} -> {2, 1}}, {{1, 1}}, {{2, 1}}]The output signal is the same as the input signal:
InputOutputResponse[sys, u, {t, 0, π}];
Plot[{u, %[[1]]}, {t, 0, π}, PlotRange -> All]See Also
Related Guides
History
Text
Wolfram Research (2024), HolderModel, Wolfram Language function, https://reference.wolfram.com/language/ref/HolderModel.html.
CMS
Wolfram Language. 2024. "HolderModel." Wolfram Language & System Documentation Center. Wolfram Research. https://reference.wolfram.com/language/ref/HolderModel.html.
APA
Wolfram Language. (2024). HolderModel. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/HolderModel.html
BibTeX
@misc{reference.wolfram_2026_holdermodel, author="Wolfram Research", title="{HolderModel}", year="2024", howpublished="\url{https://reference.wolfram.com/language/ref/HolderModel.html}", note=[Accessed: 12-June-2026]}
BibLaTeX
@online{reference.wolfram_2026_holdermodel, organization={Wolfram Research}, title={HolderModel}, year={2024}, url={https://reference.wolfram.com/language/ref/HolderModel.html}, note=[Accessed: 12-June-2026]}