Contenuto principale

Questa pagina è stata tradotta con la traduzione automatica. Fai clic qui per vedere l’originale in inglese.

Rimuovere i valori anomali dai dati sulla velocità del vento

Questo esempio mostra come leggere i dati da un canale pubblico, modificarli e visualizzare gli elementi selezionati. Nell'esempio, si modifica uno dei modelli di codice forniti dalle app MATLAB Analysis e MATLAB Visualizations. L'esempio utilizza i dati del canale 12397 ThingSpeak, che raccoglie dati meteorologici da una stazione meteorologica basata su Arduino® a Natick, MA.

Crea uno script di analisi MATLAB dal codice modello

Per rilevare e rimuovere i valori anomali nei dati sulla velocità del vento della stazione meteorologica di Natick, è possibile scrivere uno script MATLAB ® utilizzando un modello di codice.

Vai alla scheda App in ThingSpeak e seleziona Analisi MATLAB. Fare clic su Nuovo, selezionare Rimuovi valori anomali dai dati sulla velocità del vento e fare clic su Crea.

Analizza i tuoi dati

Il campo Codice MATLAB è precompilato con il codice per rilevare e rimuovere i valori anomali dai dati sulla velocità del vento delle ultime sei ore.

1) Impostare le variabili per comunicare con ThingSpeak. readChannelID è l'ID del canale pubblico che raccoglie i dati dalla stazione meteorologica. windSpeedFieldID è il campo del canale che contiene i valori della velocità del vento. Assegnare un valore a readAPIkey solo se si leggono dati da un canale privato. La stazione meteorologica è pubblica, quindi per questo esempio non impostare readAPIkey.

readChannelID = 12397;
windSpeedFieldID = 2;
readAPIKey = '';

2) Leggere i valori della velocità del vento e i timestamp delle ultime sei ore utilizzando la funzione thingSpeakRead.

[windSpeed,timeStamp] = thingSpeakRead(readChannelID,'fields',windSpeedFieldID,'NumMinutes',360,'ReadKey',readAPIKey);

3) Verificare la presenza di valori anomali nei dati sulla velocità del vento utilizzando la funzione MATLAB isoutlier. Con le impostazioni predefinite, questa funzione calcola se un valore si discosta dalla mediana del set di dati di input di oltre tre deviazioni assolute della mediana scalata. È possibile modificare gli argomenti di input per personalizzare i risultati anomali. Identificare gli indici dei punti dati anomali e gli indici dei punti dati puliti. Utilizzare questi indici per selezionare punti dati e timestamp corrispondenti a dati anomali e dati puliti.

outlierDataIndex = isoutlier(windSpeed);
cleanDataIndex = ~outlierDataIndex;

outlierData = windSpeed(outlierDataIndex);
cleanData = windSpeed(cleanDataIndex);

outlierTimeStamps = timeStamp(outlierDataIndex);
cleanTimeStamps = timeStamp(cleanDataIndex);

4) Creare orari con dati anomali e dati puliti e visualizzare il risultato dei punti dati anomali.

outlierDataTable = timetable(outlierTimeStamps,outlierData);
cleanDataTable = timetable(cleanTimeStamps,cleanData);

display(outlierDataTable,'Outlier data');
  3×1 timetable

     outlierTimeStamps      outlierData
    ____________________    ___________

    03-Jun-2019 10:20:54         17    
    03-Jun-2019 13:26:14       16.6    
    03-Jun-2019 13:39:33       16.8    

Esegui il codice cliccando su Salva ed esegui. Il campo Output visualizza i risultati.

Scrivi dati su un canale

1) Memorizza i risultati dei tuoi dati puliti scrivendoli su un canale privato. Per creare un canale ThingSpeak, vai alla scheda Canali e seleziona I miei canali. Fare clic su Nuovo canale. Selezionare la casella di controllo corrispondente e immettere i seguenti valori di impostazione del canale:

  • Nome — Cleaned Wind Speed Measurements

  • Campo 1 — Wind speed (mph)

Fare clic su Salva canale.

2) Nel campo MATLAB Codice, imposta le variabili per la scrittura sul tuo canale privato. Sostituisci i valori forniti per writeChannelID e writeAPIKey con i tuoi valori. Puoi trovare l'ID del canale e la chiave API nel pannello Informazioni sul canale sul lato destro della pagina.

% Replace with the ID of the channel to write data to.
writeChannelID = 17504;
% Enter the write API key between the ''.
writeAPIKey = '23ZLGOBBU9TWHG2H';

3) Scrivi sul tuo canale le letture precise della velocità del vento con i rispettivi timestamp.

thingSpeakWrite(writeChannelID,cleanData,'timestamp',cleanTimeStamps,'Writekey',writeAPIKey);

4) Esegui il codice cliccando su Salva ed esegui. Il grafico nel canale ThingSpeak è popolato con dati di serie temporali sulla velocità del vento senza i valori anomali calcolati. Puoi accedere al tuo canale cliccando sul link del canale nel pannello Informazioni sul canale sul lato destro della pagina.

Per scaricare i dati in formato CSV, fare clic sul pulsante Esporta dati o sulla scheda Importazione/Esporta dati. Per cancellare tutti i dati salvati nel tuo canale, clicca sulla scheda Impostazioni canale.

Calcola la media mobile

È possibile aggiungere codice al modello per analizzare ulteriormente i dati sulla velocità del vento. Oltre a rimuovere i valori anomali, un altro metodo per smussare un set di dati è calcolare la media mobile. In questo approccio, la media di un gruppo di punti dati locali viene calcolata su una finestra mobile nell'intero set di dati. Utilizza la funzione MATLAB movmean con una finestra scorrevole di cinque minuti per uniformare i dati sulla velocità del vento. Questa sezione non è inclusa nel modello di codice. Puoi includerlo nel tuo codice dopo aver chiamato thingSpeakRead.

smoothData = movmean(windSpeed,minutes(5),'SamplePoints',timeStamp);

Per salvare i nuovi dati, scrivili sul tuo canale ThingSpeak. Commenta la funzione thingSpeakWrite esistente e salva i nuovi dati della serie temporale levigata sul tuo canale.

thingSpeakWrite(writeChannelID,smoothData,'timestamp',timeStamp,'Writekey',writeAPIKey);

Per aggiornare i risultati, fai nuovamente clic su Salva ed esegui.

Vedi anche

Funzioni

Argomenti