- While your code snippet doesn't show the data length (t), consider increasing it. A longer data sequence can provide the IV method with more information for reliable coefficient estimation.
- The code uses a PRBS signal with 7 transitions ([0, 1/7]). Explore different PRBS orders (number of transitions) to see if it affects stability. A higher order PRBS might provide richer excitation across the frequency range.
- The code calculates noise based on the signal and desired SNR. Ensure your noise level (b) accurately reflects the actual noise characteristics in your system. Consider alternative noise generation methods if needed.
- The code uses "iv4([2 2 1])" for order selection. Experiment with different numerator (na), denominator (nb), and instrument (nk) orders to find a combination that best captures the system dynamics.
Problème avec l'utilisation de la fonction iv4() , méthode de la variable instrumentale
1 view (last 30 days)
Show older comments
Bonjour,
Je travaille actuellement sur un projet d'identification d'un système simple. Le projet se déroule en plusieurs étapes :
- Simulation d'un système continu de type circuit RLC.
- Discrétisation de la fonction de transfert associée au système.
- Récupération de la sortie temporelle yyy à l'aide de la fonction lsim sous MATLAB.
- Ajout d'un bruit gaussien sur les échantillons de sortie.
- Estimation des coefficients de la fonction de transfert discrétisée en utilisant la méthode des variables instrumentales (IV).
Je rencontre un problème avec la dernière étape. Chaque fois que je relance le code sous MATLAB, les coefficients que je retrouve avec la methode IV varient considérablement. Pour analyser ce comportement, j'ai effectué un test de Monte Carlo afin d'estimer l'écart type des coefficients à travers plusieurs essais. Les résultats montrent que cet écart type est très élevé.
Normalement, la méthode IV est censée dé-corréler le bruit de la sortie pour permettre une estimation stable des coefficients. Il est donc étrange d'observer de grandes variations entre chaque test.
Voici un extrait du code que j'utilise :
%% Paramètres de discrétisation
Ts = 0.01;
t = 0:Ts:10;
%% Boucle Monte Carlo pour plusieurs réalisations
num_realizations = 100; % Nombre de réalisations Monte Carlo
p = tf('s');
for i = 1:num_realizations
% Génération du signal PRBS
u = idinput(length(t), 'prbs', [0, 1/7]); % PRBS avec 7 changements
% Fonction de Transfert du Circuit RLC Série
FT_RLC_circuit = 1 / (L*C*p^2 + R*C*p + 1);
% Simulation du système
Y_RLC_MC = lsim(FT_RLC_circuit, u, t);
% Ajout de bruit gaussien avec un SNR donné
SNR = 15;
e = randn(size(Y_RLC_MC));
k = sqrt( (Y_RLC_MC'*Y_RLC_MC) / (e'*e)) * 10^(-SNR/20);
b = k * e;
Y_noisy = Y_RLC_MC + b;
% Identification du modèle avec méthode instrumentale (IV4)
Sys = iv4(u,Y_noisy, [2 2 1]); %ordres choisis [na nb nk]
% Extraction des coefficients du numérateur et du dénominateur
[num_iv, den_iv] = tfdata(Sys, 'v');
% Sauvegarde des coefficients dans une structure ou un fichier
results(i).numerator = num_iv;
results(i).denominator = den_iv;
end
0 Comments
Answers (1)
UDAYA PEDDIRAJU
on 9 Jul 2024
Hi Elouan,
I understand you're encountering significant variations in IV method coefficient estimates within your MATLAB code for RLC system identification. Here are some areas to investigate to improve stability:
By addressing these factors and potentially refining your code based on points stated, you should be able to achieve more stable and consistent IV coefficient estimates.
0 Comments
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!