optimización de ltspice matlab

1

¿Alguien ha usado ltspiceIV en un proceso de optimización usando Matlab? Necesito retroalimentación porque estoy ejecutando mi circuito en análisis transitorios, y cuando encontré el punto óptimo de mi optimización, lo ejecuté de nuevo pero solo (no en el ciclo de optimización) y no obtengo los mismos valores. Además, en un bucle for, obtengo un valor de NaN (no un número) en mis resultados. ¿Ltspice es adecuado para la optimización?

Trabajo en modelado de máquinas eléctricas. Está modelando la máquina utilizando un circuito magnético equivalente (que parece un circuito eléctrico con resistencia y fuente). Entonces estoy usando ltspice junto con matlab para resolver este circuito. Creo mi lista de redes usando matlab, resuelvo usando ltspice, recojo los resultados de archivos .raw utilizando un programa matlab y proceso los resultados usando también matlab. Funciona hasta ahora. (el final de la pregunta después de eso)

Estoy haciendo optimización, así que necesito repetir una y otra vez el ltspice hasta que el algoritmo encuentre el punto óptimo. ¿Quiero saber si este proceso de ejecución de tiempo múltiple (a través de la optimización o "for loop") es adecuado para ltspice? Descubrí que puede darme resultados falsos o que no los computa en ciertos momentos (obtengo los valores de NaN (no un número)).

En mi circuito, hay muchas fuentes controladas, subcircuitos, inductancias y resistencias.

    
pregunta A. S-S

2 respuestas

1

Aquí hay un código para ejecutar un sim de matlab. Una opción sería generar un archivo de lista de red desde .asc y ejecutarlo desde el símbolo del sistema, incluso podría cambiar el archivo de lista de red desde matlab y agregar, eliminar componentes o en los valores de cambio mínimo.

Otra idea que he tenido es que también puedes hacer esto con las listas de red y escribir las listas de red de matlab e incluso hacer la optimización genética con los circuitos haciendo que matlab escriba el circuito por ti, luego ejecutarlo y luego verificar el resultado en matlab .

De todos modos, aquí está el código, cambié algunos nombres y usted no tiene los archivos .asc ni las redes de escritura, por lo que el código necesitará una revisión, pero aquí hay un ejemplo de cómo obtener el código.

También necesitará la función Ltspice2Matlab dentro del alcance de este código. Una ventaja es que no creo que la función genere a Nan y tenga una buena base de tiempo que devuelva. Si lo hace, simplemente puede reemplazar el Nan con el valor anterior o el promedio del valor anterior y el siguiente valor utilizando isnan

status1 = system('C:\...\LTspiceIV\scad3.exe -Run -b blah.asc')

comparerun = LTspice2Matlab('blah.raw');

status2 = system('C:\...\LTspiceIV\scad3.exe -Run -b blah2.asc')

comparerun2 = LTspice2Matlab('blah2.raw');

%get some data from netlists out of the raw file
cVres = comparerun.variable_mat(find(strcmp(comparerun.variable_name_list,'V(one)')),:); 
cVzerostage = comparerun.variable_mat(find(strcmp(comparerun.variable_name_list,'V(two)')),:);
cVthree= comparerun.variable_mat(find(strcmp(comparerun.variable_name_list,'V(three)')),:);


% figure;plot(baserun.time_vect,Vthree)


ylabt = 'Voltage';
tittx = 'title goes here';
h = figure;subplot(20,1,1:12),plot(Vres,cVthree),hold on,plot(cVres,cVthree,'r')
legend('Origonal Run','Compare Run');
title(tittx);
xlabel('xlabel')
ylabel(ylabt);

% if you want to compare the two runs with a residual
interpV4thstage = interp1(comparerun.time_vect,cVthree,baserun.time_vect);
subplot(20,1,17:20),plot(Vres,Vthree-interpV4thstage,'m')
title('Residual');
xlabel('xlabel')
ylabel(ylabt);
    
respondido por el laptop2d
0

1) ¿Por qué obtengo resultados NaN de LTspice

LTspice dará resultados de NaN cuando el circuito provisto no pueda resolverse, lo que puede deberse al suministro de parámetros que impiden que se calcule el modelo.

Para resolver esto, debe establecer límites en los valores de los parámetros del circuito que suministra a LTspice, que se pueden realizar con una optimización restringida como fmincon . Si las regiones de espacio de parámetros que causan que falle el modelo no son obvias, simplemente puede optar por ignorar los conjuntos de valores de parámetros que causan un resultado de NaN, aunque para muchos algoritmos de optimización esto puede causar una falla.

EDIT 1.5) Cómo lidiar con promediar los valores de NaN en MATLAB

Hay dos formas de hacer esto: nanmean , que forma parte de la caja de herramientas de estadísticas, o puedes usar mean(vector(~isnan(vector))) donde esto solo promediará los valores no NaN del vector.

2) ¿Por qué cuando encuentro un conjunto de parámetros óptimo en MATLAB no se traduce en LTspice de forma aislada?

Esto significa que en algún lugar de su función que construye el modelo LTspice hay un error que hace que se construya un modelo de circuito incorrecto. O eso, o cuando construyes tu circuito con los resultados óptimos, cometes un error humano en el diseño.

3) ¿Es LTspice adecuado para la optimización?

En mi experiencia, LTspice es insoportablemente lento, y si puedes construir tu modelo de circuito en código C, puedes trabajar mucho más rápido. Sin embargo, esto tiene sus propios problemas que necesita comprender el modelado a un nivel mucho más profundo y lleva mucho más tiempo de diseño que un esquema de LTspice.

Si ejecuta MacOS, puede considerar utilizar MacSpice , ya que contiene un algoritmo de optimización incorporado que le impediría tener que usar Dos programas para optimizar un circuito.

    
respondido por el loudnoises

Lea otras preguntas en las etiquetas