Using z-transform to solve the capacitor current, but I don't know where I went wrong.

2 次查看(过去 30 天)
Take the simplest capacitive current as an example,,C is capacitance.
The corresponding transfer function is
Applying bilinear transformation
,,T is sampling time
The inverse transformation yields
,n is nth sampling moment.
Assuming the voltage input is known , is calculation step
Since index values in matlab start from 1,.
%%%%%%%%%%%%%%%
deltat=1e-3; %calculation step
T=50e-6; %sampling time
C=100e-3; %capacitance
t=0:deltat:1;
k=2/T;
i=[];
i(1)=0;
u=sin(2*pi*50*t);
for n=1:1000
i(n+1)=C*k*u(n+1)-C*k*u(n)-i(n);
end
plot(t,i)
%%%%%%%%%%%%%%%
The code resulted is this,quite different from simulink result.
The questions I want to ask are:
1, Where is the formula derivation wrong?
2, If I want to change the index value to start from 0, how can I change the code without any error?

回答(1 个)

Shishir Reddy
Shishir Reddy 2024-8-30
Hi xin
When dealing with discrete data, plotting directly will inherently produce a step-like appearance. If the objective is to accurately reflect the continuous-time behaviour of the system, numerical integration methods should be considered that simulate continuous-time behaviour.
For a capacitor, the relationship between current i(t) and voltage u(t) is given by the differential equation: i(t) = C* (du/dt).
To solve a differential equation numerically, MATLAB's built-in numerical solvers like ode45, which are designed to handle ordinary differential equations (ODEs) can be used.
For detailed information regarding the ode45 solver, kindly refer the following documentation. https://www.mathworks.com/help/matlab/ref/ode45.html
This can be implemented as follows.
C = 100e-3;
T = 0.5;
f = 50;
u = @(t) sin(2 * pi * f * t);
differentialEquation = @(t, i) C * (2 * pi * f * cos(2 * pi * f * t)); % dy/dt = C * du/dt = C * (du/dt)
i0 = 0; % Initial condition for the current
tspan = [0 T];
[t, i] = ode45(differentialEquation, tspan, i0); % Solving the differential equation using ode45
plot(t, i);
title('Capacitive Current (Continuous-Time Simulation)');
xlabel('Time (s)');
ylabel('Current (A)');
ylim([-0.1 0.1])
By using ode45, the continuous-time behaviour of the capacitor can be simulated without manually discretizing the system, resulting in a smooth and accurate representation of the current.
I hope this helps.

类别

Help CenterFile Exchange 中查找有关 Programming 的更多信息

产品


版本

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by