Le système d'acquisition Gantner fournit les données sous forme de fichiers binaires propriétaires, que nous convertissons en fichiers MATLAB (*.mat, hdf5). Une fois les fichiers chargés dans MATLAB à l’aide de la fonction load ou en Python grâce à la fonction scipy.io.loadmat, les structures sont accessibles aux utilisateurs. Dans udbfHeaderudbfHeader.unit indique les unités de mesure (°C, mV, etc), tandis que udbfHeader.Name fournit le nom et le numéro du capteur, permettant ainsi de le repérer sur un arbre donné d'un site spécifique. Dans la structure udbfData, deux champs sont essentiels : udbfData.time, qui est un vecteur contenant les dates (temps POSIX) des mesures, et udbfData.data, une matrice des vecteurs de données où chaque colonne correspond à un capteur, suivant l'ordre des noms de capteurs dans udbfHeader.Name.
clearvars; clc; home;
screenSize = get(0,'ScreenSize');
liste = dir('Aquaferme*.mat');
date = [];
data = [];
for i = 1:numel(liste)
load (liste(i).name);
date = [date udbfData.time];
data = [data udbfData.data(:,2)];
end
dateTime = datetime(date, 'ConvertFrom', 'datenum');
f = figure; set(f,'Position',[0 0 screenSize(3) screenSize(4)]);
plot(dateTime,data,'r','LineWidth',3)
xlabel('date (jour/mois/année)');
ylabel('potentiel (mV)');
leg = legend('Electrode S03V02','Location','best');set(leg,'box','off')
set(gca,'Fontname','Times New Roman','FontSize',28,'linewidth',2) ;
set(gca,'color','none','YAxisLocation','left','ycolor',[0 0 0]);
set(f, 'Renderer', 'painters');
box off; axis tight;
#!/bin/python3
# -*- coding: utf-8 -*-
import numpy as np
from scipy.io import loadmat
import matplotlib.pyplot as plt
from datetime import datetime, timedelta
import matplotlib.dates as mdates
def matlab_to_date(matlab_times):
matlab_epoch = datetime(1970, 1, 1) # Set epoch to 1970-01-01
days_since_1970 = matlab_times - 719529 # 719529 is the number of days between 0000-01-01 and 1970-01-01
return [matlab_epoch + timedelta(days=days) for days in days_since_1970]
def concat_mat_files(file_list):
all_times = []
all_data = []
for file in file_list:
mat_data = loadmat(file)
times = mat_data['udbfData']['time'][0, 0]
data = mat_data['udbfData']['data'][0, 0][:, 1]
all_times.extend(times.flatten())
all_data.extend(data.flatten())
all_times = np.array(all_times)
all_data = np.array(all_data)
all_dates = matlab_to_date(all_times)
return all_dates, all_data
file_list = ['Aquaferme_2024-05-14_00-00-00.mat', 'Aquaferme_2024-05-15_00-00-00.mat', 'Aquaferme_2024-05-16_00-00-00.mat']
dates, data = concat_mat_files(file_list)
plt.figure(figsize=(12, 6))
plt.plot(dates, data, label='Electrode S03V02', marker='o', linestyle='-', markersize=2)
plt.xlabel('date (jour/mois/année)')
plt.ylabel('mV')
plt.title('Aquaferme')
plt.legend()
plt.grid(True)
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%d/%m/%Y'))
plt.gca().xaxis.set_major_locator(mdates.MonthLocator())
plt.gcf().autofmt_xdate()
plt.show()