El hilo de MATLAB

Joey

#30

Gracias máquina, voy a seguir por ahí creo. También se me ha ocurrido mezclar con Simulink, que lo mismo me facilita un poco la tarea. Iré contando mis avances (si es que los hay XD)

nomechordas

#27 Pues ese tema me interesa bastante, he estado pensando si habría alguna manera de meter una señal cualquiera en SPICE y guardar el resultado y luego con matlab exportarlo a audio y esas cosas. Y luego una paranoia mía de hacerme un modelo de válvulas digital en VHDL y ver si se puede conseguir simularlo en tiempo real con una FPGA digitalmente y así poder diseñar emulaciones de circuitos a válvulas con VHDL. Pero es más filosofía que nada de momento xD

Respecto a lo que dices del modelo de pequeña señal... realmente te interesa? El modelo de pequeña señal solo te aproxima el comportamiento como una ganancia por la señal de entrada, te sirve para ver como se comporta frecuencialmente el circuito en zona lineal, pero en válvulas creo que lo guay es conseguir una cierta compresión a tu gusto, no?

http://www.duncanamps.com/technical/ltspice.html Me he sacado un modelo de SPICE de aquí y parece que funciona adecuadamente, no sé si te servirá para algo.

Y bueno de hecho el año que viene en principio me voy de erasmus a Göteborg y estoy negociando hacer un TFG sobre procesado de señal con embebidos, les he dicho que sobre todo me molaría hacer algo de efectos de audio a ver que queda. Lo de hacer efectos o una simulación de ampli con FPGA o igual un ARM si es algo más liviano es algo que me llama mucho.

El año pasado ya me hice un delay con matlab (no en tiempo real), un modulador de baja frecuencia, que está tirado y probé algunas distorsiones recortando la onda a partir de cierto umbral de distintas formas, es un vicio. Me falta ponerme a mirar como pasar el filtro del IR de una cabina de guitarra a matlab, que probé convolucionando a pelo con el WAV y me da que así no :/

1 respuesta
Joey

#32

Si se pudiera de alguna forma, meter cualquier tipo de señal en programas como Spice, lo haría ahí sin dudarlo... el problema es ese. Quiero pasarle un tono puro a distintas frecuencias, ruido rosa, etc. es decir, señales test y luego hacerle un estudio detallado con su espectrograma y movidas varias para estudiar la no linealidad en detalle.

Sigo peleándome con el Simulink y poco a poco voy avanzando cositas. El problema que me surge ahora es pasar el archivo simulink a un .m de Matlab XD Pero bueno, nada que Google no solucione, esa será mi tarea esta tarde.

1 respuesta
gonya707

#33 con Multisim se puede hacer todo eso que decis, de usar la señal que querais y que se simule su paso por un circuito cualquiera

2 meses después
shturmovik77

Ya sabía yo que en MV había de todo, hasta hilo de Matlab. Bueno, a ver si me podéis ayudar, que estoy espesito hoy y no me sale nada...

Situación, tengo un conjunto de 150 imágenes de 800x600 cada una, o lo que es lo mismo, 150 arrays en los que cada celda sería un pixel, con un valor determinado (entre 0 y 50, cada número representa una región segmentada)

La idea, es ver en cada matriz cuantos veces se repite cada número, y quedarme con los numeros que se repitan menos veces que un umbral determinado. Hasta ahí bien, sin problemas.

Ahora tendría que recorren todas las imagenes, las columnas y filas de cada una, y comprobar si cada pixel coincide con alguno de los valores que he sacado en el paso anterior, y de ser así, cambiar el valor a 0. Esto también está hecho, pero a base de fors y entre que tengo una mierda de PC etc, tarda demasiado...

En resumen, tengo 60 lineas de código, para solamente recorrer el array, ver que valores se repiten menos de X veces, y en las posiciones de esos valores, poner un 0.

Seguro que en Matlab hay funciones que hacen esto más rápido, sobre todo la última parte... No se si alguno me podría ayudar :(

Thanks

1 respuesta
gonya707

#35

Si, la idea es no usar nunca bucles en matlab y hacerlo en cambio con operaciones matriciales, por ejemplo.

Para la primera tarea que dices, el sacar el numero de apariciones de cada valor ya existe una función. A eso se le conoce como histograma y la funcion es hist(x).

lo segundo, cambiar a 0 todos los valores seleccionados es tambien muy sencillo usando operadores logicos y la funcion find, mira un ejemplo en el que creo una matriz como las tuyas y le elimino el numero 208:

3 1 respuesta
shturmovik77

#36 Para primera parte si había usado unique+histc, pero no conocía lo de find.... al final ha quedado muy limpio y en vez de 10 mins tarda 10 segundos :P

Muchas gracias!

10 meses después
kubix

Necesito que me echéis una mano.

Estoy intentando obtener una ley propulsiva (una función definida) de un UAV a partir de una serie de datos recabados de tal manera que la propulsión (delta_t), variable que no se ha medido durante los vuelos de prueba, depende de la señal pwm del motor de la hélice (motor_pwm), la velocidad de la aeronave (U) y la altura (h). De esta manera, mi función debería tener la forma: delta_t=f(motor_pwm,U,h).

Conociendo las medidas de una serie de variables cinemáticas y dinámicas, he podido despejar la delta_t de una ecuación dinámica y, por tanto, ahora tengo 4 vectores (de igual longitud) con los datos de cada variable. He visualizado los resultados en dos gráficas 3D: (motor_pwm, U, delta_t) y (motor_pwm, h, delta_t), y delta_t parece evolucionar cuadráticamente respecto a U, sin estar tan claro para el caso de motor_pwm y h.

Mi pregunta es: Cómo podría ajustar estos datos para obtener una función optimizada que me describa la evolución de delta_t respecto a las otras 3 variables?

6 meses después
Dinity

Pregunta que creo que es un poco chorra, pero a ver si alguien puede echarme una mano, ya que no lo he encontrado, y hace mucho que no uso realmente matlab:

Tengo un código de MATLAB con muchos archivos esclavos, en que hacer un run me tarda casi 30min. En uno de estos archivos esclavos, quiero observar y guardar una variable X, pero el programa la sobrescribe muchas veces. Como puedo guardar esta variable de alguna forma que me permita observar cuando varía?

Lo único que me ha salido es utilizando el comando save, pero solo me guarda la variable, y la va actualizando cada vez que cambia, pero solo me muestra el valor final de la variable.

1 respuesta
gonya707

#39 al lado del numero de linea puedes hacer clock para poner un watchpoint (sale un circulito rojo si mal no recuerdo)

la ejecucion se detendra justo antes de llegar al watchpoint, y mientras este pausado puedes inspeccionar variables (dale shift F5 creo que era para reanudar)

1 respuesta
Dinity

#40 Ostia no habia pensado en usar watchpoints, muchas gracias, quizá me hace el apaño.

Pero no estoy muy seguro, porque es un vector de 640 valores que sobrescribe aproximadamente unas +1k veces durante la ejecución del programa.

1 respuesta
gonya707

#41 siempre puedes poner un watchpoint al que se llegue cada 1000 iteraciones o algo

en plan

%code
ct = ct + 1;
if ct >1000
   ct = 0; %el watchpoint aqui
end

%code