how to differentiation code,?
4 ビュー (過去 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!