Por otra parte, MATLAB Node también se encuentra únicamente en el menú Mathematics > Scripts & Formulas > Script Nodes. Esta estructura llama al servicio «Matlab Server» a través de ActiveX para ejecutar los comandos (sólo en Windows).
En versiones antiguas también existía XMath Script Node, que utilizaba el programa MATRIXx de National Instruments, similar a MATLAB, pero en las versiones actuales ya no se mantiene.
Al igual que con FORMULA NODE, se deben crear variables de entrada y salida, pero en este caso hay que asignar explícitamente el tipo de datos, tal y como puede verse en la figura 2-26.
Figura 2-26. MathScript Node y MATLAB Script Node.
En la figura 2-27 pueden verse estas dos estructuras. El código de ambas es equivalente: se trata del diseño de un filtro y su aplicación a una señal aleatoria. Obsérvese el parecido de los códigos.
Figura 2-27. Implementación de un filtro utilizando las dos estructuras.
2.10. Ejemplos
2.10.1. Ejemplo I: Filtro promediador
2.10.1.1. Explicación teórica
Los filtros integradores o promediadores son un tipo de filtro paso bajo. Se emplean para reducir el ruido de una señal suponiendo que éste es de frecuencia mucho más alta que la propia señal. También se aplica en la edición de imágenes para añadir difuminados.
El funcionamiento es sencillo: calcular el promedio de una señal en un intervalo determinado.
En un promediador móvil existe lo que se llama ‘ventana’, que indica el tamaño del intervalo a promediar. En un sistema discreto este tamaño serán las muestras de la secuencia de entrada que se promediarán. Una ventana móvil avanza en cada paso del algoritmo una posición en la secuencia de entrada para realizar el promediado como se muestra en la figura 2-28.
Figura 2-28. Ventana móvil para realizar el promediado.
Matemáticamente puede expresarse la ecuación en diferencias del sistema como:
Donde:
y(n): valor calculado.
N: tamaño de la ventana.
x: señal de entrada.
k: índice para recorrer los valores a promediar.
Aplicando la propiedad del desplazamiento temporal, se puede hallar la transformada Z del sistema definido por la ecuación anterior y, a su vez, de esta nueva expresión se obtendrá la estructura del filtro.
La estructura de la figura 2-29 se ha particularizado para un orden igual a tres.
Figura 2-29. Filtro de orden tres.
2.10.1.2. Código
Para realizar este ejemplo se implementará un filtro promediador móvil de orden tres que añada un difuminado a una fotografía.
La entrada será una imagen en blanco y negro con formato BMP que consiste en una lista (array) de valores de cada uno de los componentes de la imagen. Estos componentes son RGB (Red, Green, Blue), por lo que para cada punto habrá tres valores. La siguiente lista representa cómo sería este array para una imagen con cuatro puntos:
R1, G1, B1, R2, G2, B2, R3, G3, B3, R4, G4, B4...
Como la imagen sólo contiene grises, los valores de los tres componentes son iguales, por lo tanto bastará con aplicar el filtro a sólo uno de los componentes o lo que es lo mismo, a uno de cada tres valores.
El programa empezará leyendo el fichero y desglosando su información; entre esta información se obtendrá un array RGB como el anterior. Por simplicidad se trabajará en una dimensión; una mejora sería actuar por filas y luego otra vez por columnas.
La función Decimate 1D Array con un tamaño de tres elementos obtendrá en la primera de sus salidas un array cuyos elementos sean los de las posiciones 1, 4, 7, 10, 13… del array de entrada, es decir, obtendrá todos los valores del componente R de cada punto.
Después los valores R de cada punto son promediados: el promediador sumará el último valor leído y los tres anteriores; el resultado se dividirá por cuatro. La ‘ventana’ se implementará mediante shift registers y el resultado se irá indexando en el lateral del FOR.
Para reconstruir la imagen basta con hacer el proceso inverso al de decimar: interpolar. Finalmente, se dibujan las imágenes antes y después de aplicar el filtro.
Mediante la señal selector se podrá elegir el tipo de estructura implementada. Si el selector está activado el filtro será como en la figura 2-29, y si no está activado habrá realimentación de las salidas a la entrada (IIR).
Figura 2-30. VI que implementa un filtro promediador móvil de orden 4.
2.10.1.3. Resultado
Para explicar el efecto del filtro se puede decir que proporciona cierta resistencia o inercia al cambio en la imagen. En la figura 2-31 puede verse el resultado del filtro sobre una fotografía.
Figura 2-31. Resultado del filtro sobre una fotografía.
La figura 3-32 es un detalle del principio de la fotografía después de aplicar el filtro usando realimentación de salidas a la entrada para magnificar este efecto. En ella se ve cómo hay una serie de puntos negros en la esquina que en la original no estaban, esto se debe a la condición inicial del filtro (hay que esperar a que todos los shift registers tengan datos que provengan de la foto).
Figura 2-32. Detalle de los primeros puntos que pasan por el filtro y del borde izquierdo.
Otro efecto que se puede apreciar es que la parte derecha de la imagen parece extenderse en la izquierda; es decir, la línea del horizonte de la parte derecha se puede ver que se extiente por la parte izquierda también. Esto se produce porque se ha considerado la imagen como un único array; para solucionar esto se podría aplicar el filtro a cada una de las filas.
Es aconsejable ejecutar este ejemplo con la opción Highlight Execution activada, pues de esta manera se puede ver un ejemplo práctico del uso de los shift registers y la salida indexada en los bucles.
Como puede intuirse, este método se puede generalizar para otros tipos de filtros FIR e IIR.
2.10.2. Ejemplo II: Generación de números primos
2.10.2.1.