sábado, 30 de noviembre de 2019

PixiePi habla lenguas

“I will use strangers who speak unknown languages to talk to my people. They will speak to them in foreign languages," Corinthians 14.

En entradas anteriores comenté sobre progresos tanto en el armado del kit D4D (crkits) como del desarrollo que denomino PixiePi el que integra un desarrollo basado en un kit DIY Pixie y la librería librpitx corriendo en una plataforma Raspberry Pi Zero (W).
Cuando comenté en el foro Facebook Técnica-LU sobre el primero de ellos junto con mi recomendación hice el comentario, mas bien conceptual, que emitir en DSB como lo hace el D4D tiene sus bemoles y que debería poderse hacer en forma mas robusta mediante generación directa de señal con técnicas SDR. Lo que tenía en mente era que el proyecto PixiePi pudiera hacerlo, claro.
En realidad el "salto" no es tan grande, de hecho puede ni siquiera ser necesario un salto. En la página del proyecto figura como recibir y emitir FT8 con el proyecto PixiePi tal como está en éste momento, solo que si bien es funcional no es cómodo. En recepción el enfoque es idéntico al D4D, un receptor de doble conversión, concedo que quizás menos sensible pero suficiente, siendo su oscilador local la librería librpitx operando como DDS. En transmisión, sin embargo, el programa PiFT8 puede emitir todos los mensajes FT8 que sean necesarios, pero es necesario armarlos y coordinarlos completamente a mano, lo que quizás sea práctico para una prueba de concepto (o para un beacon) pero no necesariamente lo es para comunicación corriente. Por otra parte, correr WSJT-X en la Raspberry Pi Zero es técnicamente posible pero la performance es muy marginal (¿lo es?).
En experimentos previos, reflejados en la serie de éste blog denominada "Construyendo un transceptor digital bit a bit" exploré que era necesario para utilizar una plataforma Raspberry Pi para recibir distintos modos a partir de un dongle RTL-SDR y emitirlos basados en la librería librpitx. La mayor parte de la experimentación la hice con una Raspberry Pi 3+, el cual es casi cuatro veces mas poderosa que una Raspberry Pi Zero en términos de CPU. Alli encontré un limitante fundamental, que era que para compensar el retardo en el procesamiento del audio de recepción y retrasar el clock de la máquina para eso, perjudicaba la exactitud de la ventana de transmisión. La conclusión que saqué en ese momento era que debería usar dos placas separadas, una para emitir y otra para recibir (cada una con su compensación de clocks).
Pero hay otro enfoque posible, y es mostrado en la figura adjunta. PixiePi no requiere procesamiento digital de su salida, el receptor Pixie es un doble conversión (bueno, regular o malo, no importa) que puede alimentar directamente un WSJT-X via una placa de sonido cualquiera, una USB es quizás la opción mas conveniente. Por su parte el WSJT-X puede si, mediante un proceso de adecuación digital, alimentar la emisión mediante PixiePi a partir de una cadena de procesamiento digital que transforme los sonidos generados con la modulación FT8 en una señal de modulación I/Q (compleja) con la que poder modular en SSB la portadora generada del DDS. Con esa premisa empecé a trabajar en crear el software necesario para integrar ambas cosas, proveer una señal DDS que opere como oscilador local (LO) en receptor y una señal SSB que emita los tonos provistos por WSJT-X en transmisión.
En realidad el transceptor Pixie es de CW, y por lo tanto su etapa de salida no es lineal pues opera en clase C. Pero ésto no es dificultad toda vez que el filtrado de la señal de salida sea adecuado para evitar espurias excesivas y que la señal FT8 está contenida en la fase de la señal y no en su amplitud, la que resulta uniforme.
La capacidad del Raspberry Pi de generar una señal modulada en amplitud que se emita por un pin digital (GPIO4) es limitada, pero sorprendentemente suficiente puesto que el "nivel" de señal en el pin puede ser controlado programáticamente en hasta 7 niveles diferentes, y eso basta para generar una aproximación de la señal modulante suficientemente buena como para ser inteligible en un grado sorprendente, no peor que una señal de SSB "comprimida".
El despliegue consiste entonces en desplegar WSJT-X en una Raspberry Pi Zero, configurarla para recibir señal desde la linea MIC de una placa de sonido, el cual es alimentado con la salida de Speaker de la placa Pixie y alimentar la señal a emitir mediante un loopback interno para poder con el mismo activar el proceso de modulación SSB. La activación del PTT se realiza mediante comandos CAT aunque no descarto en el futuro poder hacerlo con un sistema VOX tal como opera D4D, aunque no hay cables involucrados en ninguno de ambos casos pues el comando es completamente digital.
De esta forma el procesamiento queda comandado enteramente por la placa Raspberry Pi Zero, aunque aún es necesario tener alguna forma de operar el WSJT-X que alli corre.
La forma mas trivial es, por supuesto hacerlo desde una PC o laptop mediante el uso de la conectividad VNC (escritorio remoto), la operación del WSJT-X es mayormente "point & click" asi que es una interfaz totalmente aceptable; pero en realidad se puede utilizar como alternativa cualquier medio que me permita utilizar el programa VNC Viewer tal como una tableta o un teléfono celular. En cuanto al teclado puede utilizarse un teclado virtual o un teclado bluetooth.

