how to differentiation code,?
3 次查看(过去 30 天)
显示 更早的评论
i want to wirte x*(1+s) into matlab function block in c code
wher x is input signal and s - is s laplace i.e. use for differentation in matlab
please help
0 个评论
回答(1 个)
Benjamin Thompson
2022-2-1
编辑:Benjamin Thompson
2022-2-1
If you have x as sampled signal in time, differentiation is easy: (x(t2) - x(t1)) / (t2 - t1)
7 个评论
Benjamin Thompson
2022-2-2
LaPlace notation is used for convenience to work with differential equations algebraically, for analysis or simplification, solving for parameters, etc. If you want a time based numerical solution to a differential or difference equation, you must convert to the time representation. In the case of differentiation that is fairly trivial.
Walter Roberson
2022-2-3
For any given numeric k, you can construct the numeric tf(), and use c2d() to find the equivalent discrete transfer function, the coefficients of which can be used to filter()
I just spent a while tracing through c2d, as I expected that there might be a relatively simple conversion for this case of 1/(k*s+1) .
Unfortunately, the internal construction of ss form involves a 2^round(log2(sqrt(1/k))) to construct a scaling factor, which makes the conversion a bit more complicated.
I kept looking through anyhow, thinking that at least in theory that might not be necessary, that you might be able to proceed with state space a=-1/k, b = 1, c = 1/k, d = 0, e = [] .
Sadly, inside the routine to discretize from zero order hold, there is a call to the undocumented mex routine matscale
I see hints that maybe you could use
Phi = exp(-Ts/k)
Gamma = k - k*exp(-Ts/k)
and
x[n+1] = Phi * x[n] + Gamma * u[n]
but I am not sure how that would translate into filter() or conv()
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!