giovedì 1 febbraio 2024

Frequenza ISM

 Con RTL-SDR e' possibile "ascoltare" il traffico ISM su 433.9 MHz 

I pacchetti si possono leggere tramite il plugin di OpenWebRX oppure da linea di comando 



oppure da linea di comando si puo' usare rtl-433
sudo apt install rtl-433 




APRS con CRT Micron

Per prima cosa si programma la radio per l'ascolto su 144.800 MHz


Il secondo passo e' crearsi un cavetto per connettere l'uscita audio  

La via piu' semplice se si vuole solo ricevere e' connettere l'uscita audio della radio sul dietro del dispositivo con la scheda audio tramite un semplice cavo jack audio (il cavo deve andare sul MIC della scheda audio)


Altrimenti se si vuole anche trasmettere si deve scollegare il microfono della radio e crearsi un cavo apposito

Si prende un cavo RJ45 e si taglia


Si prende un jack maschio TRSS (io per semplicita' ho preso un adattatore che permette collegamenti rapidi)
Si deve collegare 
blu -> tip
biancoblu e marrone -> ring 2
verde -> sleeve




a questo punto i collegamenti con la scheda audio sono i seguenti


Da ricordarsi di attivare il VOX sulla radio perche' in questa configurazione non e' gestito il PTT

Si installa il software direwolf

sudo apt install direwolf 

una volta installato Direwolf con Apt si deve copiare il file di configurazione di esempio direwolf.conf.gz da /usr/share/doc/direwolf/conf/ e lo si copia nella propria home e lo di scompatta

si lancia il comando 

arecord -l

e si osserva l'identificativo della scheda di rete e si modifica il file (nel mio caso)

ADEVICE  plughw:1,0

ARATE 48000

a questo punto si lancia direwolf (per me vuole sudo per abilitare il microfono)
Se tutto e' andato a buon fine si ricevono i messaggi APRS come nell'immagine sottostante


Oltre a ricevere e decodificare APRS direwolf permette anche l'invio di pacchetti aprs 
Si modifica direwolf.conf con una stringa simile alla seguente

PBEACON delay=1  every=30 overlay=S symbol="digi" lat=43^46.45N long=011^14.46E power=50 height=20 gain=4 comment="Luca Innocenti Florence (Italy)"

ed in automatico vengono inviati messaggi 




Stereo RTSP stream Oculus Go

Un tentativo di effettuare uno stream video stereo dalla camera verso Oculus GO 


 

Oculus GO ha un supporto estremamente limitato dal punto di vista software per come client di stream video...l'unica soluzione che ho trovato e' stata quella di usare RSTP

prima si crea il server

wget https://github.com/aler9/rtsp-simple-server/releases/download/v0.16.0/rtsp-simple-server_v0.16.0_linux_amd64.tar.gz


tar -xzvf rtsp-simple-server_v0.16.0_linux_amd64.tar.gz

rtspServer=192.168.1.67:rtsp://192.168.1.67:8554/webCamStream ./rtsp-simple-server

dopo con FFMPEG si collega la camera al server

sudo ffmpeg -f v4l2 -framerate 24 -video_size 2560x960 -i /dev/video2 -f rtsp -rtsp_transport tcp rtsp://192.168.1.67:8554/webCamStream

per verificare si puo' usare

ffplay "rtsp://192.168.1.67:8554/webCamStream"

A questo punto ho caricato con Sideload VLC su Oculus GO.
I problemi sono il tempo di lag (abbondantemente sopra il secondo) ed il fatto che non riesco a portare VLC in modalita' fullscreen (solo teatro) e cio' fa perdere ogni speranza di avere una visualizzazione tridimensionale

Contatto ARISS con Quansheng UV/K5

 


lunedì 22 gennaio 2024

Impronte

 Impronte sul M.Ferrato


Impronta di Lupo

Impronta di Tasso


ho trovato anche questo osso che mostra tracce di predazione

venerdì 12 gennaio 2024

Rimozione trend da serie tempo

Una prova per rimuovere la componente stagionale da una serie tempo usando la libreria StatsModels di Python


In alto dati originali. al centro trend, seguend dati periodici stimati ed in basso calcolo dei residui

i

#!/usr/bin/env python
# coding: utf-8

# In[1]:


from IPython.display import display

import numpy as np
import pandas as pd
pd.set_option('display.max_rows', 15)
pd.set_option('display.max_columns', 500)
pd.set_option('display.width', 1000)

import matplotlib.pyplot as plt
from datetime import datetime
from datetime import timedelta
from pandas.plotting import register_matplotlib_converters
from mpl_toolkits.mplot3d import Axes3D

from statsmodels.tsa.stattools import acf, pacf
from statsmodels.tsa.statespace.sarimax import SARIMAX
import statsmodels.api as sm
import statsmodels.formula.api as smf


register_matplotlib_converters()
from time import time
import seaborn as sns
sns.set(style="whitegrid")

from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans
from sklearn.covariance import EllipticEnvelope

import warnings
warnings.filterwarnings('ignore')

RANDOM_SEED = np.random.seed(0)


# # Carica i dati

# In[2]:


def parser(s):
return datetime.strptime(s, '%Y-%m-%d %H:%M:%S')



# In[3]:


#read data
est = pd.read_csv('/home/luca/luca/liscione.csv',sep=";",parse_dates=[0], index_col=0, date_parser=parser,header=0)
print(est)


# In[4]:


est = est.asfreq(freq='1H', method='ffill')



# ### Introduce an Anomaly

# In[5]:


idx = pd.IndexSlice


# In[6]:


start_date = datetime(2023,10,5,0,0,0)
end_date = datetime(2023,12,31,23,59,0)
lim_est = est[start_date:end_date]


# In[7]:


lim_est


# In[8]:


del lim_est['Temp']


# In[9]:


plt.figure(figsize=(10,4))
plt.plot(lim_est)
plt.title('Est', fontsize=20)
plt.ylabel('Est(mm)', fontsize=16)
for year in range(start_date.year,end_date.year):
plt.axvline(pd.to_datetime(str(year)+'-01-01'), color='k', linestyle='--', alpha=0.2)


# ## Seasonal Decompose

# In[10]:


from statsmodels.tsa.seasonal import seasonal_decompose
import matplotlib.dates as mdates


# In[18]:


plt.rc('figure',figsize=(12,8))
plt.rc('font',size=15)

result = seasonal_decompose(lim_est,model='additive')
print(result.trend)
plt.savefig('trend')

fig = result.plot()
fig.savefig('trend.png') # save the figure to file
result.trend.to_csv('/home/luca/tempo.csv', date_format='%Y-%m-%d_%H',sep=";")



# In[12]:


plt.rc('figure',figsize=(12,6))
plt.rc('font',size=15)

fig, ax = plt.subplots()
x = result.resid.index
y = result.resid.values
print(x.size)
ax.plot_date(x, y, color='black',linestyle='--')
ax.set_ylim([-0.7, 0.7])

fig.autofmt_xdate()
plt.savefig('residual')

plt.show()


# In[13]:


temp = est[start_date:end_date]

del temp['Est']
print(temp.index)
temp.index.to_csv('tempo2.csv', date_format='%Y-%m-%d_%H',delimiter=";")

#np.savetxt('tempo.csv',temp.index,delimiter=";")


# In[ ]:





# In[ ]:


fig, ax1 = plt.subplots()

color = 'tab:red'
ax1.set_xlabel('time')
ax1.set_ylabel('Temp', color=color)
ax1.plot(temp, color=color)
ax1.tick_params(axis='y', labelcolor=color)


ax2 = ax1.twinx() # instantiate a second axes that shares the same x-axis

color = 'tab:blue'
ax2.set_ylabel('Est', color=color) # we already handled the x-label with ax1
ax2.plot(result.trend, color=color)
ax2.tick_params(axis='y', labelcolor=color)

plt.savefig('sovrapposto')



plt.show()


# In[ ]:


np.savetxt('trend.csv',result.trend.values,delimiter=";")
np.savetxt('temp.csv',temp.values,delimiter=";")


# In[ ]:


import matplotlib.animation as animation
fig,ax = plt.subplots()

scat = ax.scatter(result.trend.values, temp.values)
plt.gca().invert_xaxis()
ax.set(xlabel='Estensimetro (mm)')
ax.set(ylabel='Temperatura (C)')

def update(i):
scat.set_offsets((result.trend.values[i],temp.values[i]))
return scat,

ani = animation.FuncAnimation(fig,update, repeat=True, frames=len(temp)-1, interval=10)
#writer = animation.PillowWriter(fps=15)
#ani.save('animation.gif',writer=writer)
#plt.savefig('scatterplot')




plt.show()


Debugger integrato ESP32S3

Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede  nell'ID USB della porta Jtag. Nel modulo...