viernes, 22 de noviembre de 2019

Monitoreo de Propagación de LU9DA

Hace bastante tiempo que Rick (LU9DA) tiene funcionando su DX-Cluster en el que realiza, cada 10 minutos, un resumen gráfico del estado de propagación mediante el recurso de dibujar los "enlaces" dados por los "spots" del cluster en ese período. Lo hace tanto para las bandas tradicionales como para las WARC. Es un recurso que adopté hace mas de una década como parte de mi infraestructura concursera. Le agregué entonces un script en Javascript, muy simple, denominado MonitorProp.htm que lo que hace es tomar los gráficos de todas las bandas y ponerlos en una sola página, el script carga los gráficos cada minuto (aunque los gráficos mismos son actualizados cada diez minutos). Si bien han aparecido recursos de monitoreo de propagación bien sofisticados desde entonces tales como el "mapa de calor" proporcionado por DX Heat (band activity) o incluso el muy sofisticado DX Maps con una enorme cantidad de información desplegada, recursos ambos que también uso durante mi actividad concursera, el que continúo usando como monitor primario y "pantalla de fondo" permanente es el que genera Rick. Contribuyen  a su utilidad el formato frugal, las conclusiones las saca uno de un gráfico simple, pero al mismo tiempo completo en un grado que permite de un vistazo saber donde está la propagación (si es que está) y como está mutando. Datos útiles tanto para participaciones "All Band" para saber cuando es momento de cambiar de banda, como en "Single Band" para saber cuales son los "corredores de propagación" activos. En general he sostenido discusiones sobre si un recurso así debe usarse solamente en modos "asistidos" en concursos que los permiten o puede usarse en cualquier concurso y categorías no asistidas. El tema siempre genera debates acalorados y no pocas veces alrededor de posturas mas bien dogmáticas pero siempre he sostenido la conversación parado en competir en modo asistido por lo que  no quedan dudas, pero también he sostenido que cuando uno lee los reglamentos de los concursos no es difícil concluir que la asistencia consiste en saber estaciones concretas en frecuencias concretas, y claramente el cluster gráfico de Rick no da esa información (si lo hace DX Maps y es inevitable verlo en DX Heat, pero no aquí). Uno solo sabe que hay un enlace entre dos países, pues el mapa gráfica los enlaces entre las capitales de los países, independientemente de donde esté ubicada la estación. He comentado en entradas anteriores de mi blog como LU7HZ este recurso muchas veces, pero a cuento de haber resuelto un "bug" en mi script que ya llevaba una década de edad (la omisión del año en el título) tuve que refrescarlo con la corrección, y eso es un buena excusa para refrescar también la existencia del recurso y repasar su utilidad. Se viene el CQ WW CW 2019, y este es un recurso que soporta muy bien el paso del tiempo, signo seguro de que es útil.

jueves, 21 de noviembre de 2019

CQWW CW 2019


Y se viene el CQ WW CW 2019, concurso clave del calendario anual para CW; aún en un año con poquisimas participaciones en concursos es una cita obligada.

Como es natural, y como parte de los preparativos de la estación, empecé a pensar sobre las posibles estrategias a seguir a emplear. Creo que de base descarto una participación All Band, requiere un involucramiento y asignación de tiempo mayor que el que me es posible. Asi que Single Band (SB) será. La potencia será LOW y el modo Assisted por preferencias ambos. O sea que queda elegir que banda será. El año pasado participé en 40 metros (SO(A)SB40 Low), y si bien me divertí mucho me quedé con la sensación que me perdí oportunidades de contactos importantes por no estar durante toda la madrugada; pero no daba y no dio. La banda de 80 metros queda descartada pues no tengo antena decente. Participar en 20 metros tiene su atractivo por varias razones, la principal es que creo que conozco bien el patrón de propagación, lo he estudiado durante todo el año gracias al beacon WSPR y FT8, mi estación es razonablemente eficaz en 20 metros también y por cierto tiene la ventaja que los horarios son mas "diurnos". Pero, estudiando la performance de otras estaciones le solicité el log preliminar de la estación de Ricardo "Los Profes" (LU2DX) durante el reciente concurso CQ WW SSB 2019, los que con mucha amabilidad me compartieron. Revisándolo me encuentro con una performance muy buena en la banda de 10 metros, superior a lo esperable. Las aperturas son muy breves y muy "agudas" en tu perfil de tasa, pero por cierto de aprovecharlas se puede articular un buen puntaje. Intrigado realicé un pronóstico de propagación basado en los perfiles que ellos obtuvieron, con la siempre oportuna hipótesis simplificadora que la propagación pasado aproximadamente un mes (parecida configuración solar geoefectiva). 
Me da que, estimación de intensidades o probabilidad de contactos al margen deriva en un pronostico de apróximadamente 6 horas de propagación por día de concurso, con un comienzo en nuestra noche del Viernes (1am GMT) con una apertura corta con Japón, seguida de varias horas de apagón hasta que alrededor del mediodía local son de esperar condiciones moderadas con Europa por un par de horas seguidas con buena probabilidad de tener tasas interesantes de contactos con USA. Tanto SA como AF pueden aportar contactos durante esa ventana. Un poco para validar hice un análisis similar pero utilizando la proyección realizada con el programa VOACAP alimentado con las hórridas condiciones actuales de actividad solar (SSN negativo, SFI en 70 o menor) y, sorprendentemente, da un perfil de contactos tanto en banda horaria como en perfil geográfico de corresponsales similar, se pronostican 6 horas de condiciones por cada día de concurso (12 horas durante todo el fin de semana) en casi total coincidencia con el perfil de LU2DX. Finalmente, bajé datos del Reverse Beacon Network del fin de semana del 25 y 26 de Octubre (aproximadamente un mes antes de lo que estoy proyectando) y el perfil también coincide en forma bastante aproximada aunque menos intensa que en los casos anteriores. Cabe destacar que siempre la participación de estaciones, y por lo tanto la "intensidad" de actividad es muy superior en un concurso respecto a un fin de semana cualquiera, por lo que eso podría explicar en parte la ausencia de datos en la red RBN. Los resultados de las tres comparaciones puede verse en el gráfico adjunto, donde una "X" implica que la probabilidad de hacer contactos en esa hora es media a alta, mientras que un blanco implica probable baja actividad (aunque no se pueden descartar aperturas esporádicas y al azar en cualquier horario). El esfuerzo de participación, en horas, es similar al esperable en 20 metros, y por cierto que 10 metros aún muy cerrada por las pobrísimas condiciones de propagación imperantes es una banda muy atractiva, por lo menos para mi, sobre la cual se puede competir con otros paises mas en pié de igualdad que hacerlo en bandas mas altas. No tengo aún decidido en que banda operaré durante el concurso, pero ciertamente ésta banda está alta en sus posibilidades.

miércoles, 20 de noviembre de 2019

Corriendo la frontera del asombro, distancia record para FT8 en 20 metros

En varias entradas anteriores he compartido mi asombro sobre las capacidades del modo WSPR (Weak Signal Propagation Report) para cubrir distancias inimaginables con potencias absurdamente pequeñas. Este modo tiene una capacidad de identificar señales tan débiles como -30 dB de Relación Señal-Ruido (SNR) en un canal de referencia de fonía (2.5 KHz). Esa referencia es un estandar, pues es obvio que no se necesita tener tanto ancho de banda para decodificar un mensaje simple, pero es la referencia para poder comparar con la eficiencia/eficacia de una señal de fonía. Solo para comparar se estima que la capacidad de CW en ésta materia ronda los -5 dB para copia "automátizada" y alrededor de -10 dB para copia auditiva (algunos estiman que un operador realmente experto empuja ese límite a -15 dB). En el caso de CW esa performance sobre ruido explica la capacidad de equipos de potencia muy baja, QRP o incluso QRPp, pueden realizar contactos muy buenos. Solo para poner perspectiva numérica, en condiciones normales lo que podría hacer con un equipo QRP (5W) en CW podría hacerlo en WSPR con un poco mas de 500 mW. En mi caso hace ya bastante tiempo, próxima a cumplir un año con funcionamiento continuo, tengo una baliza WSPR de 100 mW (+20 dBm) de potencia, la que operando sobre una antena dipolo rígido es rutinariamente reportada desde EU, NA e incluso OC (ayer, Bob ZL1RS a 10531 Km de mi ubicación). Pero WSPR es un modo de reporte de propagación, solo puede ser escuchado pasivamente y reportado, la extensión de la transmisión de información de casi dos minutos lo hace poco viable para comunicar. Y en los dos minutos de extensión de la emisión, junto con los algoritmos sofisticados de codificación, la información estructurada y breve, está el secreto de poder recuperar señales tan débiles. Ahora bien, FT8 (Franken-Taylor PSK 8) es un modo que está a caballito de ambos mundos, por un lado utiliza el tipo de algoritmos que WSPR, pero lo hace con algunos sacrificios y compromisos en un tiempo de emisión de algo menos que 15 segundos sobre "ventanas" sincronizadas con mucha precisión en el segundo 0,15,30 y 45 de cada minuto; de esa manera una llamada en el segundo 0 puede ser contestada por otra estación en la ventana del segundo 15 y la respuesta en el 30 para cerrar el contacto en la ventana del segundo 45 . Como resultado se pueden sostener tasas de contactos (en condiciones ideales) de cierta fluidez. En la práctica, en condiciones normales se tarda un par de minutos por contacto debido a los re-intentos, mas si las condiciones de propagación son marginales. El mensaje que se intercambia es muy escueto pero suficiente para validar el contacto como el famoso "2-way contact" requerido por la tradición (es decir, señal distintiva y nivel de señal con la confirmación de haber recibido correctamente ambas) y las reglas de la mayor parte de las actividades de DX y concursos. Su performance está, dependiendo de la profundidad de la decodificación que se active, lo que depende también de la potencia del procesador que se disponga, entre -15 dB y -25 dB de SNR. La razón de la potencia del procesador estriba en que del ciclo de 15 segundos que dura un "frame" quedan un poco menos de 3 segundos entre que finaliza la transmisión y comienza la ventana de un nuevo ciclo de transmisión, por lo tanto la "recepción" debe ocurrir en esa ventana de tiempo. La diferencia entre distintas "profundidades" de decodificación estriba en el algoritmo de decodificación mismo. La banda pasante es explorada sumariamente en busca de "bins" o segmentos con energía, asumiendo que corresponden a una señal (aunque también pueden ser mero ruido), es posible entonces en función del nivel de energía estimar preliminarmente la probabilidad que haya una buena señal para decodificar. Con todas las señales provenientes de esa pasada (que reitero, pueden tener "falsos positivos" debido a ruido") se hace una tabla donde las señales candidatas preliminarmente están ordenadas de mayor probabilidad de validez a menor. Lo lejos en la lista de señales candidatas que se puede progresar  antes que se quede sin tiempo determinará cuantas posibles señales se decodificaron y cuantas no se llegaron a decodificar. En otras palabras, una señal "fuerte" es decodificada por la configuración mas "rápida" en profundidad pues está primero en la lista de candidatos, mientras una señal extremadamente debil requerirá de mucha potencia de procesamiento para que en solo 3 segundos pueda llegarse a procesarla luego de muchos otros candidatos, incluso cuando fueran "falsos positivos" producidos por ruido, un destello de ruido puede tener una firma de energía superior a una señal válida y por lo tanto ser identificada como de mayor prioridad.. Por eso es facil en FT8 operar a nivel regional con poca potencia y antenas modestas y para ocasionalmente lograr distancias mayores; mientras que para consistentemente poder hacer grandes distancias se requieren mejores antenas y una buena estación de "ambos lados".
En mi caso junto con mi baliza de WSPR, la que emite un frame cada 10 minutos, opera una baliza de FT8, la que luego de los dos minutos de la ventana de WSPR emite cuatro llamadas CQ a razón de dos por minuto durante dos minutos, esas llamadas no inician un QSO automáticamente, por mas que sean contestadas por algún corresponsal siguiendo la tradición no escrita iniciada por el Dr. Taylor de no generar robots capaces de hacer un QSO completo sin ninguna intervención humana en el proceso. La baliza queda a continuación silenciosa por los 6 minutos remanentes hasta el próximo ciclo. Durante ese período opera el monitor de FT8, el cual operó durante mucho tiempo con una Raspberry Pi corriendo WSJT-X y un receptor RTL-SDR y ahora lo hace con la misma Raspberry Pi pero usando el transceiver D4D de CRKits, el cual tiene una sensibilidad extraordinaria. La baliza transmisora controla el acceso a la antena de uno u otro. La baliza FT8 con solo 100 mW es rutinariamente reportada desde Norte y SudAmérica, y ocasionalmente desde AF (ZL-Land) y EU; por su parte la estación monitora reporta rutinariamente todo ese espectro. Pero, corriendo la frontera del asombro ayer la baliza fue reportada, en el límite mismo del modo a -24 dB, por Eiichi (JF7ELG) a sorprendentes 18320 Km (¡!). Hay un viejo comentario de los viejos radioaficionados (categoría en la cual ya también estoy yo) que siempre hay propagación, solo hay que buscarla en el momento correcto. Suena a que es un truco "mágico" de un modo que en definiva es pura matemáticas y que tiene poca conexión con la forma que por ahi percibimos un radioaficionado puede y debe contactar. Yo difiero con ese punto de vista por varias razones, que no vienen al caso enumerar. Pero aún aceptando ese razonamiento se puede argumentar que si a la misma hora y con la misma configuración de antenas en ambos extremos intentáramos lo mismo con CW a 100 W, le estaríamos poniendo 30 dB mas al circuito por lo que la relación SNR debería ser de 4 dB, confortable para un QSO en telegrafía y si hay bajo ruido de banda para uno "ruidoso" en fonía. O sea que los modos de baja señal puede beneficiar al que está de acuerdo con ellos, y al que no. ¡Es solo cuestión de intentarlo!

lunes, 4 de noviembre de 2019

Impresora 3D en LU7DID

Hacia rato largo que venia considerando la posibilidad de incorporar una impresora 3D a mi shack. Pero los precios muy por arriba de lo que sensatamente puedo invertir en una cosa asi para un uso ocasional y de "entrecasa" combinado con dificultades para identificar un propósito "duro" que lo justificara fueron demorando la decisión. En el medio aprendí a manejar las herramientas de diseño, primero como "nivel principiante" la muy interesante plataforma TinkerCad, a la que referí en alguna entrada anterior debido a su también excelente emulador de Arduino, provee un editor Web sorprendentemente potente para manipular objetos y crear diseños de cierta complejidad incluso. Se obtiene como resultado el archivo con el diseño en formato STL. Dado que se puede también importar diseños externos con ciertas limitaciones, no importantes a nivel principiante, se puede ingresar a repositorios como Thingiverse con miles de modelos en prácticamente cualquier aplicación imaginable, y de allí extraer un diseño para tomar como base y evolucionarlo. Por ejemplo eso es lo que hice para un primer prototipo del gabinete para el proyecto PixiePi donde tomé diseños existentes que usan Raspberry Pi Zero, aplicaciones con LCD 16x2  y kit Pixie para unificarlos en un solo diseño. Mas allá de aprender un campo realmente vasto, lo que de por si es interesante, uno se encuentra rápidamente con el límite físico de no poder plasmar en objetos físicos lo que está diseñando. Intenté con un productor comercial pero la experiencia no fue satisfactoria en resultados y fue extremadamente costosa; aparte de la impresión existe el interés de vender servicios de diseño gráfico con lo que se hace muy difícil una aplicación en tirada corta y sin propósitos comerciales. Supongo que si hubiera un desarrollo comercial quizás justifique esa via, incluso los honorarios del diseñador gráfico, pero no para experimentar y hacer cosas de una vez. Pero empecé a ver en los sitios web chinos ofertas de impresoras 3D de muy bajo costo, hasta que un modelo ingresó volando por debajo de todas las defensas, 150 dólares en una oferta especial que duró un fin de semana. Y allí me compré la ANET A8 3D Printer  , no había mucho tiempo para investigar pero una mirada rápida me mostró una enorme comunidad amateur, bastantes problemas para hacerla funcionar bien pero también otros tantos proporcionando soporte y "atajos" de uso, incluyendo una enorme gama de mejoras hechas con la impresora misma. La adquirí y por los meandros de las compras online tardó muchísimo en llegar, mas de 3 meses, la miraba en el tracking internacional rebotando entre aeropuertos domésticos de China como si el courier estuviera en loop, pero finalmente llegó.
Cuando llegó algo que sabía racionalmente se transformo en conocimiento emocional, la impresora es un kit. Es un kit con centenares de piezas, muchos centenares de piezas; no es nada ni parecido a ensamblar media docena de sub-sistemas. Hay que armar cada sub-sistema. Lo primero que busqué fueron videos en Youtube sobre como armarla, y encontré muchos, de distinta calidad y claridad. Es frustrante en un video de armado que se pierda foco de la imagen justo cuando está mostrando lo que uno debería ver.... Entre todos ellos encontré uno muy bueno en español [link] creado por 3D Maker ES, que consta de 4 partes de aprox. 20 minutos cada una. Si, la explicación de como armar la printer, en el formato acelerado y con espacios recortados de Youtube toma casi una hora y media..... Al ver los videos llegué a la conclusión que jamás podría armarla con la habilidad necesaria para que saliera andando. Afortunadamente vino a pasar unos dias con nosotros el Dr. Marcelo Colla Machado, que además de cirujano de profesión tiene una enorme habilidad manual y una paciencia de monje, y aplicó ambas cosas a lo largo de casi 12 horas para armar la impresora; la cual salió andando de primera intención con solo problemas de armado muy menores. Llama la atención que pese a seguir todos los pasos de los videos sobran piezas, y hay al menos un error que hace que no detecta el fin de carrera en eje Z.
La calibración requiere de videos adicionales, de hecho cuesta bastante calibrarla para que funcione bien, hay un video útil [link] que ayuda en ese proceso.
El resultado es una printer 3D que sin ser robusta o de calidad anda lo suficientemente bien como para poder hacer cosas en escala "hogareña" a costos razonables. Luego de algunos pocos diseños de prueba tales como un llavero o el inevitable extrusor de pasta dentrífica ya lo apliqué a un diseño del shack de radio concreto, el gabinete para el "hotspot" DMR.

Durante los primeros usos comprendí a los golpes que implica los problemas de calibración (y lo dificil que es calibrar la "cama") y lo importante que es poder obtener buena adherencia del objeto sobre la "cama" de impresión (placa donde ocurre la impresión que es movida en dos ejes), en particular en las primeras capas. En muy poco tiempo tuve mi buena dosis de "pastichos" inservibles, pero hasta eso es un aprendizaje, pues rápidamente se aprende a guardar los sobrantes y diseños fallidos para mezclarlos con acetona para hacer una pomada que permita realizar acabados o solucionar imperfecciones.
El bautismo de fuego lo tuve cuando, con Marcelo ya en su casa, se me tapó el extrusor y tuve que desarmarlo para limpiarlo, bastante complejo, pero también hay videos para una guía [link].
Si bien es posible imprimir modelos mediante el copiado del archivo con el diseño (.STL) en una tarjeta SD y leerlo directamente con la impresora, he encontrado mucho mas eficaz y rápido usar un programa de rendering que gestione la impresión misma, pues no solo permite trabajar mas amigablemente (sobre todo al comienzo, donde hay mucha prueba y error) sino que dá facilidades para modificar el diseño, calibrar la impresora, ajustarla y cambiar mas o menos facilmente los parámetros de impresión; seguramente hay muchos programas pero el que encontré mas recomendado, no es pago y es razonablemente fácil de usar es Ultimaker Cura
Todavía estoy en los primeros pasos de lo que promete ser una curva de aprendizaje bien empinada, el tema es vasto tanto en lo que hace a las herramientas de diseño, los posibles usos y también el instrumento mismo el que cuenta con docenas (centenares) de posibles mejoras.