Università degli Studi di Roma Tor...

126
Università degli Studi di Roma Tor Vergata Corso di Laurea Triennale in Ingegneria Meccanica TESI DI LAUREA DI PRIMO LIVELLO MONITORAGGIO DEL COMFORT VIBRAZIONALE SECONDO NORMA ISO 2631: RISPOSTA IN FREQUENZA DELLA COLONNA VERTEBRALE IN FUNZIONE DELLE CARATTERISTICHE ANTROPOMETRICHE Relatore: Candidato: Prof. Ing. Ettore Pennestrì Marco Nadile Correlatore: Ing. Daniele Carnevale Anno Accademico: 2009/2010

Transcript of Università degli Studi di Roma Tor...

Università degli Studi di Roma

Tor Vergata

Corso di Laurea Triennale in Ingegneria Meccanica

TESI DI LAUREA DI PRIMO LIVELLO

MONITORAGGIO DEL COMFORT

VIBRAZIONALE SECONDO NORMA ISO 2631:

RISPOSTA IN FREQUENZA DELLA COLONNA VERTEBRALE IN FUNZIONE DELLE

CARATTERISTICHE ANTROPOMETRICHE

Relatore: Candidato:

Prof. Ing. Ettore Pennestrì Marco Nadile

Correlatore:

Ing. Daniele Carnevale

Anno Accademico: 2009/2010

Ai miei genitori

"Un giorno le macchine riusciranno

a risolvere tutti i problemi, ma mai

nessuna di esse potrà porne uno."

Albert Einstein

INDICE

I

Indice

Capitolo 1 - Introduzione .................................................................................................. 7

Capitolo 2 - Descrizione del comfort vibrazionale .......................................................... 9

2.1 Presentazione ........................................................................................................... 9

2.2 Vibrazioni Trasmesse al Corpo Umano................................................................. 10

2.3 Ponderazione in Frequenza .................................................................................... 11

2.3.1 Ponderazione in Frequenza sui diversi assi ....................................................... 13

2.3.2 Modello di Allen (1978) .................................................................................... 15

Capitolo 3 - Descrizione della Norma ISO 2631 ........................................................... 17

3.1 Introduzione ........................................................................................................... 17

3.2 Campo di Applicazione ......................................................................................... 18

3.3 Vibrazioni Trasmesse al Corpo Umano................................................................. 19

3.4 Vibrazioni Trasmesse al Corpo Umano................................................................. 21

3.4.1 Ponderazione in Frequenza sui diversi assi ....................................................... 21

3.4.2 Accelerazione Quadratica Media ...................................................................... 22

3.4.3 Analisi dei valori r.m.s. ..................................................................................... 22

3.4.4 Metodo della Quarta Potenza ............................................................................ 23

3.4.5 Vibrazioni in più Direzioni ................................................................................ 23

3.4.6 r.m.s. Ponderata ................................................................................................. 25

3.4.7 Valutazione Effettiva sulla Salute ..................................................................... 27

3.4.8 Decreto Legislativo n.187 ................................................................................. 28

INDICE

II

Capitolo 4 – Strumentazione Utilizzata ........................................................................ 29

4.1 Accelerometri Phidget 1059 ................................................................................. 29

4.1.1 Strumenti ........................................................................................................... 29

4.1.2 Caratteristiche Accelerometro ........................................................................... 30

4.2 Pedana Vibrante ................................................................................................... 32

4.3 Rendering del Dispositivo ................................................................................... 35

Capitolo 5 - Acquisizione ed Elaborazione dei Dati ..................................................... 37

5.1 Posizionamento del Tester e della Strumentazione ............................................... 37

5.2 Acquisizione dei Dati ............................................................................................ 39

5.2.1 Caratteristiche Antropometriche dei Tester ..................................................... 39

5.2.2 Angoli di Inclinazione ....................................................................................... 41

5.2.3 Suddivisione dei Tester Tramite BMI ............................................................... 45

5.2.4 Prove Effettuate ................................................................................................. 46

5.3 Elaborazione dei dati ............................................................................................. 48

Capitolo 6 – Calcolo della Funzione di Trasferimento ................................................ 54

6.1 Analisi dei Valori .................................................................................................. 54

6.1.1 Modellazione del Sistema ................................................................................ 54

6.2 Esempio Applicativo ............................................................................................. 62

6.3 Modello Meccanico ............................................................................................... 64

Capitolo 7 – Conclusioni ................................................................................................. 68

INDICE

III

Appendice ......................................................................................................................... 70

Appendice [A.1] ......................................................................................................... 70

Appendice [A.2] ......................................................................................................... 85

Appendice [A.3] ....................................................................................................... 102

Appendice [A.4] ....................................................................................................... 104

Bibliografia ..................................................................................................................... 118

Siti Web Consultati........................................................................................................ 120

Indice delle Figure ......................................................................................................... 121

Indice delle Tabelle ........................................................................................................ 124

Ringraziamenti .............................................................................................................. 125

Abstract

Lo studio fatto con questa tesi si divide sostanzialmente in :

Progettare un dispositivo per lo studio del comfort vibrazionale secondo la ISO

2631;

Acquisire dati sperimentali su persone di corporatura differente;

Calcolare la Funzione di Trasferimento della colonna vertebrale in base alle

caratteristiche antropometriche;

Generare un modello meccanico affine al lavoro effettuato;

Dopo una breve descrizione sul comfort vibrazionale ed una parte descrittiva della

normativa italiana e del decreto legislativo n°187, si procede illustrando la strumentazione

utilizzata per acquisire i dati sperimentali ed il loro relativo funzionamento. Si è poi

costruito un dispositivo per poter generare le vibrazioni desiderate e procedere con vari

esperimenti su molteplici Tester. Successivamente si è proceduto con l'identificazione di

un modello matematico per comprendere al meglio la dose di vibrazione effettivamente

assorbita da una persona. Nella tesi viene descritta tutta la prassi sperimentale , la

procedura di acquisizione e successive elaborazioni di dati tramite un programma di

calcolo "Matlab". Dopo aver acquisito dati da numerose prove sperimentali, usando come

Tester persone con caratteristiche antropometriche differenti, si è proceduto con la

determinazione della Funzione di Trasferimento considerando come dati noti sole le

accelerazioni in ingresso ed in uscita del nostro modello.

Capitolo 1 Introduzione

7

Capitolo 1

Introduzione

Questo lavoro di tesi è finalizzato a riassumere i contenuti sviluppati nel corso del mio

lavoro di ricerca in Monitoraggio del Comfort Vibrazionale secondo la ISO 2631: progetto

e realizzazione di un dispositivo low cost con impostazione e validazione di un modello

predittivo in funzione delle caratteristiche antropometriche1 dell'uomo presso l’Università

degli Studi di Roma Tor Vergata.

In particolare questa attività di ricerca si è concentrata sulla realizzazione di un database

della funzione di trasferimento STH (e quindi dell’accelerazione media r.m.s. ponderata in

frequenza) in funzione delle proprietà antropometriche (1) delle persone.

La motivazione che mi ha portato ad intraprendere uno studio del comfort vibrazionale al

fine di fornire uno strumento di calcolo previsionale è stata principalmente quella, oltre

ovviamente alla passione per l’argomento, di voler vedere fondere insieme più campi di

ricerca. Infatti, problemi dell’ingegneria meccanica, della medicina, di legislazione,

dell’elettronica, di ergonomia e della teoria del controllo si fondono. Non è possibile

studiare un problema, qualunque esso sia, solo da un lato. Se si vuole proporre una

soluzione veramente vincente, bisogna esaminarlo da diversi punti di vista

contemporaneamente.

(1) Antropometriche = caratteristiche corporee : Peso, Altezza, Corporatura.

Capitolo 1 Introduzione

8

L’esposizione del lavoro si articolerà in 7 capitoli in cui si inizierà ad esporre il problema

del Comfort Vibrazionale, poi un breve escursus sulla Norma ISO 2631 che regola la

quantità di vibrazioni che possono essere assorbite dall'uomo.

Si è passato alla presentazione della strumentazione utilizzata per acquisire i dati dai Tester

e descritto le relative modifiche per ottenere dati i piu' reali possibili, un'ultima fase è stata

quella di elaborazione dei dati e calcolare una funzione di traferimento "Generica" che

determini la quantità di vibrazione assorbita dal modello in base alle sole caratteristiche

antropometriche.

Per fare questo si è pensato come un dispositivo "black box" basandoci solo sui dati in

ingresso ed uscita, ottenuti tramite valori sperimentali e poi si è usato per conferma i valori

ottenuti in letteratura.

Si è modellato il sistema anche per via meccanica, trovando la Funzione di Trasferimento

Meccanica che regola il nostro modello considerato.

Figura 1 : Modello "Black Box"

Capitolo 2 Descrizione del Comfort Vibrazionale

9

Capitolo 2

Descrizione del Comfort Vibrazionale

2.1 Presentazione

Per la prima volta in Italia dal Gennaio del 2006 è stata introdotta una Norma che

regoli la quantità di vibrazioni che puo' essere trasmessa all'uomo da un autoveicolo o da

un qualsiasi mezzo di lavoro. Questo problema è da un paio di decenni al centro di studi e

ricerche rivolte all’individuazione delle problematiche connesse all’esposizione umana a

tali sollecitazioni. Al centro degli studi finora compiuti ci sono non solo le valutazioni

mediche relative ai danni del corpo dovuti all’esposizione, ma anche tentativi di

modellazione, sia meccanica sia matematica, atti alla valutazione indiretta delle

sollecitazioni trasmesse dal piano stradale al sedile e dunque all'individuo.

Lo studio biodinamico sugli esseri umani nasce nel 1918 con Hamilton il quale

analizzò gli effetti delle vibrazioni sui lavoratori di una cava: attraverso prove sperimentali

mostrò che il corpo umano riceveva fastidio e, in un certo senso, veniva danneggiato dalle

vibrazioni stesse, ovvero ne risentiva la salute del soggetto stesso. Ulteriori ricerche hanno

confermato l'esistenza di una maggiore probabilità di accusare dolori lombari per gli autisti

di veicoli rispetto agli impiegati d'ufficio. Tuttavia, per la predisposizione degli esseri

umani a “viaggiare”, si sta avendo una maggiore attenzione verso questo problema.

Capitolo 2 Descrizione del Comfort Vibrazionale

10

2.2 Vibrazioni trasmesse al corpo umano

La misurazione delle vibrazioni è un argomento di sentito interesse soprattutto dalle

aziende che espongono i propri dipendenti a WBV, Whole Body Vibration. La WBV è un

fenomeno che porta l'intero corpo umano a vibrare e non esistono particolari punti locali.

In funzione quindi delle proprietà antropometriche della persona, dell'ampiezza e della

frequenza delle vibrazioni, gli effetti biodinamici sull'organismo possono essere molto

complessi; i maggiori danni sono causati dalle frequenze della WBV vicine alle frequenze

di risonanza delle varie parti del corpo.

La whole body vibration si genera quando un corpo è posto a contatto con una sorgente

vibrante. Contrariamente a quanto accade nella local vibration, vibrazione locale, in cui

una o più parti del corpo umano (testa, braccia, corpo) sono esposte alla vibrazione, la

WBV interessa l'intero corpo e provoca dunque effetti che si trasmettono all’interno

dell’individuo. Il termine stesso di whole body vibration implica che l’intero corpo è

sottoposto alla vibrazione e agli effetti della stessa. Sono molti gli ambienti che possono

provocare la WBV: tra questi tutti i mezzi di trasporto, sia su strada, sia in aria che in

acqua, molti mezzi operativi e addirittura alcune strutture edili. Il corpo umano è molto

sensibile al movimento: la natura della vibrazione, le caratteristiche antropometriche delle

persone e gli effetti della vibrazione stessa possono cambiare radicalmente a seconda

dell'ambiente in cui ci si trova. Queste variabili contribuiscono in maniera significativa alla

creazione di un modello causa-effetto della risposta umana alla vibrazione impressa, nel

nostro caso si è considerata solo la colonna vertebrale essendo la parte piu' sollecitata per

un conducente di autoveicoli. Diversi aspetti influenzano in maniera significativa la

Capitolo 2 Descrizione del Comfort Vibrazionale

11

risposta del corpo alle sollecitazioni ricevuta, ma sicuramente il piu' significativo è

l'interfaccia sedile-conducente, in quanto la risposta dinamica del sistema puo' essere

smorzata dal sedile prima che possa disturbare la persona.

La Whole Body Vibration consiste nel comprendere in maniera più dettagliata

l'influenza delle vibrazioni sul corpo umano. Esistono alcuni range critici di frequenza per

ogni parte del corpo (occhi, collo, spina dorsale, testa, ). Per ciò che riguarda le vibrazioni

in un veicolo possiamo affermare che l’intervallo di interesse (e quello che viene

generalmente misurato) è quello compreso tra 0,5 e 5 . È stato dimostrato che i sedili

possiedono bassi valori di risonanza e che dunque amplificano in maniera significativa gli

effetti della vibrazione per frequenze inferiori ai 10 .

La ISO 2631 ha fornito un metodo specifico per la misurazione degli effetti di vibrazioni

comprese tra 1 e 80 sul corpo umano. Sono stati studiati gli effetti della vibrazione sul

sistema muscolo-scheletrico al variare della frequenza e della forma della vibrazione:

quelle definite pericolose sono state stimate al di sotto dei 6 . Effetti dannosi sul corpo

umano, infatti, possono essere provocati dall'esposizione a WBV vicine alle frequenze di

risonanza delle varie parti del corpo. La spina dorsale ha una frequenza di risonanza di

circa 5 , quella ovvero prodotta da molte macchine per movimento terra percui è

importante studiare bene la trasmissione per costruire macchinari altamente efficienti che

limitino la propagazione di vibrazioni.

2.3 Ponderazione in Frequenza

In generale possiamo affrontare lo studio delle risposte biodinamiche degli esseri

umani attraverso due metodologie: quella statistica-sperimentale (metodo indiretto) e

Capitolo 2 Descrizione del Comfort Vibrazionale

12

quella analitica (metodo diretto). La valutazione diretta delle sollecitazioni trasmesse

all’individuo è uno degli argomenti più critici da affrontare dovendo valutare l’impedenza

del corpo umano lungo le tre direzioni principali. Invece la riduzione del fenomeno ad un

modello matematico più o meno dettagliato e più o meno specifico permette un approccio

indiretto e spesso esaustivo per la stima delle sollecitazioni trasmesse e per la prevenzione.

Il metodo sperimentale può essere classificato in base ai soggetti utilizzati nei test, dunque

in base alle caratteristiche antropometriche della persona. Le prove effettuate su soggetti di

natura e caratteristiche differenti (maschio o femmina, alto o basso, di piccola o grande

corporatura) hanno portato a risultati altrettanto differenti, in quanto le proprietà

meccaniche variano da individuo a individuo e da momento a momento. Perciò, per

cercare di ricavare parametri univoci e quindi atti a caratterizzare le risposte biodinamiche

di individui seduti in generici comportamenti, Boileau et al. (1998) introdussero:

il seat-to-head transmissibility (STH);

la driving-point mechanical impedence (DPM);

la apparent mass (AM);

ricavati da dati sperimentali selezionati appositamente; questi coefficienti di

trasmissibilità, impedenza e massa apparente sono definiti per soggetti dotati di postura

eretta, senza schienale e con i piedi appoggiati sulla piattaforma vibrante.

Parametro fondamentale per comprendere la risposta e il quantitativo di vibrazioni

assorbite da un individuo è la trasmissibilità STH, Seat To Head, che rappresenta la

funzione di trasferimento del corpo umano.

Capitolo 2 Descrizione del Comfort Vibrazionale

13

Questo parametro, non contemplato nella UNI 2631, chiarifica il fenomeno fisico e

soprattutto la risposta del corpo umano a WBV.

Nonostante siano entrati in vigore un decreto legislativo ed una normativa che

definiscono limiti e modalità di misurazione, non è ancora del tutto esplicito il fenomeno

fisico della trasmissione delle vibrazioni. La UNI 2631 [3], normativa italiana di

riferimento per l'esposizione dell'uomo alle vibrazioni, non considera infatti la trasmissione

della WBV all'interno del corpo. Questo limite porta a considerare come rilevante soltando

il quantitativo di vibrazioni in ingresso al corpo stesso. Al contrario una conoscenza con

cui la vibrazione si trasmette attraverso il corpo può dare un importante contributo alla

comprensione della risposta del corpo umano sollecitato a Whole Body Vibration.

2.3.1 Modello di Wan e Schimmels (1995)

In letteratura ci sono molti studi sulla trasmissibilità STH a livello teorico, quindi con

modelli a parametri concentrati, con modelli FEM (Finite Element Method) e multibody.

Per dare un riferimento al lavoro sperimentale viene qui esposto un ottimo modello teorico

a 4 gradi di libertà che cerca di approssimare il comportamento di un sistema uomo-

veicolo. Il modello di Wan e Schimmels (1995) collega i 4 corpi di cui è composto con

elementi molla-smorzatore come in figura 2.

Risolte le equazioni del moto nel dominio della frequenza si giunge al valore della

trasmissibilità STH, diagrammata in figura 3 insieme a dati ricavati sperimentalmente.

Capitolo 2 Descrizione del Comfort Vibrazionale

14

Figura 2 : Modello a 4 gradi di libertà di Wan e Shimmels

Figura 3 : STH del modello Wan e Shimmels

Capitolo 2 Descrizione del Comfort Vibrazionale

15

Già graficamente è possibile valutare la bontà di tale modello che approssima la

frequenza principale di risonanza di una persona seduta e segue l'andamento del grafico

sperimentale. L'approccio utilizzato in queste trattazioni è di tipo teorico-fisico: si studia e

costruisce un determinato modello cercando di seguire il senso fisico del problema.

2.3.2 Modello di Allen (1978)

Il modello considerato nella nostra trattazione seppure non ottimale come quello di Wan e

Shimmels riportato nel paragrafo precedente è stato quello di Allen.

Avendo usato solo 2 accelerometri posizionati sulla Testa e sul Sedile, si è dovuto

modellare un sistema contenente sole 2 masse, pur avendo molti limiti rispetto al modello

enunciato in precedenza.

Il metodo comprende due masse connesse in serie tramite sistemi di molle-smorzatori; in

particolare l'interfaccia uomo-sedile è modellato tramite una ulteriore coppia di molla-

smorzatore come illustrato in Figura e si considera l'input in corrispondenza del sedile

stesso di cui si trascura la massa.

Questo medoto è stato inoltre utilizzato da Cho e Yoon per valutare il comfort vibrazionale

dei veicoli in relazione ai risultati ottenuti con altri due modelli a parametri concentrati e

con il multibody.

Si riportano nella pagina seguente in tabella parametri biomeccanici utilizzati e lo schema

meccanico considerato.

Capitolo 2 Descrizione del Comfort Vibrazionale

16

Autore Parametri biomeccanici Osservazioni

Massa

(Kg)

Smorzamento

(Nm/s)

Rigidezza

(N/m)

Allen (1978) = 51.3

= 5.5

= 2807

= 318

=74300

=41000

=56.8

Eccitazione: =5sinΩt

Tabella 1 : Parametri biomeccanici

Figura 4: Modello di Allen (1978)

Capitolo 3 Norma ISO 2631

17

Capitolo 3

Descrizione Norma ISO 2631

3.1 Introduzione

La norma UNI 2631 è stata adottata come base per l'intero svolgersi della tesi, ed è una

traduzione della ISO 2631-1 (edizione maggio 1997).

Lo scopo primario della presente parte della ISO 2631 è quello di definire metodi per

quantificare le vibrazioni trasmesse al corpo intero in relazione a:

la salute umana e il benessere;

la probabilità di percezione delle vibrazioni;

l’incidenza del male dei trasporti.

La presente parte della ISO 2631 tratta le vibrazioni trasmesse al corpo intero ed

esclude gli effetti pericolosi delle vibrazioni trasmesse direttamente agli arti (per esempio

da macchine utensili portatili).

Veicoli (di aria, terra e mare), macchine (per esempio quelle usate nell’industria e in

agricoltura) e le attività industriali (quali battitura di pali e brillatura di mine), espongono

le persone a vibrazioni meccaniche periodiche, casuali e transitorie che possono interferire

con il benessere, le attività e la salute.

La ISO 2631 non contiene limiti all’esposizione alle vibrazioni. Tuttavia, sono stati

Capitolo 3 Norma ISO 2631

18

definiti metodi di valutazione che è possibile utilizzare come base per determinare tali

limiti. La ISO 2631 contiene metodi di valutazione delle vibrazioni che contengono valori

di picco occasionali (con elevati fattori di cresta). Le tre appendici forniscono informazioni

aggiornate sui possibili effetti delle vibrazioni sulla salute, sul benessere e la percezione e

sull’incidenza del male dei trasporti.

La presente parte della ISO 2631 non tratta gli effetti potenziali delle vibrazioni sulle

prestazioni umane e sulla capacità di svolgimento di attività, dato che una simile guida

dipende in modo cruciale dai dettagli ergonomici correlati all’operatore, dalla situazione e

dalla struttura dell’operazione.

Le vibrazioni sono spesso complesse, contengono numerose frequenze, si verificano in

diverse direzioni e cambiano nel corso del tempo. Gli effetti delle vibrazioni possono

essere molteplici e differenti tra i soggetti in relazione agli effetti biologici. Le vibrazioni

trasmesse al corpo intero possono provocare sensazioni, per esempio, di disagio o

malessere, influenzare le capacità prestazionali umane o presentare un rischio per la salute

e la sicurezza (per esempio danni patologici o cambiamenti psicologici).

3.2 Campo di Applicazione

La norma definisce i metodi per la misurazione di vibrazioni periodiche, casuali e

transitorie trasmesse al corpo intero. Essa indica anche i principali fattori che si uniscono

per determinare il grado al quale l’esposizione alle vibrazioni risulta accettabile.

Le appendici informative indicano l’attuale opinione e offrono una guida sui possibili

effetti delle vibrazioni sulla salute, sul benessere e sulla percezione del male dei trasporti.

Capitolo 3 Norma ISO 2631

19

L’intervallo delle frequenze considerate è:

da 0,5 a 80 per salute, benessere e percezione;

da 0,1 a 0,5 per il male dei trasporti.

3.3 Vibrazioni trasmesse al corpo umano

La grandezza primaria dell’ampiezza di vibrazione deve essere l’accelerazione. Le

vibrazioni devono essere misurate secondo un sistema di coordinate che trae origine da un

punto dal quale si considera che le vibrazioni entrino nel corpo umano. I principali sistemi

di coordinate basicentrici pertinenti sono illustrati nella Figura 5.

La norma fornisce precise indicazioni riguardo il posizionamento dei sensori, che

devono essere posti all'interfaccia tra il corpo umano e la sorgente di vibrazione e orientati

come in Figura 5. Per la trattazione di questa tesi è stato considerato solo il caso di soggetti

in posizione seduta, essendo questo il caso più interessante nell'interazione con veicoli

terrestri.

Capitolo 3 Norma ISO 2631

20

Figura 5 : Assi baricentrici del corpo umano

Si devono posizionare i trasduttori in modo da indicare le vibrazioni all'interfaccia tra il

corpo umano e la sorgente delle vibrazioni. Le vibrazioni trasmesse al corpo da un

materiale non rigido o resiliente (per esempio il cuscino del sedile) devono essere misurate

con il trasduttore interposto tra la persona e le principali aree di contatto della superficie.

Questo dovrebbe essere ottenuto assicurando i trasduttori su un gruppo di supporto

adeguato. Sono previsti anche dei possibili condizionamenti e un filtraggio del segnale a

circa 1,5 volte la massima frequenza di interesse per diminuire eventuali rumori nel

segnale stesso.

La durata delle misurazioni deve essere sufficiente ad assicurare una ragionevole

accuratezza statistica e a garantire che le vibrazioni siano tipiche delle esposizioni in corso

di valutazione. La durata delle misurazioni deve essere registrata.

Capitolo 3 Norma ISO 2631

21

3.4 Analisi delle Vibrazioni

3.4.1 Ponderazione in Frequenza sui diversi assi

Il modo in cui la WBV influenza la salute, il benessere, la percezione ed il male dei

trasporti dipende dal contenuto di frequenza delle vibrazioni. Le curve di ponderazione in

frequenza raccomandate e/o utilizzate per le varie direzioni e per le loro applicazioni sono

elencate nei prospetti 1 e 2 della norma e nelle appendici B, C e D. I valori numerici delle

curve di ponderazione sono indicati nei prospetti 3 e 4 e le definizioni esatte sono indicate

nell’appendice A. La ponderazione avviene, dunque, attraverso curve e tabelle messe a

disposizione dalla norma, e altro non sono che attenuazioni del modulo nel dominio della

frequenza.

Sono necessarie differenti ponderazioni in frequenza per i diversi assi di vibrazione. Le

ponderazioni principali in frequenza sono:

Wk per la direzione ;

Wd per le direzioni e .

Ulteriori ponderazioni, non utilizzate nelle prove sperimentali condotte, sono riportate

all'interno della norma:

Wc misurazione dello schienale del sedile;

We misurazione delle vibrazioni rotatorie;

Wj misurazione delle vibrazioni sotto il capo di una persona distesa;

Wf ponderazione in frequenza correlata al male dei trasporti.

Capitolo 3 Norma ISO 2631

22

3.4.2 Accelerazione quadratica media

La valutazione delle vibrazioni secondo la presente parte della ISO 2631 utilizza

l’accelerazione quadratica media (r.m.s.) ponderata in frequenza espressa in metri al

secondo quadrato per le vibrazioni traslatorie e in radianti al secondo quadrato

per la vibrazione rotatoria:

dove:

aw(t ) è l’accelerazione ponderata (traslatoria o rotatoria), in funzione del tempo, ;

T è la durata della misurazione, in secondi.

La norma prevede delle valutazioni per l'applicabilità del metodo base secondo un

fattore di cresta2, in quanto fornisce anche metodi alternativi in caso la valutazione base

possa sottostimare gli effetti delle vibrazioni.

3.4.3 Analisi dei valori r.m.s.

Il metodo di valutazione dei valori r.m.s. costanti tiene conto degli urti occasionali e

delle vibrazioni transienti mediante l’uso di una costante di tempo di integrazione breve.

2 Il fattore di cresta è definito come il modulo del tasso del valore di picco istantaneo del segnale di

accelerazione ponderata in frequenza al suo valore r.m.s.; il valore di picco deve essere determinato sulla

durata della misurazione, per esempio, il periodo di tempo T usato per l’integrazione del valore r.m.s.

Capitolo 3 Norma ISO 2631

23

dove:

aw(t) è l’accelerazione istantanea ponderata in frequenza;

è il tempo di integrazione per la definizione della media;

t è il tempo (variabile di integrazione);

t0 è il tempo di osservazione (tempo istantaneo).

3.4.4 Metodo della quarta potenza

Il metodo alla quarta potenza della dose delle vibrazioni è più sensibile ai picchi del

metodo di valutazione di base, usando la quarta potenza al posto della seconda potenza

dell’andamento di accelerazione come base per la definizione della media

Tali ulteriori metodi non vengono approfonditi in quanto le prove sperimentali sono

state basate interamente sul valore della 3.2 .

3.4.5 Vibrazioni in più direzioni

Il valore totale delle vibrazioni dell'accelerazione quadratica media, 3.4.2 nella pagina

precedente, nelle tre direzioni ortogonali è dato dalla formula 3.4:

Capitolo 3 Norma ISO 2631

24

dove:

sono le accelerazioni quadratiche medie rms ponderate in frequenza,

dei vari assi ortogonali;

sono fattori moltiplicativi.

L’uso del valore totale delle vibrazioni, , è raccomandato per la valutazione del

benessere. La norma consiglia dei fattori moltiplicativi unitari per la valutazione delle

vibrazioni di benessere e percezione, mentre suggerisce un valore di 1,4 per gli assi ed

per la valutazione riguardo la salute.

Capitolo 3 Norma ISO 2631

25

3.4.6 r.m.s ponderata

La valutazione quantitativa della dose di vibrazione assorbita viene documentata dalla

norma attraverso la figura 3:

Figura 6 : Zone di attenzione secondo le linee guida della salute

La zona di attenzione secondo le linee guida per la salute è indicata dalle linee

tratteggiate in Figura 6 nell’intervallo da 4 a 8 ore di esposizione. L'equazioni 3.5 e 3.6

indicano una diversa dipendenza dal tempo ma coincidono per le durate di 4 e 8 ore. In

particolare le due equazioni sono:

3 Figura B.1 pagina 21 della norma UNI 2631-1:2008

Capitolo 3 Norma ISO 2631

26

Attraverso queste espressioni è possibile proiettare l'esposizione alla WBV durante le 4

o 8 ore. Sostanzialmente, anche con poche misurazioni, è possibile arrivare ad un risultato

equivalente sulle 8 ore da confrontare con il grafico della figura 6. Il grafico tuttavia non

risulta chiaro nella valutazione dei limiti di esposizione alle vibrazioni. Per le reazioni di

benessere invece la norma è più quantitativa fornendo i seguenti valori numerici come

indicativi del grado di disagio riassunti in tabella 2.

Tabella 2 : Reazioni di Benessere alle Vibrazioni

In letteratura è possibile trovare studi più approfonditi sul benessere e sulla salute come

in tabella.

Capitolo 3 Norma ISO 2631

27

3.4.7 Valutazione effetti sulla salute

Le prove sperimentali all'interno di questa tesi sono state svolte con riferimento alla

salute del soggetto e sono stati quindi considerati i fattori moltiplicativi come indicati nel

paragrafo 3.4.5. La prolungata esposizione a WBV incrementa il rischio per la salute della

colonna vertebrale e del sistema nervoso autonomo causato dal dislocamento orizzontale e

Tabella 3 : Effetti delle Vibrazioni

Capitolo 3 Norma ISO 2631

28

dalla torsione dei segmenti della colonna stessa. Problemi frequenti in letteratura sono i

processi degenerativi dei segmenti lombari quali spondilosi deformante, osteocondrosi

intervertebrale, artrosi deformante; la UNI 2631 non esclude problemi al sistema digestivo,

al sistema genitale ed urinario e agli organi riproduttivi femminili. L'aspetto fondamentale

di tali conclusioni nei confronti di queste patologie è la metodica misurazione delle

vibrazioni durante tutto il periodo di esposizione che può risultare anche di diversi anni.

3.4.8 Decreto Legislativo n.187/2005

Il Decreto Legislativo n°187 del 19 agosto 2005 attua le direttive sulla salute e

sicurezza dei lavoratori soggetti a vibrazioni meccaniche. I limiti ammissibili degli indici

nominati fino ad ora nella trattazione sono quindi previsti dalla legge anche se non

esplicitamente citati nella normativa UNI 2631. Facendo riferimento alla sola parte relativa

alla WBV nell'articolo 3 del decreto legislativo vengono quantificati i limiti di esposizione

ed i valori di azione:

il valore limite di esposizione giornaliero, normalizzato a un periodo di riferimento

di 8 ore, è fissato a 1,15 ;

il valore d'azione giornaliero, normalizzato a un periodo di riferimento di 8 ore, è

fissato a 0,5 .

Il valore d'azione precedentemente citato indica un limite di attenzione superato il

quale è necessario iniziare un programma di riduzione delle vibrazioni. Il Decreto

Legislativo ricorda anche i fattori correttivi da utilizzare di 1,4 per gli assi ed e di

1 per l'asse .

Capitolo 4 Strumentazione Utilizzata

29

Capitolo 4

Strumentazione Utilizzata

4.1 Accelerometri Phidget 1059

Lo scopo della seguente trattazione è stato quello di ottenere un sistema low cost di

acquisizione dati per la valutazione della norma UNI 2631 durante l'intero periodo di

esposizione alla WBV.

4.1.1 Strumenti

Il sistema di misura è composto da un'antenna GPS e da un accelerometro triassiale

interfacciati ad un notebook tramite un programma compilato in C++ ed eseguito su

sistema operativo Windows. Grazie alla sua compattezza tutta l'attrezzatura può quindi

essere installata su un qualsiasi veicolo terrestre ed eseguire la raccolta dei dati; per

esempio durante un turno lavorativo di 8 ore di un autista, categoria lavorativa

maggiormente soggetta a problemi di salute causati dall'esposizione a WBV.

Segue una breve descrizione delle caratteristiche dei dispositivi.

Capitolo 4 Strumentazione Utilizzata

30

4.1.2 Caratteristiche Accelerometro

Figura 7 : Accelerometro Triassiale Phidget 1059

L'accelerometro utilizzato è un Phidget 1059 triassiale a funzionamento piezoelettrico

con interfaccia USB. Alcune delle caratteristiche principali sono riassunte nella tabella 4:

Tabella 4: Caratteristiche accelerometro Phidget 1059

Il sensore vero e proprio è un ADXL330 della Analog Device, con tecnologia MEMS4.

4 Micro Elettro-Mechanical System: sistemi elettro-meccanici utilizzati per accelerometri di precisione

Capitolo 4 Strumentazione Utilizzata

31

L'interfaccia tra il dispositivo ed il codice C++ è avvenuta direttamente con le API5

della casa Phidget. È stato così possibile settare l'accelerometro in base al numero seriale,

fare un check-up iniziale per verificare il corretto collegamento e funzionamento e settare

la sensibilità del sensore.

Il grande vantaggio di ciò è rappresentato soprattutto dalle dimensioni contenute che

l’hanno reso molto versatile nelle prove sperimentali. L'accelerometro è stato fissato

all'interno di un box in acciaio e annidato poi in un cuscino in neoprene per agevolare le

misurazione all'interfaccia tra il sedile ed il soggetto tester.

Tale piattello accelerometrico viene infatti posto sopra il sedile, per non essere influenzato

da eventuali smorzamenti del sedile stesso e deve anche essere in grado di resistere al peso

del soggetto tester.

5 Application Programming Interface

Capitolo 4 Strumentazione Utilizzata

32

4.2 Pedana Vibrante

Lo strumento utilizzato per eccitare le frequenze desiderate è una pedana vibrante

rappresentata in figura solitamente utilizzata nelle palestre di fitness.

Figura 8 : Pedana

La pedana è stata rialzata e smontata per fare in modo che i vari Tester si possano

sedere su uno dei due lati e ricevere solo vibrazioni verticali. Durante l'esecuzione delle

prime prove si è riscontrato un problema rilevante, essendo la pedana mossa da un

manovellismo di spinta ed incernierata ad un perno centrale fisso, il Tester sedendosi su un

lato della pedana era soggetto oltre che a sollecitazioni verticali anche a sollecitazioni

oblique durante l'esecuzione della prova riscontrando grosse difficoltà nel mantenere la

Capitolo 4 Strumentazione Utilizzata

33

postura desiderata e per ovviare a questo problema si utilizzavano i muscoli addominali,

falsando così il risultato della prova, essendo l'obiettivo quello di calcolare la risposta in

frequenza della colonna vertebrale e non la forza della muscolatura dei singoli Tester.

Per risolvere il problema notando che l'inclinazione massima rispetto al punto morto è di

circa 2,5° come rappresentato nelle figure tridimensionali, per un totale di 5° durante tutto

il moto si è costruito un dispositivo basculante che permette, tramite una doppia rotazione

la prima della pedana e la seconda del sedile, di restare in posizione verticale durante tutto

il moto.

Figura 9 : Angolo Superiore Pedana

Figura 10 : Angolo Inferiore Pedana

Capitolo 4 Strumentazione Utilizzata

34

La figura riporta in primo piano il dispositivo costruito per rimediare al problema descritto

in precedenza, un sedile di legno è stato collegato tramite dei perni rotandi ad una base di

legno con 4 asole che permettono di ottenere il centraggio desiderato e di poter regolare il

sedile per essere piu' vicino o piu' lontano dal perno fisso variandone così l'ampiezza di

oscillazione.

Nelle prove effettuate avendo come unico obiettivo quello di analizzare la frequenza non

prendendo in considerazione l'ampizza di oscillazione, si è fissata con due bulloni la

pedana in una posizione generica.

Figura 11 : Dispositivo Basculante

Capitolo 4 Strumentazione Utilizzata

35

4.3 Rendering del dispositivo

Attraverso l'uso di un programma "SolidWorks" usato per la modellazione e la

simulazione di qualsiasi dispositivo si è riprodotto in scala 1:1 prendendo manualmente

ogni singola misura la strumentazione utilizzata e la postura che il Tester deve ottenere

durante l'esecuzione della prova, vengono riportate di seguito alcune immagini del

dispositivo virtuale.

Figura 12: Visualizzazione Frontale 3D Figura 13: Visualizzazione dall'alto 3D

Figura 14: Visualizzazione del motore 3D Figura 15: Visualizzazione del sedile 3D

Capitolo 4 Strumentazione Utilizzata

36

Figura 16 : Tester Frontrale 3D

Figura 17 : Tester Laterale 3D

Capitolo 5 Acquisizione ed Elaborazione dei Dati

37

Capitolo 5

Acquisizione ed elaborazione dei dati

5.1 Posizionamento del Tester e della Strumentazione

Per calcolare l'accelerazione in ingresso ed in uscita dalla persona e valutare l'effetto

negativo che si ha sulla colonna vertebrale, si è posizionato un accelerometro sul sedile del

Tester ed un altro accelerometro è stato posizionato sulla testa mediante un nastro elastico,

in modo da aderire in maniera efficiente e non abbia possibilità di movimenti laterali, come

si puo' notare bene dalle figure sottostanti.

Figura 18: Sedile Figura 19: Accelerometro Testa

La Figura 17 ritrae la pedana vibrante modificata tramite l'inserimento di un sedile

rotante che permette al tester di mantenere la statura corretta durante tutta la durata della

prova, mentre nella Figura 18 è rappresentata la posizione dell'accelerometro fissato in

maniera stabile sulla Testa della persona.

Capitolo 5 Acquisizione ed Elaborazione dei Dati

38

La postura che deve essere assunta è quella da seduta, le mani vengono posizionate sulle

ginocchia per evitare che altri tipi di sollecitazioni possano in qualche modo amplificare la

frequenza eccitata e le ginocchia devono formare un angolo di 90° come avviene di solito

nelle posizioni automobilistiche assunte sia dal guidatore che dal passeggero.

Il Tester deve rimanere durante tutta l'esecuzione della prova rilassato in modo da evitare

che la contrazione di muscoli addominali o pettorali possa incidere e falsare i dati generati,

non puo' parlare e lo sguardo deve rimanere fisso in avanti come si puo' vedere in

Figura 19.

Figura 20: Postura Corretta Tester

Capitolo 5 Acquisizione ed Elaborazione dei Dati

39

5.2 Acquisizione dei dati

Il programma per l'acquisizione sperimentale dei dati accelerometrici è diviso in cinque

parti ben distinte. Come interfaccia grafica l'eseguibile apre una finestra DOS dalla quale è

possibile monitorare le operazioni in corso.

5.2.1 Input Caratteristiche Antropometriche Tester

Si inseriscono le caratteristiche corporee di ogni Tester (sesso, età, peso, altezza,

corporatura) che vengono poi salvati all'interno di un file.txt

Figura 21: Acquisizione Dati

In seguito si richiede se si vuole fare uso di un dispositivo GPS che tenga conto oltre

che del punto di partenza e di arrivo anche del tragitto percorso, siccome le prove sono

state effettuate su una pedana fissa al suolo in laboratorio si preme "0" per eliminarlo.

Capitolo 5 Acquisizione ed Elaborazione dei Dati

40

Figura 22: Dispositivo GPS

Il numero di acquisizioni puo' essere variabile e si chiede di scegliere tra 256, 512,

2048, 8192. Si è deciso di effettuarne 512 per avere un numero sufficiente di dati e non

logorare per troppo tempo il Tester soprattutto a frequenze elevate.

Per minimizzare l'errore di acquisizione dei dati visto che l'accelerazione utile al nostro

scopo è solo quella lungo l'asse z, si calcolano in precedenza gli angoli di inclinazione

dell'accelerometro sulla testa e sul sedile per poi utilizzare questi dati durante la prova,

inserendoli all'interno di una matrice di rotazione.

Figura 23: Angolatura Iniziale

Considerando il sistema di riferimento in figura è immediato calcolare la matrice di

rotazione totale per le due rotazioni possibili da calcolare.

Capitolo 5 Acquisizione ed Elaborazione dei Dati

41

Figura 24 :Sistema di riferimento dell’accelerometro

Tutto il setup deve essere effettuato a pedana ferma in quanto l'unico riferimento è

l'accelerazione gravitazionale. Con la pedana in movimento e con l'utilizzo di soli

accelerometri non è possibile fare questo tipo di misurazione, e quindi non è stato

implementato un sistema di controllo in feed-back per l'inclinazione del sedile durante

l'acquisizione dati, non avendo modo di conoscere con esattezza gli angoli di inclinazione

durante il moto. Alternativa a questo problema potrebbe essere l'utilizzo di un giroscopio o

di un sistema ottico per il continuo monitoraggio dell'inclinazione del dispositivo, ma

rimanendo nella condizione principe del progetto, ossia i costi contenuti, si è preferito fare

un unico setup iniziale a veicolo fermo.

5.2.2 Angoli di Inclinazione

Per il calcolo degli angoli di inclinazione, riferendoci alla figura sono state utilizzate

delle semplici relazioni trigonometriche:

Capitolo 5 Acquisizione ed Elaborazione dei Dati

42

dove:

"o" rappresenta l'accelerazione su un generico asse dell'accelerometro;

mentre "h" rappresenta l'accelerazione gravitazionale .

Calcolati gli angoli si possono poi utilizzare per comporre la matrice di rotazione che

considera solo due possibili rotazioni, ovvero attorno l'asse e all'asse .

Entrando quindi nella matrice 5.2 con i valori , e ricavati dall'accelerometro, si ruota

il sistema di riferimento facendo coincidere l'asse con la verticale ( ).

Figura 25: : Angoli di inclinazione dell’accelerometro

Capitolo 5 Acquisizione ed Elaborazione dei Dati

43

Figura 25: Acquisizione Dati in Tempo Reale

In real time si possono vedere i valori che vengono acquisiti dall'accelerometro nella

schermata in M-DOS, fino ad arrivare a 511 acquisizioni, poi tramite una interfaccia in

Matlab si aprono due schermate che rappresentano l'accelerazione alla testa ed al sedile

rappresentate nelle figure qui sotto.

Figura 26 : Accelerometro Sedile

Capitolo 5 Acquisizione ed Elaborazione dei Dati

44

Il programma richiede successivamente dopo aver visto i grafici prodotti se si vuole

salvare i dati acquisiti in file.txt e si può successivamente procedere con una nuova

acquisizione.

Figura 28: Salvataggio ed Inizio Nuova Prova

Figura 27 : Accelerometro Testa

Capitolo 5 Acquisizione ed Elaborazione dei Dati

45

5.2.3 Suddivisione dei Tester tramite BMI

Le prove sperimentali sono state effettuate su Tester con caratteristiche corporee molto

differenti tra loro. Si è deciso di suddividerli in base al proprio BMI ( Body Mass Index) o

IMC (Indice di Massa Corporea) che è un parametro molto utilizzato per ottenere una

valutazione generale del proprio peso corporeo. Esso mette in relazione con una semplice

formula matematica l'altezza con il peso del soggetto.

Si ottiene dividendo il peso in Kg del soggetto con il quadrato dell'altezza espressa in

metri. Il risultato di tale formula classifica il soggetto in un'area di peso che può essere:

normale - sottopeso - sovrappeso - obesità di medio grado - obesità di alto grado.

BMI CORPORATURA

< 16.5 Grave Magrezza

16-18.5 Sottopeso

18.5-25 Normale

25-30 Robusta

30-40 Obesità di grado medio

> 40 Obesità di alto grado

Tabella 5: Classificazione BMI

La valutazione è stata anche ponderata chiedendo al singolo Tester se praticasse o

meno attività anaerobiche che potessero portare all'aumento muscolare con una

conseguente maggiorazione del peso corporeo non dovuta però alla massa grassa.

Sono stati esclusi tutti i Tester che presentassero qualche disturbo alla colonna vertebrale

come "Cifosi" o "Scoliosi" dovendo trovare un modello Generico non si è dato peso alle

eccezioni che lo avrebbero sicuramente influenzato in maniera differente.

Capitolo 5 Acquisizione ed Elaborazione dei Dati

46

5.2.4 Prove effettuate

Le prove sperimentali effettuate all'interno del laboratorio sono state eseguite con

frequenze differenti per capire come reagisce la colonna vertebrale alle diverse

sollecitazioni, le sei frequenze stabilite sono 4.3 Hz – 5.15 Hz – 6.37 Hz – 7.6 Hz – 8.82

Hz – 10.05 Hz.

Ogni Tester è stato sottoposto a 18 prove, 3 per ogni frequenza stabilita, in ognuna delle

quali si sono effettuate 512 acquisizioni distanziate tra loro di 0.016 s per un totale di 8.192

s per prova.

Si riporta in tabella le caratteristiche antropometriche di tutti i Tester che hanno effettuato

la prova.

Tester Sesso Altezza (m) Peso (Kg) Età BMI Corporatura

Tester 1 M 1,71 78 23 26,67 Robusta

Tester 2 M 1,78 70 27 22,09 Normale

Tester 3 M 1,80 89 23 27,47 Robusta

Tester 4 M 1,76 68 25 21,95 Normale

Tester 5 M 1,74 92 28 30,39 Robusta

Tester 6 M 1,78 88 29 27,77 Robusta

Tester 7 M 1,91 84 24 23,02 Normale

Tester 8 M 1,85 72 25 21,04 Normale

Tester 9 M 1,73 68 32 22,72 Normale

Tester 10 M 1,80 76 23 23,46 Normale

Tester 11 M 1,74 76 26 25,10 Robusta

Tester 12 M 1,77 84 23 26,81 Robusta

Tester 13 M 1,65 62 25 22,77 Normale

Tester 14 M 1,85 78 23 22,79 Normale

Tester 15 M 1,82 78 23 23,55 Normale

Tester 16 M 1,68 75 25 26,57 Robusta

Tester 17 M 1,75 67 23 21,88 Normale

Tester 18 M 1,83 77 23 22,99 Normale

Tester 19 M 1,77 71 24 22,66 Normale

Capitolo 5 Acquisizione ed Elaborazione dei Dati

47

Tester 20 M 1,80 80 24 24,69 Normale

Tester 21 M 1,77 72 23 22,98 Normale

Tester 22 M 1,87 91 24 26,02 Robusta

Tester 23 M 1,67 68 23 24,38 Normale

Tester 24 M 1,84 85 20 25,11 Robusta

Tester 25 M 1,80 82 25 25,31 Robusta

Tester 26 M 1,79 76 23 23,72 Normale

Tester 27 M 1,77 85 24 27,13 Robusta

Tester 28 M 1,72 80 26 27,04 Robusta

Tester 29 M 1,79 76 23 23,72 Normale

Tester 30 M 1,67 61 27 21,87 Normale

Tester 31 M 1,81 87 26 26,56 Robusta

Tester 32 M 1,79 79 23 24,66 Normale

Tester 33 M 1,75 79 23 25,80 Robusta

Tester 34 M 1,78 86 23 27,14 Robusta

Tester 35 M 1,77 70 24 22,34 Normale

Tester 36 M 1,89 76 27 21,27 Normale

Tester 37 M 1,78 87 28 27,46 Robusta

Tester 38 M 1,82 76 22 22,94 Normale

Tester 39 M 1,86 82 21 23,70 Normale

Tester 40 M 1,8 84 20 25,93 Robusta

Tabella 6 : Dati Tester

Sono stati esclusi i Tester di sesso femminile perché le diverse grandezze del seno

avrebbero potuto incidere in maniera negativa amplificando la frequenza eccitata e dare

origine a dati falsati. Si sarebbe potuto risolvere il problema aumentando il numero di

accelerometri usato nelle prove e posizionadone uno all'altezza del seno, ma in questo

modo si sarebbero aumentate le masse considerate e si sarebbe dovuto usare un modello

differente da quello utilizzato.

Capitolo 5 Acquisizione ed Elaborazione dei Dati

48

5.3 Elaborazione dei dati

Per l'elaborazione dei dati si è proceduto con la stesura del codice in Matlab riportato

nella Appendice, dove il compilatore legge all'interno di una cartella i file.txt generati

durante l'esecuzione della prova. Dopo la lettura vengono graficati i dati delle accelerazioni

ottenute sulla Testa e sul Sedile che in un secondo momento vengono filtrate togliendo

l'accelerazione di gravità.

Si può facilmente notare dai grafici publicati nella parte sottostante, come era prevedibile,

l'accelerazione della Testa è superiore a quella del Sedile.

Per cercare di limitare al massimo l'errore, volendo avere solo l'accelerazione lungo l'asse z

essendo quella maggiormente dannosa per la colonna vertebrale, si è proceduto con

l'effettuare la norma del vettore in modo da eliminare l'effetto seppur minimo che si veniva

a creare sulli assi x e y dovuto ad un piccolo movimento della testa del Tester non

controllabile, perché durante l'esecuzione della prova come da Norma non si puo' fare uso

di alcun agente esterno che possa in qualche modo influenzare i dati acquisiti.

Essendo i dati lineari si è deciso di non effettuare alcun filtraggio e si puo' notare come,

nonostante questo, si abbia un andamento quasi perfettamente sinusoidale dei valori delle

accelerazioni.

Questa procedura si è dovuta ripetere per tutti i vari Tester potendo valutarli solo

sigolarmente a tutte le frequenze come si puo' notare dalla lettura del codice riportato in

Appendice.

Capitolo 5 Acquisizione ed Elaborazione dei Dati

49

Si riporato di seduito i grafici delle accelerazioni della Testa dei Tester con e senza

accelerazione di gravità nelle varie frequenze considerate.

Figura 29 : Accelerazione alla Testa non Filtrata

Figura 30: Accelerazione alla Testa Filtrata

Capitolo 5 Acquisizione ed Elaborazione dei Dati

50

Si riporato di seduito i grafici delle accelerazioni per il sedile Tester con e senza

accelerazione di gravità nelle varie frequenze considerate.

Figura 31: Accelerazione al Sedile non Filtrata

Figura 32: Accelerazione al Sedile Filtrata

Capitolo 5 Acquisizione ed Elaborazione dei Dati

51

Il Grafico successivo determina l'attendibilità o meno della prova, si considera

attendibile solo se essa supera il 70%.

Per valutare nel migliore dei modi la risposta del Tester alle vibrazioni assorbite, si è

passato dal dominio del tempo al dominio della frequenza tramite la FFT ( Fast Fourier

Transform) e si è valutato il rapporto tra l'ampiezza dello spettro del segnale sulla testa del

Tester e quella sul sedile. La decisione di prendere in considerazione il rapporto è stata

quella di voler limitare al minimo l'errore ottenuto dalla acquisizione dei dati. Da questo

rapporto si è visto chiaramente come la massa corporea influisce significativamente sull'

assorbimento delle vibrazioni, tanto maggiore è la massa tanto piu' il Tester risente della

vibrazione. Di seguito si ripotano le figure delle Ampiezze dello Spettro del Segnale

(Power) per tutte le frequenze eccitate.

Figura 33 : Attendibilità della prova

Capitolo 5 Acquisizione ed Elaborazione dei Dati

52

Figura 34 : Accelerazione al Sedile nel Dominio della Frequenza

Figura 35 : Accelerazione alla Testa nel Dominio della Frequenza

Capitolo 5 Acquisizione ed Elaborazione dei Dati

53

Sono stati analizzati, con il codice riportato in Appendice, i vari file txt generati per ogni

Tester creando un databace contenente tutti i risultati delle relative prove, osservandoli in

maniera accurata si sono scartate le prove considerate non attendibili che avrebbero potuto

falsare l'analisi successiva.

Osservando, altresì, in maniera accurata il rapporto tra l'Ampiezza dello Spettro della testa

e del sedile si è notato un andamento completamente differente, come era da aspettarselo in

teoria, tra i Tester con Corporatura Normali e quelli Robusti, questo lo si puo' facilmente

notare dal plottaggio ottenuto tramite il compilatore riportato in Figura 36.

Figura 36 : Media Tester Corporatura Normale - Robusta

Osservando che i dati sperimentali confermano ciò che si aspettava teoricamente in

letteratura, si è riportato il risultato ottenuto su un diagramma in scala semilogaritmica

ottenendo la Funzione di Trasferimento desiderata.

Capitolo 6 Calcolo della Funzione di Trasferimento

54

Capitolo 6

Calcolo della Funzione di Trasferimento

6.1 Analisi dei valori

Nel modellare i risultati ottenuti descritti nel capitolo precedente 5.3 non si è piu' utilizzata

la funzione "Armax", come è stato effettuato nelle altre tesi precedenti, avendo notato che,

per diverse frequenze a distanze molto ravvicinate, si perdevano informazioni importanti

approssimando un andamento parabolico ad una retta, cosa non reale agli andamenti

ottenuti sperimentalmente.

Si è effettuato un primo esperimento dividendo tutti i Tester in 2 grandi gruppi, " Tester

Normali" che comprendono il range di valori 18 < BMI < 25 e "Tester Robusti" che invece

comprendono i valori con BMI >= 25, il risultato ottenuto è quello che si attendeva, infatti

essendo la massa dei Tester Robusti maggiori reagiscono prima di quelli Normali.

6.1.1 Modellazione del Sistema

Avendo notato che la funzione "Armax" non risultava attendibile, la funzione di

trasferimento non si è più calcolata in modo "diretto" ma in modo "inverso" cioè partendo

dal grafico generato dopo le prove tramite "SISOTOOL" applicazione di Matlab, si è

modellato il sistema inserendo 2 coppie di poli complessi ed 1 coppia zeri complesso.

Capitolo 6 Calcolo della Funzione di Trasferimento

55

Le due funzioni di trasferimento trovate sono le seguenti:

Funzione di trasferimento ottenuta dalle "Medie dei Tester Normali" :

W =

Funzione di trasferimento ottenuta dalle "Medie dei Tester Robusti" :

W =

Per entrare piu' nello specifico, i Tester sono stati divisi in base al proprio BMI anziché

per corporatura, facendo questa distinzione si è notato che Tester con lo stesso BMI

avevano anche la stessa risposta alle sollecitazioni ricevute dall'esterno, quindi si sono

Figura 37 : Diagramma di Bode Tester Normali - Robusti

Capitolo 6 Calcolo della Funzione di Trasferimento

56

modellate le funzioni di trasferimento dei dati sperimentali ottenuti tramite SISOTOOL e si

riporta in figura i rispettivi grafici e le funzioni di trasferimento.

BMI Funzione di Trasferimento

21 W =

22 W =

23 W =

24 W =

25 W =

26 W =

27 W =

Tabella 7: Funzione di Trasferimento a seconda dei BMI

Figura 38 : Diagramma di Bode dei vari BMI

Capitolo 6 Calcolo della Funzione di Trasferimento

57

Essendo la funzione di trasferimento, costruita per tutti i vari BMI, formata da 2 coppie

di poli complessi e 1 coppia di zeri complessi abbiamo, quindi, 6 variabili da correlare con

i BMI per ottenere una relazione generica che valga per qualsiasi tipo di persona.

La Funzione di Trasferimento Generica è a seguente:

Si è utilizzato per la correlazione un toolbox di Matlab "Curve Fitting Tool" che consiste

nel correlare il vettore dei BMI con il vettore dei coefficienti A, B, C, D, E, F ,

nell'Appendice si puo' trovare per intero il codice utilizzato che chiarifica i passaggi

effettuati.

Si riportano i grafici ottenuti con i vari coefficienti ed i relativi residui, dove si puo'

facilmente constatare la validità della prova.

Capitolo 6 Calcolo della Funzione di Trasferimento

58

Figura 39 : Correlazione A vs BMI

Figura 40 : Correlazione B vs BMI

Capitolo 6 Calcolo della Funzione di Trasferimento

59

Figura 41 : Correlazione C vs BMI

Figura 42 : Correlazione D vs BMI

Capitolo 6 Calcolo della Funzione di Trasferimento

60

Figura 43 : Correlazione E vs BMI

Figura 44 : Correlazione F vs BMI

Capitolo 6 Calcolo della Funzione di Trasferimento

61

Da "Curve Fitting Tool" si sono ricavati i coefficienti diversi per i vari

coefficienti che permettono di calcolare facilmente i valori di A, B, C, D, E, F sapendo

solo il valore del BMI

Si riportano nella tabella seguente tutti i valori di :

A B C

1,967857142857143e-005 -3,511904761904711e-004 -2,989285714285924e-005

-9,057499999999999e-004 0,016446428571428 0,001479821428572

0,010847142857143 -0,178380952380949 -0,017387857142858

Tabella 9 : Valori di D, E, F nella Funzione di Traferimento Generica

D E F

-0,001790476190476 2,445238095238269e-005 -0,002584523809524

0,088614285714287 -0,001139857142857 0,125546428571428

-1,081552380952392 0,013856047619049 -1,500419047619042

Tabella 8 :Valori di A, B, C nella Funzione di Traferimento Generica

Capitolo 6 Calcolo della Funzione di Trasferimento

62

6.2 Esempio Applicativo

Un programma in matlab riportato nella Appendice permette di ottenere in output la

Funzione di Trasferimento inserendo in input solo le caratteristiche antropometriche del

Tester ( peso in "Kg", altezza in "m").

Il "Tester Prova" preso in considerazione ha le seguenti caretteristiche antropometriche :

Peso : 88 Kg;

Altezza : 1,82 m;

BMI : 26,57;

La Funzione di Trasferimento specifica viene calcolata automaticamente dal programma,

infatti, inserendo i valori del BMI nella equazione specifica del coefficiente si possono

calcolare tutti i coefficienti desiderati.

A = (0.00001967857142857143* ) +(-0.0009057499999999*BMI)

+0.010847142857143;

B = (-0.0003511904761904711* ) +(+0.016446428571428*BMI)

-0.178380952380949;

C = (0.000000003976190476* ) +(-0.00000014294285714*BMI)

+0.000001530695238;

D = (-0.0000032290476* ) +(+ 0.000157843714285*BMI)

-0.001900442666667;

E = (- 0.000407976190476* ) +(+ 0.002037664285714*BMI)

-0.023580380952381;

F = (-0.004375000000000* ) +(+ 0.214160714285715*BMI)

-2.581971428571434;

Capitolo 6 Calcolo della Funzione di Trasferimento

63

La Funzione di Traferimento ottenuta per questo Tester è la seguente:

Graficando la funzione di Tasferimento otteniamo il seguente diagramma di Bode:

Figura 45 : Diagramma di Bode del Tester Prova

Il primo picco ottenuto a frequenze non molto elevate ci conferma ciò che si aspettava

in letteratura, infatti, il Tester essendo "Robusto" assorbe prima la vibrazione ed in maniera

piu' elevata rispetto a quella di un Tester Normale.

Capitolo 6 Calcolo della Funzione di Trasferimento

64

6.3 Modello Meccanico

Rapprensentazione dello Schema Meccanico ottenuto nel modellare il sistema con 2 coppie

di poli complessi:

Figura 46 : Modello Meccanico

Si puo' scrivere un sistema di equazioni del Modello Meccanico rappresentato in figura:

La relazione che ci permette di ottenere la Funzione di Trasferimento Meccanica:

( 6, 1)

Capitolo 6 Calcolo della Funzione di Trasferimento

65

Adottando questa simbologia:

La matrice serve per assegnare l’uscita desiderata, nel nostro caso

La matrice viene costruita con i termini noti del sistema:

Si sono effettuati i calcoli della equazione (6,1) attraverso l'uso del programma "Maple11"

ottenendo la seguente relazione:

Y = (k1 k2 + k1 s c2 + m1 α + s c1 α+ s c2 α +k1 α + k2 α + s c1 k2 + c1 c2 +

m1 β + c1 β + c2 β + k1 s β + k2 s β) /// ( s c1 k2 + k2 m2 +

s c2 α + k1 k2 + k1 α + m1 m2 + m1 c2 + m1 β + m1 k2 +

m1 α + c1 m2 + c1 c2 + c1 β + c2 m2 + c2 β+ s c1 α + k1

m2 + k1 s c2 + k1 s β + k2 s β + k2 α);

Capitolo 6 Calcolo della Funzione di Trasferimento

66

Dividiamo la funzione di trasferimento ottenuta dal modello meccanico in numeratore e

denominatore :

NUMERATORE = m1 β + (m1 α + c1 β + c2 β + c1 c2) + (k1 β + c2 α+

c1 k + c2 k1 + k2 β+ c1 α) s + k1 α + k1 k2 + k2 α;

DENOMINATORE = m1 m2 + (c1 m2 + c2 m2 + m1 c2 + m1 β) +

(m1k2 + k2 m2 + c2 β + c1 β + m1 α + c1 c2 +

k1 m2) + (k1β+ c2 α+ c1 k2 + c2 k1 + k2 β + c1 α) s+

k1 α+ k1 k2 + k2 α ;

Per trovare i valori dei coefficienti della funzione di traferimento basta fare una

uguaglianza tra il "Modello Meccanico" ed una "Funzione di Trasferimento Generica":

W =

(6,2)

Capitolo 6 Calcolo della Funzione di Trasferimento

67

Questo metodo puo' essere interpretato sia in maniera "diretta" assumendo come dati i

valori di e si trovano i coefficienti della funzione di

trasferimento.

La stessa formula puo' essere usata anche in maniera "indiretta", cioè, partendo dai valori

della funzione di trasferimento ottenuti sperimentalmente si ricavano

.

Il metodo "indiretto" è molto utile perchè può essere usato come verifica che, i dati

sperimentali ottenuti, siano corretti.

Capitolo 7 Conclusioni

68

Capitolo 7

Conclusioni

Gli obbiettivi che si erano preposti con questa tesi, sono stati tutti ampiamente

raggiunti. La creazione di un dispositivo Low Cost per il monitoraggio del comfort

vibrazionale è stato realizzato in maniera soddisfacente, permettendo di suddividere

l'analisi in maniera specifica lungo il solo asse z e non dovendo tenere conto dei disturbi

lungo gli assi x e y che invece venivano generati in maniera significativa quando le prove

sono state effettuate su un autoveicolo.

L'uso degli accelerometri Phidget 1059 è stato molto soddisfacente, essendo un dispositivo

estremamente semplice da utilizzare e, seppur di piccolissime dimensioni, estremamente

efficace.

L'acquisizione dei dati è stata molto ampia, avendo utilizzato 40 Tester con caratteristiche

antropometriche molto differenti tra loro, la grande disponibilità di dati ha permesso uno

studio piu' approfondito consentendo anche l'eliminazione di alcuni dati che potevano

sembrare poco attendibili.

La "Funzione di Trasferimento Generica" ottenuta tramite "Sisotool", applicazione di

Matlab, è stato un ottimo risultato raggiunto, infatti, si puo' conoscere la risposta in

frequenza della colonna vertebrale avendo come parametri in input solo le caratteristiche

Capitolo 7 Conclusioni

69

antropometriche del Tester.

Oltre a quella sperimentale, si è ricavata, anche, una funzione di trasferimento meccanica,

considerando un semplice modello molla smorzatore costituito da 2 masse, si possono

ricavare in maniera molto semplice i valori di , , .

Un utile approfondimento potrebbe essere quello di usare per l'acquisizione dei dati

accelerometri piu' precisi, in questo modo si diminuisce il tempo di acquisizione che per gli

accelerometri phidget è stato impostato a 0.016 s. In questo modo si avrebbero maggiori

informazioni nello stesso intervallo temporale, limitando al minimo le perdite di segnale e

lo scarto di prove errate.

Un altro approfondimento potrebbe essere quello di utilizzare un numero maggiore di

accelerometri in modo da poterli posizionare su diverse parti del corpo ed avere un

confronto con i dati ottenuti. Considerando solo Testa e Sedile, con piu' accelerometri si

potrebbe valutare, anche, in che maniera influisca la grandezza del seno per Tester di sesso

femminile nella risposta in frequenza della colonna vertebrale.

Appendice

70

APPENDICE :

[A.1] Codice Acquisizione Dati

Programma utilizzato per l'acquisizione dei dati sperimentali attraverso gli

accelerometri e creazione di un file txt per il salvataggio dei dati.

%%%%%%%%% %% CODICE ACQUISIZIONE DATI %%%%%%%%%%% 1

2

#include "stdafx.h" 3

#include "phidget21.h" 4

#include <windows.h> 5

#include "GarXfaceAll.h" 6

#include <imsl.h> 7

#include <sstream> 8

#include <direct.h> 9

10

using namespace std; 11

12

d_complex *seat;d_complex *head; 13

int stat2 = mkdir("dati_temp"); 14

15

int NUM; 16

int nogps=0; 17

double teta_1, teta_2, teta_3; 18

double phi_1, phi_2, phi_3; 19

double acc1_x, acc1_y, acc1_z; 20

double acc2_x, acc2_y, acc2_z; 21

double acc3_x, acc3_y, acc3_z; 22

23

GarXface4::Gps gps; 24

int valid; 25

double Latitude,Longitude,ve,vn,vu,speed,Alt; 26

double lat_sup=0; 27

double lat_inf=0; 28

double lon_sup=0; 29

double lon_inf=0; 30

double sum_vel=0; 31

32

Appendice

71

tm* ptm; 33

34

CPhidgetAccelerometerHandle accel_1 = 0; 35

CPhidgetAccelerometerHandle accel_2 = 0; 36

CPhidgetAccelerometerHandle accel_3 = 0; 37

38

//Attesa in frazioni di secondo 39

void wait(double seconds) 40

clock_t endwait; 41

endwait=clock()+seconds*CLOCKS_PER_SEC; 42

while (clock()<endwait); 43

44

45

//Calcola la FFT del segnale 46

/*int FFT(double x[],double y[],double z[],double tempo[],int c) 47

48

FILE* fft; 49

string name; 50

ostringstream file; 51

file <<"dati_temp\\fft_"<<c<<".txt"; 52

name= file.str(); 53

file.str(""); 54

fft=fopen(name.c_str(),"w"); 55

56

FILE* seathead=fopen("dati_temp\\seat_head.txt","w"); 57

58

double dt=0; 59

60

d_complex *com_accz=new d_complex [NUM]; 61

d_complex *com_accx=new d_complex [NUM]; 62

d_complex *com_accy=new d_complex [NUM]; 63

64

for(int i=0;i<NUM;i++) 65

66

com_accz[i].re=z[i]; 67

com_accz[i].im=0.000000; 68

com_accx[i].re=x[i]; 69

com_accx[i].im=0.000000; 70

com_accy[i].re=y[i]; 71

com_accy[i].im=0.000000; 72

73

74

Appendice

72

for (int i=1;i<NUM;i++) 75

//printf("i: %i\n",i); 76

dt=dt +(tempo[i]-tempo[i-1]); 77

dt=dt/NUM; 78

79

double *freq_max=new double; 80

*freq_max=1/(2*dt); 81

printf("Fourier %i. (max freq %.1f Hz) \n",c,*freq_max); 82

delete freq_max; 83

84

d_complex *accfz = imsl_z_fft_complex(NUM,com_accz, 0); 85

d_complex *accfx = imsl_z_fft_complex(NUM,com_accx, 0); 86

d_complex *accfy = imsl_z_fft_complex(NUM,com_accy, 0); 87

if(c==2) 88

head=accfz; 89

if(c==3) 90

seat=accfz; 91

92

delete [] com_accz; 93

delete [] com_accx; 94

delete [] com_accy; 95

96

double *frequenza=new double; 97

98

for(int i=0;i<NUM/2;i++) 99

*frequenza=i/(dt*NUM); 100

fprintf(fft,"frequenza: %f x: %f y: %f z: %f\n",*frequenza, 101

abs(accfx[i].re),abs(accfy[i].re),abs(accfz[i].re)); 102

if(c==3) 103

fprintf(seathead,"frequenza: %f seat-to-head: %f\n", 104

*frequenza,abs(head[i].re/seat[i].re)); 105

106

107

fclose(fft); fclose(seathead); 108

delete frequenza; 109

return 0; 110

*/ 111

112

//Dati gps 113

int GPS() 114

GarXface4::PVTdata *p; 115

p= gps.GetPVTdata(); 116

Latitude=GarXface4::Math::WGS84::radiansToDegrees(p->GetLatitude()); 117

Appendice

73

Longitude=GarXface4::Math::WGS84::radiansToDegrees(p->GetLongitude()); 118

Alt=p->GetAltitude(); //Altitudine 119

ve=p->GetVelocityEast(); //Velocità verso est 120

vn = p->GetVelocityNorth(); //Velocità verso nord 121

vu = p->GetVelocityUp();//Velocità verso l'alto 122

speed = GarXface4::Math::Velocity::calculateSpeed(ve,vn,vu)*3.6; 123

//sum_vel=sum_vel+speed; 124

valid=p->GetValidData(); 125

//Acquisisce il tempo dal GPS 126

bool valore=TRUE; 127

long timeRaw = GarXface4::Math::UTC::GarminTimeToLongTime 128

(p- >GetWnDays(), 129

p->GetTimeOfWeek(),p->GetLeapSeconds(),valore==TRUE); 130

time_t tempo=timeRaw; 131

ptm = localtime ( &tempo ); 132

return 0; 133

134

135

//Controllo del collegamento dei dispositivi 136

int linking () 137

int result_1,result_2,result_3; 138

const char *err; 139

//get the program to wait for an accelerometer device to be attached 140

printf("\nCHECK DISPOSITIVI \n\n"); 141

if((result_1=CPhidget_waitForAttachment((CPhidgetHandle)accel_1, 1000))) 142

CPhidget_getErrorDescription(result_1, &err); 143

printf("Problema con dispositivo num 52305: %s\n", err); 144

145

if((result_2=CPhidget_waitForAttachment((CPhidgetHandle)accel_2, 1000))) 146

CPhidget_getErrorDescription(result_2, &err); 147

printf("Problema con dispositivo num 50742: %s\n", err); 148

149

if((result_3=CPhidget_waitForAttachment((CPhidgetHandle)accel_3, 1000))) 150

CPhidget_getErrorDescription(result_3, &err); 151

printf("Problema con dispositivo num 50399: %s\n", err); 152

153

return 0; 154

155

156

//Identifica il numero seriale del dispositivo 157

int serial() 158

int serial_1,serial_2,serial_3; 159

CPhidgetHandle phid_1=(CPhidgetHandle)accel_1; 160

Appendice

74

CPhidget_getSerialNumber(phid_1, &serial_1); 161

printf("Serial Number accel_1: %10d\n", serial_1); 162

//Numero seriale del dispositivo 163

CPhidgetHandle phid_2=(CPhidgetHandle)accel_2; 164

CPhidget_getSerialNumber(phid_2, &serial_2); 165

printf("Serial Number accel_2: %10d\n", serial_2); 166

//Numero seriale del dispositivo 167

CPhidgetHandle phid_3=(CPhidgetHandle)accel_3; 168

CPhidget_getSerialNumber(phid_3, &serial_3); 169

printf("Serial Number accel_3: %10d\n", serial_3); 170

return 0; 171

172

173

//Trasferimento dei file in dati 174

int trasferimento(int prove) 175

string name; 176

ostringstream file; 177

178

file <<"dati\\prova_"<<prove; 179

name= file.str(); 180

file.str(""); 181

int stat = mkdir(name.c_str());//Crea una cartella 182

183

file <<"dati\\prova_"<<prove<<"\\acc1.txt"; 184

name= file.str(); 185

file.str(""); 186

CopyFile("dati_temp\\acc1.txt",name.c_str(), FALSE); 187

188

file <<"dati\\prova_"<<prove<<"\\acc2.txt"; 189

name= file.str(); 190

file.str(""); 191

CopyFile("dati_temp\\acc2.txt",name.c_str(), FALSE); 192

193

file <<"dati\\prova_"<<prove<<"\\acc3.txt"; 194

name= file.str(); 195

file.str(""); 196

CopyFile("dati_temp\\acc3.txt",name.c_str(), FALSE); 197

198

file <<"dati\\prova_"<<prove<<"\\gps.txt"; 199

name= file.str(); 200

file.str(""); 201

CopyFile("dati_temp\\gps.txt",name.c_str(), FALSE); 202

203

Appendice

75

/*file <<"dati\\prova_"<<prove<<"\\fft_1.txt"; 204

name= file.str(); 205

file.str(""); 206

CopyFile("dati_temp\\fft_1.txt",name.c_str(), FALSE); 207

208

file <<"dati\\prova_"<<prove<<"\\fft_2.txt"; 209

name= file.str(); 210

file.str(""); 211

CopyFile("dati_temp\\fft_2.txt",name.c_str(), FALSE); 212

213

file <<"dati\\prova_"<<prove<<"\\fft_3.txt"; 214

name= file.str(); 215

file.str(""); 216

CopyFile("dati_temp\\fft_3.txt",name.c_str(), FALSE); 217

218

file <<"dati\\prova_"<<prove<<"\\seat_head.txt"; 219

name= file.str(); 220

file.str(""); 221

CopyFile("dati_temp\\seat_head.txt",name.c_str(), FALSE); 222

223

file <<"dati\\prova_"<<prove<<"\\acc1puro.txt"; 224

name= file.str(); 225

file.str(""); 226

CopyFile("dati_temp\\acc1puro.txt",name.c_str(), FALSE); 227

228

file <<"dati\\prova_"<<prove<<"\\acc3puro.txt"; 229

name= file.str(); 230

file.str(""); 231

CopyFile("dati_temp\\acc3puro.txt",name.c_str(), FALSE);*/ 232

233

return 0; 234

235

236

//Dati del soggetto tester 237

int tester() 238

int *peso=new int; int *alt=new int; char *sesso=new char; 239

int *età=new int; char *corp=new char; 240

int *dist=new int; int *chassy=new int; 241

//int *gradi=new int; 242

FILE*tester=fopen("dati\\tester.txt","w"); 243

244

printf("\nIMPOSTA DATI TESTER\n\n"); 245

SESSO: 246

Appendice

76

printf ("\nSesso (m/f): "); 247

scanf( "%c",sesso); 248

getchar(); 249

if(*sesso!='m') 250

if(*sesso!='f') 251

goto SESSO; 252

fprintf(tester,"Sesso: %c \n",*sesso); 253

ETÀ: 254

printf ("\nEta' : "); 255

scanf( "%d", età); 256

getchar(); 257

if(*età<=0) 258

goto ETÀ; 259

fprintf(tester,"\nEtà: %i anni\n",*età); 260

PESO: 261

printf ("\nPeso (kg): "); 262

scanf( "%d", peso); 263

getchar(); 264

if(*peso<=0) 265

goto PESO; 266

fprintf(tester,"\nPeso: %i Kg\n",*peso); 267

ALT: 268

printf ("\nAltezza (cm): "); 269

scanf( "%d", alt); 270

getchar(); 271

if(*alt<=0) 272

goto ALT; 273

fprintf(tester,"\nAltezza: %i cm\n",*alt); 274

CORPORATURA: 275

printf ("\nCorporatura: magro (M), normale (N) o robusto (R): "); 276

scanf( "%c",corp); 277

getchar(); 278

if(*corp!='M') 279

if(*corp!='N') 280

if(*corp!='R') 281

goto CORPORATURA; 282

fprintf(tester,"\nCorporatura: %c \n",*corp); 283

/*INCLINAZIONE: 284

printf ("\nInclinazione schienale (gradi): "); 285

scanf( "%d", gradi); 286

getchar(); 287

if(*gradi<=0) 288

goto INCLINAZIONE; 289

Appendice

77

fprintf(tester,"\nInclinazione schienale: %i gradi\n",*gradi);*/ 290

fclose (tester); 291

292

delete peso;delete dist;delete sesso; 293

delete chassy;delete alt;delete età; 294

delete corp; 295

//delete gradi; 296

return 0; 297

298

299

//Filtro del segnale 300

/*int filtro(double x[],double y[],double z[]) 301

302

double *xfilt=new double [NUM]; 303

double *yfilt=new double [NUM]; 304

double *zfilt=new double [NUM]; 305

306

for (int i=0;i<3;i++) 307

xfilt[i]=0; yfilt[i]=0; zfilt[i]=0; 308

309

for (int i=3;i<NUM;i++) 310

xfilt[i]=-(- 1.473*xfilt[i-1] + 0.3325*xfilt[i-2] + 0.1675*xfilt[i-3] 311

+ 1.608*x[i] - 1.557*x[i-1] - 1.608*x[i-2] + 1.558*x[i-3]); 312

yfilt[i]=-(- 1.473*yfilt[i-1] + 0.3325*yfilt[i-2] + 0.1675*yfilt[i-3] 313

+ 1.608*y[i] - 1.557*y[i-1] - 1.608*y[i-2] + 1.558*y[i-3]); 314

zfilt[i]=-(- 1.473*zfilt[i-1] + 0.3325*zfilt[i-2] + 0.1675*zfilt[i-3] 315

+ 1.608*z[i] - 1.557*z[i-1] - 1.608*z[i-2] + 1.558*z[i-3]); 316

317

for (int i=0;i<NUM;i++) 318

x[i]=xfilt[i]; y[i]=yfilt[i]; z[i]=zfilt[i]; 319

320

delete [] xfilt; delete [] yfilt; delete [] zfilt; 321

322

Transfer function: 323

1.608 z^3 - 1.557 z^2 - 1.608 z + 1.558 324

--------------------------------------- 325

z^3 - 1.473 z^2 + 0.3325 z + 0.1675 326

327

return 0; 328

*/ 329

330

//Acquisizione dati 331

int data() 332

Appendice

78

333

FILE* acc1= fopen("dati_temp\\acc1.txt","w"); 334

FILE* acc2= fopen("dati_temp\\acc2.txt","w"); 335

FILE* acc3= fopen("dati_temp\\acc3.txt","w"); 336

FILE* datgps=fopen("dati_temp\\gps.txt","w"); 337

338

fprintf(datgps,"type,time,latitude,longitude,altitude,speed\n"); 339

340

double *tempo=new double[NUM]; 341

342

double *y_1=new double [NUM];double *y_2=new double [NUM]; 343

double *y_3=new double [NUM]; 344

double *x_1=new double [NUM];double *x_2=new double [NUM]; 345

double *x_3=new double [NUM]; 346

double *z_1=new double [NUM];double *z_2=new double [NUM]; 347

double *z_3=new double [NUM]; 348

349

printf("\nPremere invio per iniziare l'acquisizione\n\n"); 350

getchar(); 351

352

clock_t clock(); 353

354

for(int i=0;i<NUM;i++) 355

tempo[i]=0.001*(clock()/(CLOCKS_PER_SEC/1000)); 356

//printf("tempo %f\n",tempo[i]); 357

if(nogps==0) 358

GPS(); 359

if(Latitude>lat_sup|Longitude>lon_sup|Latitude<lat_inf|Longitude<lon_inf) 360

361

fprintf (datgps,"T, %d/%d/%d %2d:%02d:%02d, ",1900+(ptm->tm_year), 362

(ptm->tm_mon)+1,ptm->tm_mday, (ptm->tm_hour+1)%24, 363

ptm->tm_min,ptm->tm_sec); 364

fprintf(datgps,"%f, %f, %.3f, %.3f\n",Latitude,Longitude,Alt,speed); 365

//printf("Lat: %f Long: %f\n",Latitude,Longitude); 366

lat_sup=Latitude+0.0002; 367

lat_inf=Latitude-0.0002; 368

lon_sup=Longitude+0.0002; 369

lon_inf=Longitude-0.0002; 370

371

//MATRICE DI ROTAZIONE 1 (macchina) 372

CPhidgetAccelerometer_getAcceleration(accel_1,0,&acc1_y); 373

CPhidgetAccelerometer_getAcceleration(accel_1,1,&acc1_x); 374

CPhidgetAccelerometer_getAcceleration(accel_1,2,&acc1_z); 375

Appendice

79

376

x_1[i]=-acc1_y*sin(teta_1)*sin(phi_1)+acc1_x*cos(phi_1)+ 377

acc1_z*cos(teta_1)*sin(phi_1); 378

y_1[i]=acc1_y*cos(teta_1)+acc1_z*sin(teta_1); 379

z_1[i]=-acc1_y*sin(teta_1)*cos(phi_1)-acc1_x*sin(phi_1)+ 380

acc1_z*cos(teta_1)*cos(phi_1); 381

382

//Dati testa senza matrice rotazione 383

CPhidgetAccelerometer_getAcceleration(accel_2,0,&acc2_y); 384

CPhidgetAccelerometer_getAcceleration(accel_2,1,&acc2_x); 385

CPhidgetAccelerometer_getAcceleration(accel_2,2,&acc2_z); 386

acc2_y=-acc2_y; //perchè montato al contrario 387

acc2_x=-acc2_x; //perchè montato al contrario 388

x_2[i]=acc2_x; 389

y_2[i]=acc2_y; 390

z_2[i]=acc2_z; 391

392

//MATRICE DI ROTAZIONE 3 (sedile) 393

CPhidgetAccelerometer_getAcceleration(accel_3,0,&acc3_y); 394

CPhidgetAccelerometer_getAcceleration(accel_3,1,&acc3_x); 395

CPhidgetAccelerometer_getAcceleration(accel_3,2,&acc3_z); 396

397

x_3[i]=-acc3_y*sin(teta_3)*sin(phi_3)+acc3_x*cos(phi_3)+ 398

acc3_z*cos(teta_3)*sin(phi_3); 399

y_3[i]=acc3_y*cos(teta_3)+acc3_z*sin(teta_3); 400

z_3[i]=-acc3_y*sin(teta_3)*cos(phi_3)-acc3_x*sin(phi_3)+ 401

acc3_z*cos(teta_3)*cos(phi_3); 402

403

printf("num: %i x: %.2f y: %.2f z: %.2f\n",i,x_2[i],y_2[i],z_2[i]); 404

405

//Tempo di attesa in secondi 406

wait(0.016); 407

408

printf("\n"); 409

410

//FILTRAGGIO DEL SEGNALE 411

//filtro(x_1,y_1,z_1); 412

//filtro(x_2,y_2,z_2); 413

//filtro(x_3,y_3,z_3); 414

415

for(int i=0;i<NUM;i++) 416

fprintf (acc1,"tempo: %.3f x: %.3f y: %.3f z: %.3f\n", 417

tempo[i],x_1[i]*9.81,y_1[i]*9.81,z_1[i]*9.81); 418

Appendice

80

fprintf (acc2,"tempo: %.3f x: %.3f y: %.3f z: %.3f\n", 419

tempo[i],x_2[i]*9.81,y_2[i]*9.81,z_2[i]*9.81); 420

fprintf (acc3,"tempo: %.3f x: %.3f y: %.3f z: %.3f\n", 421

tempo[i],x_3[i]*9.81,y_3[i]*9.81,z_3[i]*9.81); 422

423

//TRASFORMATA DI FOURIER 424

/*FFT(x_1,y_1,z_1,tempo,1); 425

FFT(x_2,y_2,z_2,tempo,2); 426

FFT(x_3,y_3,z_3,tempo,3);*/ 427

428

//Richiama il programma gnuplot e 429

//stampa a video le fft appena calcolate 430

//system("wgnuplot.exe plot.txt"); 431

432

delete [] x_1;delete [] x_2;delete [] x_3; 433

delete [] y_1;delete [] y_2;delete [] y_3; 434

delete [] z_1;delete [] z_2;delete [] z_3; 435

436

fclose(acc1); 437

fclose(acc2); 438

fclose(acc3); 439

fclose(datgps); 440

441

return 0; 442

443

444

void inclinazione() 445

printf("\nFermare la macchina e premere invio\n\n"); 446

getchar();getchar();int COUNT=11; 447

double *x1=new double [COUNT];double *y1=new double [COUNT]; 448

double *z1=new double [COUNT]; 449

double *x2=new double [COUNT];double *y2=new double [COUNT]; 450

double *z2=new double [COUNT]; 451

double *x3=new double [COUNT];double *y3=new double [COUNT]; 452

double *z3=new double [COUNT]; 453

wait(0.3); 454

x1[0]=0; y1[0]=0; z1[0]=0; x2[0]=0; y2[0]=0; z2[0]=0; 455

x3[0]=0; y3[0]=0; z3[0]=0; 456

for(int i=1;i<COUNT;i++) 457

CPhidgetAccelerometer_getAcceleration(accel_1,0,&acc1_y); 458

CPhidgetAccelerometer_getAcceleration(accel_1,1,&acc1_x); 459

CPhidgetAccelerometer_getAcceleration(accel_1,2,&acc1_z); 460

x1[i]=acc1_x +x1[i-1]; y1[i]=acc1_y +y1[i-1]; z1[i]=acc1_z +z1[i-1]; 461

Appendice

81

CPhidgetAccelerometer_getAcceleration(accel_2,0,&acc2_y); 462

CPhidgetAccelerometer_getAcceleration(accel_2,1,&acc2_x); 463

CPhidgetAccelerometer_getAcceleration(accel_2,2,&acc2_z); 464

x2[i]=acc2_x +x2[i-1]; y2[i]=acc2_y +y2[i-1]; z2[i]=acc2_z +z2[i-1]; 465

CPhidgetAccelerometer_getAcceleration(accel_3,0,&acc3_y); 466

CPhidgetAccelerometer_getAcceleration(accel_3,1,&acc3_x); 467

CPhidgetAccelerometer_getAcceleration(accel_3,2,&acc3_z); 468

x3[i]=acc3_x +x3[i-1]; y3[i]=acc3_y +y3[i-1]; z3[i]=acc3_z +z3[i-1]; 469

wait(0.016); 470

//Fa una media su 10 valori per minimizzare l'errore 471

acc1_y=y1[COUNT-1]/(COUNT-1); acc1_x=x1[COUNT-1]/(COUNT-1); 472

acc1_z=z1[COUNT-1]/(COUNT-1); 473

acc2_y=y2[COUNT-1]/(COUNT-1); acc2_x=x2[COUNT-1]/(COUNT-1); 474

acc2_z=z2[COUNT-1]/(COUNT-1); 475

acc3_y=y3[COUNT-1]/(COUNT-1); acc3_x=x3[COUNT-1]/(COUNT-1); 476

acc3_z=z3[COUNT-1]/(COUNT-1); 477

//Calcola l'angolo di inclinazione dei dispositivi 478

teta_1=-asin(acc1_y/sqrt(pow(acc1_y,2)+pow(acc1_z,2))); 479

phi_1=-asin(acc1_x/sqrt(pow(acc1_x,2)+pow(acc1_z,2))); 480

teta_2=-asin(acc2_y/sqrt(pow(acc2_y,2)+pow(acc2_z,2))); 481

phi_2=-asin(acc2_x/sqrt(pow(acc2_x,2)+pow(acc2_z,2))); 482

teta_3=-asin(acc3_y/sqrt(pow(acc3_y,2)+pow(acc3_z,2))); 483

phi_3=-asin(acc3_x/sqrt(pow(acc3_x,2)+pow(acc3_z,2))); 484

485

printf("Inclinazione accelerometro chassy: phi= %.1f gradi teta=%.1f gradi\n", 486

phi_1*180/3.1415,teta_1*180/3.1415); 487

printf("Inclinazione accelerometro sedile: phi= %.1f gradi teta=%.1f gradi\n", 488

phi_3*180/3.1415,teta_3*180/3.1415); 489

printf("Inclinazione accelerometro testa : phi= %.1f gradi teta=%.1f gradi\n", 490

phi_2*180/3.1415,teta_2*180/3.1415); 491

492

delete [] x1;delete [] y1;delete [] z1; 493

delete [] x2;delete [] y2;delete [] z2; 494

delete [] x3;delete [] y3;delete [] z3; 495

496

497

int main() 498

499

int stat = mkdir("dati"); 500

int prove=0; 501

printf("\n-SOFTWARE PER ACQUISIZIONE DATI DA ACCELEROMETRI 502

PHIDGET-\n\n"); 503

char nuova;char buona; 504

Appendice

82

505

//Dati del tester 506

tester(); 507

508

GarXface4::GpsUsbDevice usbDev; 509

SelectPort: 510

printf("\n\nSeleziona il dispositivo GPS:\n"); 511

printf("(selezionare 0 per procedere senza GPS)\n\n"); 512

GarXface4::UsbDeviceNameList lst; 513

int p; 514

int c = lst.GetCount(); 515

for(int i=0; i<c; i++) 516

GarXface4::UsbDeviceName *n; 517

n = lst[i]; 518

printf("%i) Device %i \n",i+1,i+1); 519

printf("\n>"); 520

521

if (!scanf( "%d", &p)) 522

goto SelectPort; 523

if(p==0) 524

nogps=1; //Impostando 0 si esclude il gps 525

else 526

if ((p-1) <0 || (p-1)>=c) 527

goto SelectPort; 528

if(nogps==0) 529

usbDev.SetDeviceName(lst[p-1]->GetDeviceName()); 530

531

gps.Open(&usbDev); 532

gps.PvtDataOn(); 533

534

//create the accelerometer object 535

CPhidgetAccelerometer_create(&accel_1); 536

CPhidgetAccelerometer_create(&accel_2); 537

CPhidgetAccelerometer_create(&accel_3); 538

539

//Apre i dispositivi 540

CPhidget_open((CPhidgetHandle)accel_1, 50742); //macchina 541

CPhidget_open((CPhidgetHandle)accel_2, 52305); //testa 542

CPhidget_open((CPhidgetHandle)accel_3, 50399); //sedile 543

544

//serial(); //identifica il numero di serie 545

546

//Controlla il collegamento 547

Appendice

83

//linking(); 548

549

SelectNUM: 550

//Imposta il numero di acquisizioni 551

printf("\nImposta il numero di acquisizioni\n\n"); 552

printf("- 256\n"); 553

printf("- 512\n"); 554

printf("- 2048\n"); 555

printf("- 8192\n"); 556

printf("\n>"); 557

scanf( "%d", &NUM); 558

559

if (NUM!=256) 560

if (NUM!=512) 561

if (NUM!=2048) 562

if (NUM!=8196) 563

goto SelectNUM; 564

565

//Calcola l'inclinazione dei dispositivi 566

inclinazione(); 567

568

//Acquisizione dati 569

data(); 570

system("wavelet.exe");//richiama l'eseguibile compilato in 571

//in matlab che mostra l'analisi wavelet dei segnali 572

573

Buona: 574

printf("\nSalvare la prova come valida? y/n\n"); 575

scanf( "%c", &buona); 576

if (!scanf( "%c", &buona)) 577

goto Buona; 578

else 579

if(buona!='y') 580

if(buona!='n') 581

goto Buona; 582

else 583

//Ordina i file in apposite cartelle 584

trasferimento(prove); 585

prove++; 586

587

588

589

Nuova: 590

Appendice

84

printf("\nProcedere con una nuova acquisizione? y/n\n"); 591

scanf( "%c", &nuova); 592

if (!scanf( "%c", &nuova)) 593

goto SelectNUM; 594

else 595

if(nuova!='y') 596

if(nuova!='n') 597

goto Nuova; 598

elsegoto SelectNUM; 599

600

601

//Interruzione 602

getchar(); 603

//Chiude dispositivi 604

printf("\nChiusura dispositivi\n"); 605

CPhidget_close((CPhidgetHandle)accel_1); 606

CPhidget_delete((CPhidgetHandle)accel_1); 607

CPhidget_close((CPhidgetHandle)accel_2); 608

CPhidget_delete((CPhidgetHandle)accel_2); 609

CPhidget_close((CPhidgetHandle)accel_3); 610

CPhidget_delete((CPhidgetHandle)accel_3); 611

//Interruzione 612

getchar(); 613

return 0; 614

Appendice

85

[A.2] Identificazione del modello lineare

Dopo l’analisi dei dati, questo programma compilato in MATLAB grafica I dati

delle accelerazioni sulla Testa e sul Sedile del Tester togliendo l'accelerazione di

gravità da entrambe, poi passa dal dominio del tempo al dominio della frequenza

attraverso la FFT.

Il programma Identificazionex3Prove.m è riportato qui di seguito:

ANALISI DATI SPERIMENTALI E IDENTIFICAZIONE MODELLO LINEARE 1

2 % Segue la spiegazione con commenti e codice (sfondo pagina grigia) 3

% dell'elaborazione dei dati sperimentali e la tecnica per identificare 4

% la funzione di trasferimento (fdt) che lega l'accelerazione al sedile 5

% con quella alla base del cranio. 6

7

% Miglior fitting con le prove 0-1-2-3-4-5 nella cartella dati 8

9

clc 10

clear all 11

close all 12

13

%%%%%%%%%%%%%%%%%%%%%%%% 14

%% CARICAMENTO DATI %% 15

%%%%%%%%%%%%%%%%%%%%%%%% 16

17

% seleziona i dati corrispondenti alle prove da raggruppare 18

stringa = 'Acquisizione_Dati/Tester_32/prova_0/', 19

'Acquisizione_Dati/Tester_32/prova_1/', 20

'Acquisizione_Dati/Tester_32/prova_2/', 21

'Acquisizione_Dati/Tester_32/prova_3/', 22

'Acquisizione_Dati/Tester_32/prova_4/', 23

'Acquisizione_Dati/Tester_32/prova_5/'; 24

25

acc2=zeros(512,6); 26

acc3=zeros(512,6); 27

for i=1:length(stringa) 28

29

ac2 =fopen(strcat(char(stringa(i)),'acc2.txt'),'r'); 30

Appendice

86

a2 = fscanf(ac2, '%*s %f %*s %f %*s %f %*s %f',[4 inf]); 31

a2=a2'; 32

fclose(ac2); 33

34

ac3 =fopen(strcat(char(stringa(i)),'acc3.txt'),'r'); 35

a3 = fscanf(ac3, '%*s %f %*s %f %*s %f %*s %f',[4 inf]); 36

a3=a3'; 37

fclose(ac3); 38

39

acc2(:,i) = a1(:,4); %output (testa) 40

acc3(:,i) = a3(:,4); %input (sedile) 41

end 42

43

time1=0:0.016:(0.016*511); 44

time1=time1'; 45

time = [time1,time1,time1,time1,time1,time1]; 46

47

Nfig = 1; 48

Ts = (time(3)-time(2)) % tempo di campionamento 49

50

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 51

%% FILTRAGGIO DEI SEGNALI %% 52

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 53

54

% guadagno statico del filtro 55

K = 1/(10^(199.5/20)); %ricorda che 1 => 20 log_10(1) = 0 db 56

% prima pulsazione di rottura, zero 57

omega1 = 2*pi * 0.01; 58

% seconda pulsazione di rottura, polo 59

omega2 = 2*pi * 0.1; 60

% terza pulsazione di rottura, polo 61

omega3 = 2*pi * 60; 62

% molteplicita' dei poli in omega1 e omega3, rispettivamente, per 63

% aumentarne la pendenza 64

nz = 10; 65

np = 10; 66

67

tau1 = 1/omega1; 68

tau2 = 1/omega2; 69

tau3 = 1/omega3; 70

Fs = tf([1],[1]); 71

72

for i=1:nz 73

Appendice

87

Fs = Fs * tf([tau1 1 ],[tau2 1]); % (tau1 * s + 1)/(tau2 * s + 1) 74

end 75

76

for i=1:np 77

Fs = Fs * tf([1],[tau3 1]); % (tau1 * s + 1) 78

end 79

80

Filtro = K * Fs; 81

82

% % Diagramma di Bode del filtro 83

figure(Nfig) 84

Nfig = Nfig +1; 85

86

bode(Fs) %,Fz) 87

title('Diagramma di Bode del Filtro') %dei filtri') 88

legend('Fs')%,'Fz') 89

grid on 90

91

% Filtraggio del segnale 92

ufiltrata=zeros(512,6); 93

yfiltrata=zeros(512,6); 94

usim=zeros(512,6); 95

ysim=zeros(512,6); 96

for i=1:length(stringa) 97

usim(:,i) = acc3(:,i) - mean(acc3(:,i)); 98

ysim(:,i) = acc2(:,i) - mean(acc2(:,i)); 99

100

% u è l'accelerazione al sedile filtrata 101

ufiltrata(:,1) =ufiltrata(:,1)+ acc3(:,i); 102

103

% y è l'accelerazione alla testa filtrata 104

yfiltrata(:,1) =yfiltrata(:,1)+ acc2(:,i); 105

end 106

107

% Diagrammo i segnali originali e quelli filtrati nelle 6 prove 108

109

figure(Nfig) 110

Nfig=Nfig+1; 111

112

subplot(6,1,1) 113

plot(time(:,1),acc2(:,1),'-r') 114

title('Accelerazione alla Testa non Filtrata nelle 3 prove','Interpreter','Latex') 115

ylabel('$m/sec^2$','Interpreter','Latex') 116

Appendice

88

xlabel('Time (sec)','Interpreter','Latex') 117

legend('1° Prova') 118

subplot(6,1,2) 119

plot(time(:,1),acc2(:,2),'-g'); 120

ylabel('$m/sec^2$','Interpreter','Latex') 121

xlabel('Time (sec)','Interpreter','Latex') 122

legend('2° Prova') 123

subplot(6,1,3) 124

plot(time(:,1),acc2(:,3)); 125

ylabel('$m/sec^2$','Interpreter','Latex') 126

xlabel('Time (sec)','Interpreter','Latex') 127

legend('3° Prova') 128

subplot(6,1,4) 129

plot(time(:,1),acc2(:,4)); 130

ylabel('$m/sec^2$','Interpreter','Latex') 131

xlabel('Time (sec)','Interpreter','Latex') 132

legend('4° Prova') 133

subplot(6,1,5) 134

plot(time(:,1),acc2(:,5)); 135

ylabel('$m/sec^2$','Interpreter','Latex') 136

xlabel('Time (sec)','Interpreter','Latex') 137

legend('5° Prova') 138

subplot(6,1,6) 139

plot(time(:,1),acc2(:,6)); 140

ylabel('$m/sec^2$','Interpreter','Latex') 141

xlabel('Time (sec)','Interpreter','Latex') 142

legend('6° Prova') 143

144

figure(Nfig) 145

Nfig=Nfig+1; 146

147

subplot(6,1,1) 148

plot(time(:,1),yfiltrata(:,1),'-r') 149

title('Accelerazione alla Testa Filtrata nelle 3 prove','Interpreter','Latex') 150

ylabel('$m/sec^2$','Interpreter','Latex') 151

xlabel('Time (sec)','Interpreter','Latex') 152

legend('1° Prova') 153

subplot(6,1,2) 154

plot(time(:,1),yfiltrata(:,2),'-g'); 155

ylabel('$m/sec^2$','Interpreter','Latex') 156

xlabel('Time (sec)','Interpreter','Latex') 157

legend('2° Prova') 158

subplot(6,1,3) 159

Appendice

89

plot(time(:,1),yfiltrata(:,3)); 160

ylabel('$m/sec^2$','Interpreter','Latex') 161

xlabel('Time (sec)','Interpreter','Latex') 162

legend('3° Prova') 163

subplot(6,1,4) 164

plot(time(:,1),yfiltrata(:,4)); 165

ylabel('$m/sec^2$','Interpreter','Latex') 166

xlabel('Time (sec)','Interpreter','Latex') 167

legend('4° Prova') 168

subplot(6,1,5) 169

plot(time(:,1),yfiltrata(:,5)); 170

ylabel('$m/sec^2$','Interpreter','Latex') 171

xlabel('Time (sec)','Interpreter','Latex') 172

legend('5° Prova') 173

subplot(6,1,6) 174

plot(time(:,1),yfiltrata(:,6)); 175

ylabel('$m/sec^2$','Interpreter','Latex') 176

xlabel('Time (sec)','Interpreter','Latex') 177

legend('6° Prova') 178

179

figure(Nfig) 180

Nfig=Nfig+1; 181

182

subplot(6,1,1) 183

plot(time(:,1),acc3(:,1),'-r') 184

title('Accelerazione al Sedile non Filtrata nelle 3 prove','Interpreter' 185

,'Latex') 186

ylabel('$m/sec^2$','Interpreter','Latex') 187

xlabel('Time (sec)','Interpreter','Latex') 188

legend('1° Prova') 189

subplot(6,1,2) 190

plot(time(:,1),acc3(:,2),'-g'); 191

ylabel('$m/sec^2$','Interpreter','Latex') 192

xlabel('Time (sec)','Interpreter','Latex') 193

legend('2° Prova') 194

subplot(6,1,3) 195

plot(time(:,1),acc3(:,3)); 196

ylabel('$m/sec^2$','Interpreter','Latex') 197

xlabel('Time (sec)','Interpreter','Latex') 198

legend('3° Prova') 199

subplot(6,1,4) 200

plot(time(:,1),acc3(:,4)); 201

ylabel('$m/sec^2$','Interpreter','Latex') 202

Appendice

90

xlabel('Time (sec)','Interpreter','Latex') 203

legend('4° Prova') 204

subplot(6,1,5) 205

plot(time(:,1),acc3(:,5)); 206

ylabel('$m/sec^2$','Interpreter','Latex') 207

xlabel('Time (sec)','Interpreter','Latex') 208

legend('5° Prova') 209

subplot(6,1,6) 210

plot(time(:,1),acc3(:,6)); 211

ylabel('$m/sec^2$','Interpreter','Latex') 212

xlabel('Time (sec)','Interpreter','Latex') 213

legend('6° Prova') 214

215

figure(Nfig) 216

Nfig=Nfig+1; 217

218

subplot(6,1,1) 219

plot(time(:,1),ufiltrata(:,1),'-r') 220

title('Accelerazione al Sedile Filtrata nelle 3 prove','Interpreter' 221

,'Latex') 222

ylabel('$m/sec^2$','Interpreter','Latex') 223

xlabel('Time (sec)','Interpreter','Latex') 224

legend('1° Prova') 225

subplot(6,1,2) 226

plot(time(:,1),ufiltrata(:,2),'-g'); 227

ylabel('$m/sec^2$','Interpreter','Latex') 228

xlabel('Time (sec)','Interpreter','Latex') 229

legend('2° Prova') 230

subplot(6,1,3) 231

plot(time(:,1),ufiltrata(:,3)); 232

ylabel('$m/sec^2$','Interpreter','Latex') 233

xlabel('Time (sec)','Interpreter','Latex') 234

legend('3° Prova') 235

subplot(6,1,4) 236

plot(time(:,1),ufiltrata(:,4)); 237

ylabel('$m/sec^2$','Interpreter','Latex') 238

xlabel('Time (sec)','Interpreter','Latex') 239

legend('4° Prova') 240

subplot(6,1,5) 241

plot(time(:,1),ufiltrata(:,5)); 242

ylabel('$m/sec^2$','Interpreter','Latex') 243

xlabel('Time (sec)','Interpreter','Latex') 244

legend('5° Prova') 245

Appendice

91

subplot(6,1,6) 246

plot(time(:,1),ufiltrata(:,6)); 247

ylabel('$m/sec^2$','Interpreter','Latex') 248

xlabel('Time (sec)','Interpreter','Latex') 249

legend('6° Prova') 250

251

252

253

254

255

%%%%%%%%%%%%%%%%%%%%%%% 256

%% IDENTIFICAZIONE %% 257

%%%%%%%%%%%%%%%%%%%%%%% 258

259

% La funzione di trasferimento viene identificata mediante la funzione 260

% "armax" che utilizza un algoritmo di proiezione ai minimi quadrati 261

% robustificato in 262

% cui vengono passati il numero dei poli _na_ che si suppone abbia 263

% la funzione di trasferimento (fdt) reale (radici del denominatore), 264

% il numero degli zeri _nb_ (radici del numeratore), ovvero la forma della 265

% fdt reale si assume essere pari a: 266

% Vengono inoltre passati anche i dati sperimentali di ingresso uscita, 267

% ovvero accelerazione al sedile ed al cranio, e l'algoritmo fornisce i 268

% coefficienti della fdt. 269

270

% Identifico il modello con metà dei dati acquisiti e utilizzo l'altra 271

% metà per validare i risultati 272

273

ufiltmeta=zeros(256,6); 274

yfiltmeta=zeros(256,6); 275

for i=1:length(stringa) 276

for j=1:length(ufiltrata)/2 277

ufiltmeta(j,i)=ufiltrata(j,i); 278

yfiltmeta(j,i)=yfiltrata(j,i); 279

end 280

end 281

282

% prepara i dati unendo le diverse prove sperimentali (TUTTI I CAMPIONI) 283

data = merge(iddata(yfiltrata(:,1),ufiltrata(:,1),Ts),... 284

iddata(yfiltrata(:,2),ufiltrata(:,2),Ts),... 285

iddata(yfiltrata(:,3),ufiltrata(:,3),Ts),... 286

iddata(yfiltrata(:,4),ufiltrata(:,4),Ts),... 287

iddata(yfiltrata(:,5),ufiltrata(:,5),Ts),... 288

Appendice

92

iddata(yfiltrata(:,6),ufiltrata(:,6),Ts)) 289

290

291

% prepara i dati unendo le diverse prove sperimentali 292

% (METÀ CAMPIONI SPERIMENTALI) 293

datameta = merge(iddata(yfiltmeta(:,1),ufiltmeta(:,1),Ts),... 294

iddata(yfiltmeta(:,2),ufiltmeta(:,2),Ts),... 295

iddata(yfiltmeta(:,3),ufiltmeta(:,3),Ts),... 296

iddata(yfiltrata(:,4),ufiltrata(:,4),Ts),... 297

iddata(yfiltrata(:,5),ufiltrata(:,5),Ts),... 298

iddata(yfiltrata(:,6),ufiltrata(:,6),Ts)) 299

300

301

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%302

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 303

% PARAMETRI DA MODIFICARE 304

% 305

% Parametri buoni [8 8 3 2 3 2 armax] anche[7 8 2 1] [8 6 0 3] 306

% OTTIMO [7 8 0 0] 307

% Con le acc della testa [8 8 0 1] best=[6 7 0 0] 308

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%309

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 310

311

na = 6 % grado denominatore 312

nb = 1 % grado numeratore +1 313

nc = 0 % è il grado del numeratore che si associa al disturbo (vedi help) 314

nk = 0 % RITARDO in campioni (ad esempio se nk=1 allora l'uscita risente 315

% dei dati precedenti al tempo nk-1) 316

317

nf = 10 % grado denominatore ingresso , per PEM 318

nd = 2 % grado denominatore errore , per PEM 319

320

focuses = 'simulation','prediction'; 321

focus = 2; 322

323

%tolleranza 324

idtol = 1e-6; 325

326

%numero massimo di iterazioni 327

maxiter = 300; 328

329

% Scelta del Modello 330

metodo = 'arx','armax','pem'; 331

Appendice

93

scelta = 2; 332

333

switch char(metodo(scelta)) 334

335

case 'arx' 336

%A(q) y(t) = B(q) u(t-nk) + e(t) 337

orders = [na nb nc] 338

modello_totale = arx(datameta,orders,'focus',char(focuses(focus)), 339

'tolerance',idtol,'maxiter',maxiter) 340

341

case 'armax' 342

orders = [na nb nc nk] 343

modello_totale = armax(datameta,orders,'focus',char(focuses(focus)), 344

'tolerance',idtol,'maxiter',maxiter) 345

346

case 'pem' 347

% A(q) y(t) = [B(q)/F(q)] u(t-nk) + [C(q)/D(q)] e(t) 348

orders =[na nb nc nd nf nk] 349

modello_totale = pem(datameta,orders,'focus',char(focuses(focus)), 350

'tolerance',idtol,'maxiter',maxiter) 351

352

end 353

354

Fmodello = tf(modello_totale.b,modello_totale.a,Ts) 355

356

figure(Nfig) 357

Nfig = Nfig +1; 358

bode(Fmodello,[1:0.1:180]) 359

grid on 360

title('Modello') 361

362

% Confronto tra i Dati Stimati e i Dati Sperimentali delle 6 prove 363

figure(Nfig) 364

Nfig = Nfig +1; 365

ymodello=zeros(512,6); 366

for i=1:length(stringa) 367

ymodello(:,i) = lsim(1*Fmodello,ufiltrata(:,i),time(:,i)); 368

end 369

subplot(6,1,1) 370

plot(time(:,1),yfiltrata(:,1),'-c',time(:,1),ymodello(:,1),'-r', 371

'linewidth',1.5) 372

title('Confronto tra i Dati Stimati e i Dati Sperimentali delle 3 prove') 373

xlabel('Time (sec)','Interpreter','Latex') 374

Appendice

94

ylabel('$m/sec^2$','Interpreter','Latex') 375

legend('Experimental data 1° Prova','Estimated data 1° Prova') 376

subplot(6,1,2) 377

plot(time(:,2),yfiltrata(:,2),'-y',time(:,2),ymodello(:,2),'-b', 378

'linewidth',1.5) 379

xlabel('Time (sec)','Interpreter','Latex') 380

ylabel('$m/sec^2$','Interpreter','Latex') 381

legend('Experimental data 2° Prova','Estimated data 2° Prova') 382

subplot(6,1,3) 383

plot(time(:,3),yfiltrata(:,3),'-g',time(:,3),ymodello(:,3),'-m', 384

'linewidth',1.5) 385

xlabel('Time (sec)','Interpreter','Latex') 386

ylabel('$m/sec^2$','Interpreter','Latex') 387

legend('Experimental data 3° Prova','Estimated data 3° Prova') 388

subplot(6,1,4) 389

plot(time(:,4),yfiltrata(:,4),'-g',time(:,4),ymodello(:,4),'-m', 390

'linewidth',1.5) 391

xlabel('Time (sec)','Interpreter','Latex') 392

ylabel('$m/sec^2$','Interpreter','Latex') 393

legend('Experimental data 4° Prova','Estimated data 4° Prova') 394

subplot(6,1,5) 395

plot(time(:,5),yfiltrata(:,5),'-g',time(:,5),ymodello(:,5),'-m', 396

'linewidth',1.5) 397

xlabel('Time (sec)','Interpreter','Latex') 398

ylabel('$m/sec^2$','Interpreter','Latex') 399

legend('Experimental data 5° Prova','Estimated data 5° Prova') 400

subplot(6,1,6) 401

plot(time(:,6),yfiltrata(:,6),'-g',time(:,6),ymodello(:,6),'-m', 402

'linewidth',1.5) 403

xlabel('Time (sec)','Interpreter','Latex') 404

ylabel('$m/sec^2$','Interpreter','Latex') 405

legend('Experimental data 6° Prova','Estimated data 6° Prova') 406

advice(modello_totale) 407

408

figure(Nfig) 409

Nfig = Nfig +1; 410

compare(data,modello_totale) 411

title('Compare') 412

413

414

figure(Nfig) 415

Nfig = Nfig +1; 416

e = resid(data,modello_totale,'fr') 417

Appendice

95

me = arx(e,[10 10 0]); 418

bode(me,[1:0.1:180],'sd',6,'fill') 419

title('') 420

grid on 421

422

%%%%%%%%%%%%%%%%%%%% 423

%% FFT ANALYSIS %% 424

%%%%%%%%%%%%%%%%%%%% 425

426

figure(Nfig) 427

Nfig = Nfig +1; 428

429

% %Ciclo per le 6 prove 430

ufiltrata_fft=zeros(512,6); 431

ufiltrata_fft_p=zeros(256,6); 432

ufiltrata_time=zeros(256,6); 433

for num=1:length(stringa) 434

% Trazforma nel dominio della frequenza l'accelerazione del sedile 435

NFFT = 2^nextpow2(length(ufiltrata(:,num))); % Next power of 2 from 436

%length of y 437

ufiltrata_fft(:,num)=fft(ufiltrata(:,num),NFFT); 438

f = 1/(Ts*2)*linspace(0,1,NFFT/2); 439

subplot(6,1,num) 440

plot(f,2*abs(ufiltrata_fft(1:NFFT/2,num)),'red'); %plot dell'acc in frequenza 441

title('Accelerazione al sedile nel dominio della frequenza'); 442

xlabel('Frequenza (Hz)','Interpreter','Latex') 443

ylabel('Ampiezza (Power)','Interpreter','Latex') 444

% 445

% % Crea la curva di ponderazione Wk per l'asse z verticale 446

x=[0.02 0.025 0.0315 0.04 0.05 0.063 0.08 0.1 0.125 0.16 0.2 0.25 447

0.315 0.4 0.5 0.63 0.8 1 1.25 1.6 2 2.5 3.15 4 5 6.3 8 10 12.5 448

16 20 25 31.5 40 50 63 80 100 125 160 200 250 315 400]; 449

y=[-90 -90 -90 -90 -90 -90 -90 -30.11 -26.26 -22.05 -18.33 -14.81 450

-11.60 -9.07 -7.57 -6.77 -6.43 -6.33 -6.29 -6.12 -5.49 -4.01 451

-1.90 -0.29 0.33 0.46 0.31 -0.10 -0.89 -2.28 -3.93 -5.80 -7.86 452

-10.05 -12.19 -14.61 -17.56 -21.04 -25.35 -30.91 -36.38 -42.04 453

-48.00 -54.20]; 454

yy=spline(x,10.^(y./20),f); 455

yy=yy'; 456

for i=1:length(f) 457

ufiltrata_fft_p(i,num)=ufiltrata_fft(i,num)*yy(i,1); 458

%pondera in frequenza secondo norma iso2631 459

end 460

Appendice

96

hold on 461

plot(f,2*abs(ufiltrata_fft_p(1:NFFT/2,num)),'blue'); 462

%plotta la risposta dopo la ponderazione 463

legend('Non ponderata','Ponderata ISO2631') 464

465

% antitrasformata del segnale 466

ufiltrata_time(:,num)=ifft(ufiltrata_fft_p(:,num)* 467

(length(ufiltrata(:,num)))); 468

ufiltrata_time(:,num)=real(ufiltrata_time(:,num)); 469

end 470

471

hold off 472

473

figure(Nfig) 474

Nfig = Nfig +1; 475

476

% Ciclo per le 6 prove 477

yfiltrata_fft=zeros(512,6); 478

yfiltrata_fft_p=zeros(256,6); 479

yfiltrata_time=zeros(256,6); 480

for num=1:length(stringa) 481

% Trazforma nel dominio della frequenza l'accelerazione della testa 482

NFFT = 2^nextpow2(length(yfiltrata(:,num))); % Next power of 2 from 483

%length of y 484

yfiltrata_fft(:,num)=fft(yfiltrata(:,num),NFFT); 485

f = 1/(Ts*2)*linspace(0,1,NFFT/2); 486

subplot(6,1,num) 487

plot(f,2*abs(yfiltrata_fft(1:NFFT/2,num)),'red'); %plot dell'acc in 488

%frequenza 489

title('Accelerazione alla Testa nel dominio della frequenza'); 490

xlabel('Frequenza (Hz)','Interpreter','Latex') 491

ylabel('Ampiezza (Power)','Interpreter','Latex') 492

493

% Crea la curva di ponderazione Wk per l'asse z verticale 494

x=[0.02 0.025 0.0315 0.04 0.05 0.063 0.08 0.1 0.125 0.16 0.2 0.25 495

0.315 0.4 0.5 0.63 0.8 1 1.25 1.6 2 2.5 3.15 4 5 6.3 8 10 12.5 496

16 20 25 31.5 40 50 63 80 100 125 160 200 250 315 400]; 497

y=[-90 -90 -90 -90 -90 -90 -90 -30.11 -26.26 -22.05 -18.33 -14.81 498

-11.60 -9.07 -7.57 -6.77 -6.43 -6.33 -6.29 -6.12 -5.49 -4.01 499

-1.90 -0.29 0.33 0.46 0.31 -0.10 -0.89 -2.28 -3.93 -5.80 -7.86 500

-10.05 -12.19 -14.61 -17.56 -21.04 -25.35 -30.91 -36.38 -42.04 501

-48.00 -54.20]; 502

yy=spline(x,10.^(y./20),f); 503

Appendice

97

yy=yy'; 504

for i=1:length(f) 505

yfiltrata_fft_p(i,num)=yfiltrata_fft(i,num)*yy(i,1); 506

%pondera in frequenza secondo norma iso2631 507

end 508

hold on 509

plot(f,2*abs(yfiltrata_fft_p(1:NFFT/2,num)),'blue'); 510

%plotta la risposta dopo la ponderazione 511

legend('Non ponderata','Ponderata ISO2631') 512

513

% antitrasformata del segnale 514

yfiltrata_time(:,num)=ifft(yfiltrata_fft_p(:,num)* 515

(length(yfiltrata(:,num)))); 516

yfiltrata_time(:,num)=real(yfiltrata_time(:,num)); 517

end 518

519

hold off 520

521

% Plotto la funzione STH 522

figure(Nfig) 523

Nfig = Nfig +1; 524

525

AAA1=2*abs(yfiltrata_fft(1:NFFT/2,1)); 526

BBB1=2*abs(ufiltrata_fft(1:NFFT/2,1)); 527

STH1=AAA1/BBB1; 528

AAA2=2*abs(yfiltrata_fft(1:NFFT/2,2)); 529

BBB2=2*abs(ufiltrata_fft(1:NFFT/2,2)); 530

STH2=AAA2/BBB2; 531

AAA3=2*abs(yfiltrata_fft(1:NFFT/2,3)); 532

BBB3=2*abs(ufiltrata_fft(1:NFFT/2,3)); 533

STH3=AAA3/BBB3; 534

AAA4=2*abs(yfiltrata_fft(1:NFFT/2,4)); 535

BBB4=2*abs(ufiltrata_fft(1:NFFT/2,4)); 536

STH4=AAA4/BBB4; 537

AAA5=2*abs(yfiltrata_fft(1:NFFT/2,5)); 538

BBB5=2*abs(ufiltrata_fft(1:NFFT/2,5)); 539

STH5=AAA5/BBB5; 540

AAA6=2*abs(yfiltrata_fft(1:NFFT/2,6)); 541

BBB6=2*abs(ufiltrata_fft(1:NFFT/2,6)); 542

STH6=AAA6/BBB6; 543

544

AAA1p=2*abs(yfiltrata_fft_p(1:NFFT/2,1)); 545

BBB1p=2*abs(ufiltrata_fft_p(1:NFFT/2,1)); 546

Appendice

98

STH1p=AAA1/BBB1; 547

AAA2p=2*abs(yfiltrata_fft_p(1:NFFT/2,2)); 548

BBB2p=2*abs(ufiltrata_fft_p(1:NFFT/2,2)); 549

STH2p=AAA2/BBB2; 550

AAA3p=2*abs(yfiltrata_fft_p(1:NFFT/2,3)); 551

BBB3p=2*abs(ufiltrata_fft_p(1:NFFT/2,3)); 552

STH3p=AAA3/BBB3; 553

AAA4p=2*abs(yfiltrata_fft_p(1:NFFT/2,4)); 554

BBB4p=2*abs(ufiltrata_fft_p(1:NFFT/2,4)); 555

STH4p=AAA4/BBB4; 556

AAA5p=2*abs(yfiltrata_fft_p(1:NFFT/2,5)); 557

BBB5p=2*abs(ufiltrata_fft_p(1:NFFT/2,5)); 558

STH5p=AAA5/BBB5; 559

AAA6p=2*abs(yfiltrata_fft_p(1:NFFT/2,6)); 560

BBB6p=2*abs(ufiltrata_fft_p(1:NFFT/2,6)); 561

STH6p=AAA6/BBB6; 562

563

564

subplot(6,1,1) 565

plot(f,STH1,'b'); 566

title('Coefficiente di Trasmissibilità STH per le 6 prove'); 567

xlabel('Frequenza (Hz)','Interpreter','Latex') 568

ylabel('Ampiezza (Power)','Interpreter','Latex') 569

%legend('Non ponderata','Ponderata ISO2631') 570

subplot(6,1,2) 571

plot(f,STH2,'b'); 572

xlabel('Frequenza (Hz)','Interpreter','Latex') 573

ylabel('Ampiezza (Power)','Interpreter','Latex') 574

%legend('Non ponderata','Ponderata ISO2631') 575

subplot(6,1,3) 576

plot(f,STH3,'b'); 577

xlabel('Frequenza (Hz)','Interpreter','Latex') 578

ylabel('Ampiezza (Power)','Interpreter','Latex') 579

subplot(6,1,4) 580

plot(f,STH1,'b'); 581

xlabel('Frequenza (Hz)','Interpreter','Latex') 582

ylabel('Ampiezza (Power)','Interpreter','Latex') 583

%legend('Non ponderata','Ponderata ISO2631') 584

subplot(6,1,5) 585

plot(f,STH2,'b'); 586

xlabel('Frequenza (Hz)','Interpreter','Latex') 587

ylabel('Ampiezza (Power)','Interpreter','Latex') 588

%legend('Non ponderata','Ponderata ISO2631') 589

Appendice

99

subplot(6,1,6) 590

plot(f,STH3,'b'); 591

xlabel('Frequenza (Hz)','Interpreter','Latex') 592

ylabel('Ampiezza (Power)','Interpreter','Latex') 593

%legend('Non ponderata','Ponderata ISO2631') 594

595

for num=1:length(stringa) 596

subplot(6,1,num) 597

STH=(2*abs(yfiltrata_fft(1:NFFT/2,num)))/(2*abs(ufiltrata_fft(1:NFFT/2,num))); 598

599

STH_p=(2*abs(yfiltrata_fft_p(1:NFFT/2,num)))/(2*abs(ufiltrata_fft_p(1:NFFT/2,num))); 600

title('Coefficiente di Trasmissibilità STH per le 6 prove'); 601

plot(f,STH,'red','linewidth',1.5); 602

title('Coefficiente di Trasmissibilità STH per le 6 prove'); 603

hold on 604

plot(f,STH_p,'blue','linewidt',1.5); 605

xlabel('Frequenza (Hz)','Interpreter','Latex') 606

ylabel('Ampiezza (Power)','Interpreter','Latex') 607

legend('Non ponderata','Ponderata ISO2631') 608

end 609

610

hold off 611

% 612

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 613

% %% CALCOLO DELL'INDICE RMS %% 614

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 615

% 616

% % Calcolo il valore rms dell'accelerazione. 617

% % Ho preso il valore della yfiltrata e della ymodello e li ho passati 618

% % nella formula rms della norma ossia la radice quadrata della media 619

% % integrale del valore quadratico dell'accelerazione. 620

% 621

% % exp sono i dati sperimentali presi alla testa 622

% % mod sono i dati alla testa ricavati dal modello identificato 623

% % iso sono i dati al sedile passati nelle curve di ponderazione iso2631 624

% 625

% % Crea una spline continua dai dati discreti, num è il numero della prova 626

ymodello_iso=zeros(512,6); 627

yfiltrata_iso=zeros(512,6); 628

ufiltrata_iso=zeros(512,6); 629

rms_exp=zeros(1,6); 630

rms_mod=zeros(1,6); 631

rms_iso=zeros(1,6); 632

Appendice

100

for num=1:length(stringa) 633

ymodello_iso(:,num)=ymodello(:,num).*ymodello(:,num); 634

yfiltrata_iso(:,num)=yfiltrata(:,num).*yfiltrata(:,num); 635

ufiltrata_iso(:,num)=ufiltrata(:,num).*ufiltrata(:,num); 636

p_iso(:,num)=spline(time(:,num),ufiltrata_iso(:,num)); 637

p_mod(:,num)=spline(time(:,num),ymodello_iso(:,num)); 638

p_exp(:,num)=spline(time(:,num),yfiltrata_iso(:,num)); 639

640

% Calcola l'indice rms della norma iso2631 641

a=time(:,num); 642

rms_exp(:,num)=quad(@(a)ppval(p_exp(:,num),a),a(1),a(length(a))); 643

rms_exp(:,num)=sqrt(rms_exp(:,num)/(a(length(a))-a(1))); 644

rms_mod(:,num)=quad(@(a)ppval(p_mod(:,num),a),a(1),a(length(a))); 645

rms_mod(:,num)=sqrt(rms_mod(:,num)/(a(length(a))-a(1))); 646

rms_iso(:,num)=quad(@(a)ppval(p_iso(:,num),a),a(1),a(length(a))); 647

rms_iso(:,num)=sqrt(rms_iso(:,num)/(a(length(a))-a(1))); 648

649

disp(['Rms_exp = ',num2str(rms_exp(:,num)),'; Rms_mod = ' 650

,num2str(rms_mod(:,num)),'; Rms_iso = ' 651

,num2str(rms_iso(:,num))]); 652

disp(' '); 653

end 654

655

% Indice RMS alla testa del modello mediato per le 6 prove 656

disp('Indice RMS da usare per la correlazione 657

(accelerazione alla testa ricavata dal modello)'); 658

659

RMS=(rms_mod(1)+rms_mod(2)+rms_mod(3)+rms_mod(4)+rms_mod(5)+rms_mod(6))/6 660

661

662

%%%%%%%%%%%%%%%%%%%%%%%%%%%% 663

%% Analissi del modello %% 664

%%%%%%%%%%%%%%%%%%%%%%%%%%%% 665

666

[hsv,baldata] = hsvd(Fmodello) 667

668

% Calcolo delle funzioni di trasferimento a tempo continuo 669

Fmodellos = d2c(Fmodello,'zoh') 670

figure(Nfig) 671

Nfig = Nfig +1; 672

bode(Fmodello) 673

hold on 674

grid on 675

Appendice

101

bode(Fmodellos,[0.1:0.1:100]) 676

hold off 677

legend('Fmodello','Fmodellos') 678

679

% Calcolo dei coefficienti del numeratore e del denominatore della funzione 680

% di trasferimento a tempo continuo 681

[num,den] = tfdata(Fmodellos); 682

NUM = cell2mat(num); 683

DEN = cell2mat(den); 684

685

% Calcolo degli zeri e dei poli della funzione di trasferimento a tempo 686

% continuo 687

zeri = roots(cell2mat(num)) 688

zeri = zeri'; 689

poli = roots(cell2mat(den)) 690

poli = poli'; 691

692

Appendice

102

[A.3] Calcolo della Funzione di Trasferimento

Dalle caratteristiche antropometriche di ogni Tester, peso (Kg) altezza (m)

si è calcolata la Funzione di Trasferimento specifica.

% CALCOLO DELLA FUNZIONE DI TRASFERIMENTO %%%%%%% 1

% Si inseriscono le caratteristiche antropometriche del Tester ed 2

% automaticamente si calcola la funzione di trasferimento; 3

4

5

clc 6

clear all 7

close all 8

9

% DATI TESTER 10

x = 88; % Peso Tester 11

y = 1.82; % Altezza Tester in "m" 12

13

BMI= x/(y^2) % BMI ---> BODY MASS INDEX 14

% o IMC (Indice di massa corporea) 15

16

% BMI < 18 Tester Sottopeso 17

% 18 < BMI < 25 Tester Normali 18

% BMI > 25 Tester Robusti 19

20

21

22

% coefficienti a, b, c, d, e, f ottenuti tramite l'elaborazione 23

%dati sperimentali e le correlazioni con "curve fitting tool" 24

% si è trovata la relazione tra il vettore BMI ed i vettori di a, b, 25

% c, d, 26

% e, f ottendendo 7 relazioni 27

% a (s^2) + b (s) + 1 28

%Funzione di Trasferimento=---------------------------------------- 29

% (SPECIFICA) c (s^4) + d (s^3) + e(s^2) + f (s) +1 30

31

%Calcolata per via sperimentale tramite SISOTOOL di matlab 32

33

%Ogni coefficente 34

a =(1.967857142857143e-005 *BMI^2) +(-9.057499999999999e-004 *BMI) 35

+0.010847142857143; 36

Appendice

103

b =(-3.511904761904711e-004 *BMI^2) +(+0.016446428571428 *BMI) 37

-0.178380952380949; 38

c =(3.976190476190275e-009 *BMI^2) +(-1.429428571428474e-007 *BMI) 39

+1.530695238095122e-006; 40

d =(-3.229047619047630e-006 *BMI^2) +(+ 1.578437142857148e-004 *BMI) 41

-0.001900442666667; 42

e =(-4.079761904761955e-005 *BMI^2) +(+ 0.002037664285714 *BMI) 43

-0.023580380952381; 44

f =(-0.004375000000000 *BMI^2) +(+ 0.214160714285715 *BMI) 45

-2.581971428571434; 46

% Funzione di Trasferimento della colonna vertebrale in funzione delle 47

% caratteristiche antropometriche 48

49

% a2 (s^2) + a1 (s) + a0 50

%Funzione di Trasferimento=------------------------------------------ 51

% (GENERICA) (s^4) + b3 (s^3) + b2 (s^2) + b1 (s) + b0 52

53

a2= a/c; 54

a1= b/c; 55

a0= 1/c; 56

b3= d/c; 57

b2= e/c; 58

b1= f/c; 59

b0= 1/c; 60

61

62

Tester_Prova= tf([a2, a1, a0], [ 1, b3 , b2 , b1 ,b0]) 63

64

Bode(Tester_Prova) 65

Appendice

104

[A.4] Correlazioni Coefficienti Funzionzione di Traferimento - BMI

Si è passati dalle Funzioni di Trasferimento Specifiche a quella "Generica"

mettendo in relazione I coefficienti con I rispettivi BMI attraverso

l'applicazione di un toolbox di Matlab "Curve Fitting Tool".

%%%%%%%%%% VALORI BMI E COEFFICIENTI %%%%%%%%%%%%%% 1

2

format long 3

4

BMI = [21 22 23 24 25 26 27]; 5

A = [0.000529 0.000441 0.0004 0.000361 0.000576 0.000676 0.000676]; 6

% coefficiente s^2 -- numeratore 7

B = [0.012 0.012 0.015 0.019 0.0095 0.009 0.012]; 8

% coefficiente s -- numeratore 9

C = [0.000000291 0.000000311 0.000000375 0.000000245 0.000000572 10

0.0000005098 0.000000540 ]; 11

% coefficiente s^4 -- denominatore 12

D = [-0.000010188 0.00000946 0.00001106 0.00005632 0.00001138 0.00001222 13

0.00001446 ]; 14

% coefficiente s^3 -- denominatore 15

E = [0.001308 0.0013546 0.0015616 0.002178 0.0017934 0.001669 0.001762 ]; 16

% coefficiente s^2 -- denominatore 17

F = [-0.019 0.0178 0.0218 0.066 0.0167 0.018 0.0214 ]; 18

% coefficiente s – denominatore 19

20

-------------------------------------------------------------------------------------------------------- 21

22

function [cf_]=createFit_A(BMI,A) 23 %CREATEFIT Create plot of datasets and fits 24

% CREATEFIT(BMI,A) 25

% Creates a plot, similar to the plot in the main curve fitting 26

% window, using the data that you provide as input. You can 27

% apply this function to the same data you used with cftool 28

% or with different data. You may want to edit the function to 29

% customize the code and this help message. 30

% 31

% Number of datasets: 1 32

% Number of fits: 1 33

34

Appendice

105

35

% Data from dataset "A vs. BMI": 36

% X = BMI: 37

% Y = A: 38

% Unweighted 39

% 40

% This function was automatically generated on 01-May-2010 19:42:50 41

42

% Set up figure to receive datasets and fits 43

f_ = clf; 44

figure(f_); 45

set(f_,'Units','Pixels','Position',[1 41 1280 633]); 46

legh_ = []; legt_ = ; % handles and text for legend 47

xlim_ = [Inf -Inf]; % limits of x axis 48

ax_ = axes; 49

set(ax_,'Units','normalized','OuterPosition',[0 0 1 1]); 50

set(ax_,'Box','on'); 51

axes(ax_); hold on; 52

53

54

% --- Plot data originally in dataset "A vs. BMI" 55

BMI = BMI(:); 56

A = A(:); 57

h_ = line(BMI,A,'Parent',ax_,'Color',[0 0 1],... 58

'LineStyle','none', 'LineWidth',2,... 59

'Marker','o', 'MarkerSize',6); 60

xlim_(1) = min(xlim_(1),min(BMI)); 61

xlim_(2) = max(xlim_(2),max(BMI)); 62

legh_(end+1) = h_; 63

legt_end+1 = 'A vs. BMI'; 64

65

% Nudge axis limits beyond data limits 66

if all(isfinite(xlim_)) 67

xlim_ = xlim_ + [-1 1] * 0.01 * diff(xlim_); 68

set(ax_,'XLim',xlim_) 69

else 70

set(ax_, 'XLim',[20.940000000000001, 27.059999999999999]); 71

end 72

73

74

% --- Create fit "fit 1" 75

ok_ = isfinite(BMI) & isfinite(A); 76

if ~all( ok_ ) 77

Appendice

106

warning( 'GenerateMFile:IgnoringNansAndInfs', ... 78

'Ignoring NaNs and Infs in data' ); 79

end 80

ft_ = fittype('poly2'); 81

82

% Fit this model using new data 83

cf_ = fit(BMI(ok_),A(ok_),ft_); 84

85

% Or use coefficients from the original fit: 86

if 0 87

cv_ = 1.967857142857143e-005, -0.00090574999999999987, 88

0.010847142857142857; 89

cf_ = cfit(ft_,cv_:); 90

end 91

92

% Plot this fit 93

h_ = plot(cf_,'fit',0.95); 94

legend off; % turn off legend from plot method call 95

set(h_(1),'Color',[1 0 0],... 96

'LineStyle','-', 'LineWidth',2,... 97

'Marker','none', 'MarkerSize',6); 98

legh_(end+1) = h_(1); 99

legt_end+1 = 'fit 1'; 100

101

% Done plotting data and fits. Now finish up loose ends. 102

hold off; 103

leginfo_ = 'Orientation', 'vertical', 'Location', 'NorthEast'; 104

h_ = legend(ax_,legh_,legt_,leginfo_:); % create legend 105

set(h_,'Interpreter','none'); 106

xlabel(ax_,''); % remove x label 107

ylabel(ax_,''); % remove y label 108

109

-------------------------------------------------------------------------------------------------------- 110

111

function [cf_] =createFit_B(BMI,B) 112 %CREATEFIT Create plot of datasets and fits 113

% CREATEFIT(BMI,B) 114

% Creates a plot, similar to the plot in the main curve fitting 115

% window, using the data that you provide as input. You can 116

% apply this function to the same data you used with cftool 117

% or with different data. You may want to edit the function to 118

% customize the code and this help message. 119

% 120

Appendice

107

% Number of datasets: 1 121

% Number of fits: 1 122

123

124

% Data from dataset "B vs. BMI": 125

% X = BMI: 126

% Y = B: 127

% Unweighted 128

% 129

% This function was automatically generated on 01-May-2010 19:49:38 130

131

% Set up figure to receive datasets and fits 132

f_ = clf; 133

figure(f_); 134

set(f_,'Units','Pixels','Position',[1 41 1280 633]); 135

legh_ = []; legt_ = ; % handles and text for legend 136

xlim_ = [Inf -Inf]; % limits of x axis 137

ax_ = axes; 138

set(ax_,'Units','normalized','OuterPosition',[0 0 1 1]); 139

set(ax_,'Box','on'); 140

axes(ax_); hold on; 141

142

143

% --- Plot data originally in dataset "B vs. BMI" 144

BMI = BMI(:); 145

B = B(:); 146

h_ = line(BMI,B,'Parent',ax_,'Color',[0.333333 0 0.666667],... 147

'LineStyle','none', 'LineWidth',1,... 148

'Marker','.', 'MarkerSize',12); 149

xlim_(1) = min(xlim_(1),min(BMI)); 150

xlim_(2) = max(xlim_(2),max(BMI)); 151

legh_(end+1) = h_; 152

legt_end+1 = 'B vs. BMI'; 153

154

% Nudge axis limits beyond data limits 155

if all(isfinite(xlim_)) 156

xlim_ = xlim_ + [-1 1] * 0.01 * diff(xlim_); 157

set(ax_,'XLim',xlim_) 158

else 159

set(ax_, 'XLim',[20.940000000000001, 27.059999999999999]); 160

end 161

162

163

Appendice

108

% --- Create fit "fit 1" 164

ok_ = isfinite(BMI) & isfinite(B); 165

if ~all( ok_ ) 166

warning( 'GenerateMFile:IgnoringNansAndInfs', ... 167

'Ignoring NaNs and Infs in data' ); 168

end 169

ft_ = fittype('poly2'); 170

171

% Fit this model using new data 172

cf_ = fit(BMI(ok_),B(ok_),ft_); 173

174

% Or use coefficients from the original fit: 175

if 0 176

cv_ = -0.00035119047619047109, 0.016446428571428324, 177

-0.17838095238094945; 178

cf_ = cfit(ft_,cv_:); 179

end 180

181

% Plot this fit 182

h_ = plot(cf_,'fit',0.95); 183

legend off; % turn off legend from plot method call 184

set(h_(1),'Color',[1 0 0],... 185

'LineStyle','-', 'LineWidth',2,... 186

'Marker','none', 'MarkerSize',6); 187

legh_(end+1) = h_(1); 188

legt_end+1 = 'fit 1'; 189

190

% Done plotting data and fits. Now finish up loose ends. 191

hold off; 192

leginfo_ = 'Orientation', 'vertical'; 193

h_ = legend(ax_,legh_,legt_,leginfo_:); % create and reposition legend 194

set(h_,'Units','normalized'); 195

t_ = get(h_,'Position'); 196

t_(1:2) = [0.781535,0.860583]; 197

set(h_,'Interpreter','none','Position',t_); 198

xlabel(ax_,''); % remove x label 199

ylabel(ax_,''); % remove y label 200

201

-------------------------------------------------------------------------------------------------------- 202

203

function [cf_] = createFit_C(BMI,C) 204 %CREATEFIT Create plot of datasets and fits 205

% CREATEFIT(BMI,C) 206

Appendice

109

% Creates a plot, similar to the plot in the main curve fitting 207

% window, using the data that you provide as input. You can 208

% apply this function to the same data you used with cftool 209

% or with different data. You may want to edit the function to 210

% customize the code and this help message. 211

% 212

% Number of datasets: 1 213

% Number of fits: 1 214

215

216

% Data from dataset "C vs. BMI": 217

% X = BMI: 218

% Y = C: 219

% Unweighted 220

% 221

% This function was automatically generated on 01-May-2010 19:50:38 222

223

% Set up figure to receive datasets and fits 224

f_ = clf; 225

figure(f_); 226

set(f_,'Units','Pixels','Position',[1 41 1280 633]); 227

legh_ = []; legt_ = ; % handles and text for legend 228

xlim_ = [Inf -Inf]; % limits of x axis 229

ax_ = axes; 230

set(ax_,'Units','normalized','OuterPosition',[0 0 1 1]); 231

set(ax_,'Box','on'); 232

axes(ax_); hold on; 233

234

235

% --- Plot data originally in dataset "C vs. BMI" 236

BMI = BMI(:); 237

C = C(:); 238

h_ = line(BMI,C,'Parent',ax_,'Color',[0.333333 0 0.666667],... 239

'LineStyle','none', 'LineWidth',1,... 240

'Marker','.', 'MarkerSize',12); 241

xlim_(1) = min(xlim_(1),min(BMI)); 242

xlim_(2) = max(xlim_(2),max(BMI)); 243

legh_(end+1) = h_; 244

legt_end+1 = 'C vs. BMI'; 245

246

% Nudge axis limits beyond data limits 247

if all(isfinite(xlim_)) 248

xlim_ = xlim_ + [-1 1] * 0.01 * diff(xlim_); 249

Appendice

110

set(ax_,'XLim',xlim_) 250

else 251

set(ax_, 'XLim',[20.940000000000001, 27.059999999999999]); 252

end 253

254

255

% --- Create fit "fit 2" 256

ok_ = isfinite(BMI) & isfinite(C); 257

if ~all( ok_ ) 258

warning( 'GenerateMFile:IgnoringNansAndInfs', ... 259

'Ignoring NaNs and Infs in data' ); 260

end 261

ft_ = fittype('poly2'); 262

263

% Fit this model using new data 264

cf_ = fit(BMI(ok_),C(ok_),ft_); 265

266

% Or use coefficients from the original fit: 267

if 0 268

cv_ = 3.9761904761902751e-009, -1.4294285714284742e-007, 269

1.5306952380951219e-006; 270

cf_ = cfit(ft_,cv_:); 271

end 272

273

% Plot this fit 274

h_ = plot(cf_,'fit',0.95); 275

legend off; % turn off legend from plot method call 276

set(h_(1),'Color',[1 0 0],... 277

'LineStyle','-', 'LineWidth',2,... 278

'Marker','none', 'MarkerSize',6); 279

legh_(end+1) = h_(1); 280

legt_end+1 = 'fit 2'; 281

282

% Done plotting data and fits. Now finish up loose ends. 283

hold off; 284

leginfo_ = 'Orientation', 'vertical', 'Location', 'NorthEast'; 285

h_ = legend(ax_,legh_,legt_,leginfo_:); % create legend 286

set(h_,'Interpreter','none'); 287

xlabel(ax_,''); % remove x label 288

ylabel(ax_,''); % remove y label 289

290

291

-------------------------------------------------------------------------------------------------------- 292

Appendice

111

293

function [cf_]= createFit_D(BMI,D) 294 %CREATEFIT Create plot of datasets and fits 295

% CREATEFIT(BMI,D) 296

% Creates a plot, similar to the plot in the main curve fitting 297

% window, using the data that you provide as input. You can 298

% apply this function to the same data you used with cftool 299

% or with different data. You may want to edit the function to 300

% customize the code and this help message. 301

% 302

% Number of datasets: 1 303

% Number of fits: 1 304

305

306

% Data from dataset "D vs. BMI": 307

% X = BMI: 308

% Y = D: 309

% Unweighted 310

% 311

% This function was automatically generated on 01-May-2010 19:51:30 312

313

% Set up figure to receive datasets and fits 314

f_ = clf; 315

figure(f_); 316

set(f_,'Units','Pixels','Position',[1 41 1280 633]); 317

legh_ = []; legt_ = ; % handles and text for legend 318

xlim_ = [Inf -Inf]; % limits of x axis 319

ax_ = axes; 320

set(ax_,'Units','normalized','OuterPosition',[0 0 1 1]); 321

set(ax_,'Box','on'); 322

axes(ax_); hold on; 323

324

325

% --- Plot data originally in dataset "D vs. BMI" 326

BMI = BMI(:); 327

D = D(:); 328

h_ = line(BMI,D,'Parent',ax_,'Color',[0.333333 0 0.666667],... 329

'LineStyle','none', 'LineWidth',1,... 330

'Marker','.', 'MarkerSize',12); 331

xlim_(1) = min(xlim_(1),min(BMI)); 332

xlim_(2) = max(xlim_(2),max(BMI)); 333

legh_(end+1) = h_; 334

legt_end+1 = 'D vs. BMI'; 335

Appendice

112

336

% Nudge axis limits beyond data limits 337

if all(isfinite(xlim_)) 338

xlim_ = xlim_ + [-1 1] * 0.01 * diff(xlim_); 339

set(ax_,'XLim',xlim_) 340

else 341

set(ax_, 'XLim',[20.940000000000001, 27.059999999999999]); 342

end 343

344

345

% --- Create fit "fit 3" 346

ok_ = isfinite(BMI) & isfinite(D); 347

if ~all( ok_ ) 348

warning( 'GenerateMFile:IgnoringNansAndInfs', ... 349

'Ignoring NaNs and Infs in data' ); 350

end 351

ft_ = fittype('poly2'); 352

353

% Fit this model using new data 354

cf_ = fit(BMI(ok_),D(ok_),ft_); 355

356

% Or use coefficients from the original fit: 357

if 0 358

cv_ = -3.2290476190476295e-006, 0.00015784371428571476, 359

-0.0019004426666666726; 360

cf_ = cfit(ft_,cv_:); 361

end 362

363

% Plot this fit 364

h_ = plot(cf_,'fit',0.95); 365

legend off; % turn off legend from plot method call 366

set(h_(1),'Color',[1 0 0],... 367

'LineStyle','-', 'LineWidth',2,... 368

'Marker','none', 'MarkerSize',6); 369

legh_(end+1) = h_(1); 370

legt_end+1 = 'fit 3'; 371

372

% Done plotting data and fits. Now finish up loose ends. 373

hold off; 374

leginfo_ = 'Orientation', 'vertical', 'Location', 'NorthEast'; 375

h_ = legend(ax_,legh_,legt_,leginfo_:); % create legend 376

set(h_,'Interpreter','none'); 377

xlabel(ax_,''); % remove x label 378

Appendice

113

ylabel(ax_,''); % remove y label 379

380

381

function [cf_] = createFit_E(BMI,E) 382 %CREATEFIT Create plot of datasets and fits 383

% CREATEFIT(BMI,E) 384

% Creates a plot, similar to the plot in the main curve fitting 385

% window, using the data that you provide as input. You can 386

% apply this function to the same data you used with cftool 387

% or with different data. You may want to edit the function to 388

% customize the code and this help message. 389

% 390

% Number of datasets: 1 391

% Number of fits: 1 392

393

394

% Data from dataset "E vs. BMI": 395

% X = BMI: 396

% Y = E: 397

% Unweighted 398

% 399

% This function was automatically generated on 01-May-2010 19:52:08 400

401

% Set up figure to receive datasets and fits 402

f_ = clf; 403

figure(f_); 404

set(f_,'Units','Pixels','Position',[1 41 1280 633]); 405

legh_ = []; legt_ = ; % handles and text for legend 406

xlim_ = [Inf -Inf]; % limits of x axis 407

ax_ = axes; 408

set(ax_,'Units','normalized','OuterPosition',[0 0 1 1]); 409

set(ax_,'Box','on'); 410

axes(ax_); hold on; 411

412

413

% --- Plot data originally in dataset "E vs. BMI" 414

BMI = BMI(:); 415

E = E(:); 416

h_ = line(BMI,E,'Parent',ax_,'Color',[0.333333 0 0.666667],... 417

'LineStyle','none', 'LineWidth',1,... 418

'Marker','.', 'MarkerSize',12); 419

xlim_(1) = min(xlim_(1),min(BMI)); 420

xlim_(2) = max(xlim_(2),max(BMI)); 421

Appendice

114

legh_(end+1) = h_; 422

legt_end+1 = 'E vs. BMI'; 423

424

% Nudge axis limits beyond data limits 425

if all(isfinite(xlim_)) 426

xlim_ = xlim_ + [-1 1] * 0.01 * diff(xlim_); 427

set(ax_,'XLim',xlim_) 428

else 429

set(ax_, 'XLim',[20.940000000000001, 27.059999999999999]); 430

end 431

432

433

434

% --- Create fit "fit 4" 435

ok_ = isfinite(BMI) & isfinite(E); 436

if ~all( ok_ ) 437

warning( 'GenerateMFile:IgnoringNansAndInfs', ... 438

'Ignoring NaNs and Infs in data' ); 439

end 440

ft_ = fittype('poly2'); 441

442

% Fit this model using new data 443

cf_ = fit(BMI(ok_),E(ok_),ft_); 444

445

% Or use coefficients from the original fit: 446

if 0 447

cv_ = -4.0797619047619551e-005, 0.0020376642857143096, 448

-0.023580380952381241; 449

cf_ = cfit(ft_,cv_:); 450

end 451

452

453

% Plot this fit 454

h_ = plot(cf_,'fit',0.95); 455

legend off; % turn off legend from plot method call 456

set(h_(1),'Color',[1 0 0],... 457

'LineStyle','-', 'LineWidth',2,... 458

'Marker','none', 'MarkerSize',6); 459

legh_(end+1) = h_(1); 460

legt_end+1 = 'fit 4'; 461

462

% Done plotting data and fits. Now finish up loose ends. 463

hold off; 464

Appendice

115

leginfo_ = 'Orientation', 'vertical', 'Location', 'NorthEast'; 465

h_ = legend(ax_,legh_,legt_,leginfo_:); % create legend 466

set(h_,'Interpreter','none'); 467

xlabel(ax_,''); % remove x label 468

ylabel(ax_,''); % remove y label 469

-------------------------------------------------------------------------------------------------------- 470

471

function [cf_]=createFit_F(BMI,F) 472

473 %CREATEFIT Create plot of datasets and fits 474

% CREATEFIT(BMI,F) 475

% Creates a plot, similar to the plot in the main curve fitting 476

% window, using the data that you provide as input. You can 477

% apply this function to the same data you used with cftool 478

% or with different data. You may want to edit the function to 479

% customize the code and this help message. 480

% 481

% Number of datasets: 1 482

% Number of fits: 1 483

484

485

% Data from dataset "F vs. BMI": 486

% X = BMI: 487

% Y = F: 488

% Unweighted 489

% 490

% This function was automatically generated on 01-May-2010 19:53:11 491

492

% Set up figure to receive datasets and fits 493

f_ = clf; 494

figure(f_); 495

set(f_,'Units','Pixels','Position',[1 41 1280 633]); 496

legh_ = []; legt_ = ; % handles and text for legend 497

xlim_ = [Inf -Inf]; % limits of x axis 498

ax_ = axes; 499

set(ax_,'Units','normalized','OuterPosition',[0 0 1 1]); 500

set(ax_,'Box','on'); 501

axes(ax_); hold on; 502

503

504

% --- Plot data originally in dataset "F vs. BMI" 505

BMI = BMI(:); 506

F = F(:); 507

Appendice

116

h_ = line(BMI,F,'Parent',ax_,'Color',[0.333333 0 0.666667],... 508

'LineStyle','none', 'LineWidth',1,... 509

'Marker','.', 'MarkerSize',12); 510

xlim_(1) = min(xlim_(1),min(BMI)); 511

xlim_(2) = max(xlim_(2),max(BMI)); 512

legh_(end+1) = h_; 513

legt_end+1 = 'F vs. BMI'; 514

515

% Nudge axis limits beyond data limits 516

if all(isfinite(xlim_)) 517

xlim_ = xlim_ + [-1 1] * 0.01 * diff(xlim_); 518

set(ax_,'XLim',xlim_) 519

else 520

set(ax_, 'XLim',[20.940000000000001, 27.059999999999999]); 521

end 522

523

% --- Create fit "fit 6" 524

ok_ = isfinite(BMI) & isfinite(F); 525

if ~all( ok_ ) 526

warning( 'GenerateMFile:IgnoringNansAndInfs', ... 527

'Ignoring NaNs and Infs in data' ); 528

end 529

ft_ = fittype('poly2'); 530

531

% Fit this model using new data 532

cf_ = fit(BMI(ok_),F(ok_),ft_); 533

534

% Or use coefficients from the original fit: 535

if 0 536

cv_ = -0.0043750000000000091, 0.2141607142857147, 537

-2.5819714285714341; 538

cf_ = cfit(ft_,cv_:); 539

end 540

541

% Plot this fit 542

h_ = plot(cf_,'fit',0.95); 543

legend off; % turn off legend from plot method call 544

set(h_(1),'Color',[1 0 0],... 545

'LineStyle','-', 'LineWidth',2,... 546

'Marker','none', 'MarkerSize',6); 547

legh_(end+1) = h_(1); 548

legt_end+1 = 'fit 6'; 549

550

Appendice

117

% Done plotting data and fits. Now finish up loose ends. 551

hold off; 552

leginfo_ = 'Orientation', 'vertical', 'Location', 'NorthEast'; 553

h_ = legend(ax_,legh_,legt_,leginfo_:); % create legend 554

set(h_,'Interpreter','none'); 555

xlabel(ax_,''); % remove x label 556

ylabel(ax_,''); % remove y labe557

Bibliografia

118

Bibliografia

[1] ISO-2631 (1997). Mechanical vibration and shock. evaluation of human exposure to

whole-body vibration

[2] UNI-2631 (1997). Mechanical vibration and shock. Valutazione dell'esposizione

dell'uomo alle vibrazioni trasmesse al corpo intero.

[3] Scirè F. I. (2009). Analisi numerica e ottimizzazione di modelli biomeccanici per lo

studio del comfort vibrazionale di passeggeri a bordo di veicoli.

[4] Valentini P. P. (2008). Modelli predittivi per lo studio del comfort vibrazionale degli

occupanti di autovetture. Tesi di Dottorato di Ricerca, Università di Roma Tor

Vergata.

[5] Rossi Valerio (2009). Monitoraggio del Comfort Vibrazionale secondo la ISO 2631

[6]: progetto e realizzazione di un dispositivo low cost con impostazione e

validazione di un modello predittivo.

[6] Pennestrì E.; Cheli F. (2006). Cinematica e Dinamica dei Sistemi Multibody, volume

1. CEA.

[7] Micheal J. Griffin Yasunao Matsumoto. Handbook of Human Vibration (1990).

Academic Press.

Bibliografia

119

[8] Pennestrì E.; Carnevale D.; Valentini P. P.; Rossi V.; Scirè F. I.; Cavacece M.

(2009). Comparison of different seat-to-head transfer functions for vibrational

comfort monitoring of car passengers

[9] Decreto Legislativo (2005). Attuazione della direttiva 2002/44/ce sulle prescrizioni

minime di sicurezza e di salute relative all'esposizione dei lavoratori ai rischi

derivanti da vibrazioni meccaniche.

[10] Cho-Chung Liang C.-F. C. (2006). A study on biodynamic models of seated human

subjects exposed to vertical vibration. International Journal of Industrial

Ergonomics, 36, 869-890..

[11] Schildt H. (2005). La guida completa C++. McGrawHill.

[12] . Aimeta.Younggun Cho Y. S. Y. (2001). Biomechanical model of human on seat

with backrest for evaluating ride quality. International Journal of Industrial

Ergonomics, 27, 331-345.

Siti Web Consultati

120

Siti Web Consultati

[Sito 1] Visual numerics (imsl). http://www.vni.com/.

[Sito 2] Matlab. http://www.mathworks.com/.

[Sito 3] Garxface C++ library. http://www.stempsoft.com/.

[Sito 4] Svantek italia. http://svantek.com/.

[Sito 5] Gps visualizer. http://www.gpsvisualizer.com/.

[Sito 6] Phidget. http://www.phidgets.com/.

[Sito 7] Sdl. http://www.libsdl.org/.

[Sito 8] C++. http://www.cplusplus.com/.

[Sito 9] Garmin. http://www.garmin.it/.

Indice delle Figure

121

Indice delle Figure

Figura 1 - Modello "Black Box" .......................................................................... Pag.8

Figura 2 - Modello a 4 gradi di libertà di Wan e Shimmels ............................... Pag.13

Figura 3 - STH del modello Wan e Shimmels…………….………… ........ …..Pag.14

Figura 4 – Modello di Allen (1978)………..…………………..…….......……Pag.16

Figura 5 - Assi baricentrici del corpo umano…………………..…….......……Pag.18

Figura 6- Zone di attenzione secondo le linee guida della salute ....................... Pag.25

Figura 7- Accelerometro Triassiale Phidget 1059 .............................................. Pag.30

Figura 8- Pedana ................................................................................................ Pag.32

Figura 9- Angolo Superiore Pedana .................................................................. Pag.33

Figura 10– Angolo Inferiore Pedana .................................................................. Pag.33

Figura 11 – Dispositivo Basculante ................................................................... Pag.34

Figura 12– Visualizzazione Frontale 3D ............................................................ Pag.35

Figura 13 - Visualizzazione dall'alto 3D ............................................................ Pag.35

Figura 14 - Visualizzazione del motore 3D ....................................................... Pag.35

Figura 15- Visualizzazione del sedile 3D .......................................................... Pag.35

Figura 16- Tester Frontrale 3D ........................................................................... Pag.36

Figura 17 –Tester Laterale 3D .......................................................................... Pag.36

Indice delle Figure

122

Figura 18 – Sedile .............................................................................................. Pag.37

Figura 19 – Accelerometro Testa ....................................................................... Pag.37

Figura 20– Postura Corretta Tester .................................................................... Pag.38

Figura 21 - Acquisizione Dati ............................................................................ Pag.39

Figura 21 – Dispositivo GPS .............................................................................. Pag.40

Figura 23 – Angolatura Iniziale ......................................................................... Pag.40

Figura 24– Sistema di riferimento dell’accelerometro ....................................... Pag.41

Figura 25 – Angoli di inclinazione dell’accelerometro ...................................... Pag.42

Figura 26 – Acquisizione Dati in Tempo Reale ................................................. Pag.43

Figura 27– Accelerometro Sedile ....................................................................... Pag.43

Figura 28 – Accelerometro Testa ....................................................................... Pag.44

Figura 29– Salvataggio ed Inizio Nuova Prova ................................................. Pag.44

Figura 30– Accelerazione alla Testa non Filtrata ............................................... Pag.49

Figura 31 – Accelerazione alla Testa Filtrata ..................................................... Pag.49

Figura 32– Accelerazione al Sedile non Filtrata ................................................ Pag.50

Figura 33– Accelerazione al Sedile Filtrata………………………………… ... Pag.50

Figura 34– Attendibilità della prova .................................................................. Pag.51

Figura 35– Accelerazione al Sedile nel Dominio della Frequenza .................... Pag.52

Figura 36– Accelerazione alla Testa nel Dominio della Frequenza ................... Pag.52

Figura 37– Media Tester Corporatura Normale - Robusta ............................... Pag.53

Figura 38– Diagramma di Bode Tester Normali - Robusti ................................ Pag.55

Indice delle Figure

123

Figura 39– Diagramma di Bode dei vari BMI .................................................. Pag.56

Figura 40 - Correlazione A vs BMI .................................................................. Pag.58

Figura 41 - Correlazione B vs BMI .................................................................... Pag.58

Figura 42 – Correlazione C vs BMI .................................................................. Pag.59

Figura 43 - Correlazione D vs BMI ................................................................... Pag.59

Figura 44 - Correlazione E vs BMI .................................................................... Pag.60

Figura 45 - Correlazione F vs BMI .................................................................... Pag.60

Figura 46 – Diagramma di Bode del Tester Prova ............................................. Pag.63

Figura 47 - Modello Meccanico ......................................................................... Pag.64

Indice delle Tabelle

124

Indice delle Tabelle

Tabella 1 – Parametri Biomeccanici ................................................................... Pag.24

Tabella 2 - Reazioni di Benessere alle Vibrazioni ............................................. Pag.26

Tabella 3 - Effetti delle Vibrazioni .................................................................... Pag.27

Tabella 4 – Caratteristiche accelerometro Phidget 1059 .................................... Pag.30

Tabella 5 – Classificazione BMI…………………… .... ……………………... Pag.45

Tabella 6 – Dati Tester ....................................................................................... Pag.47

Tabella 7 – Funzione di Trasferimento a seconda dei BMI ............................... Pag.56

Tabella 8 – Valori di A, B, C nella Funzione di Traferimento Generica .......... Pag.62

Tabella 9 – Valori di D, E, F nella Funzione di Traferimento Generica ........... Pag.62

Ringraziamenti

125

Ringraziamenti

Non posso esimermi dal ringraziare il Prof. Ing. Ettore Pennestrì, una delle persone più

acculturate che abbia mai conosciuto, per la pazienza e la devozione con cui mi ha assistito

in questi mesi di duro lavoro essendo sempre presente per qualsiasi delucidazione e

sapendo trovare le parole giuste per motivarmi affinchè dessi sempre il massimo anche nei

momenti più bui.

Come fanno quasi tutti gli studenti ho scelto prima il Relatore e poi la Tesi ed ora posso

dire di aver fatto sicuramente la scelta giusta.

Come non ringraziare l'Ing.Daniele Carnevale che mi ha supportato e "sopportato" durante

questi fantastici mesi non sottraendosi mai al suo arduo compito di correlatore anche in

orari insoliti nei giorni festivi sempre reperibile e gentilissimo anche via email,

praticamente un correlatore full time.

Come non ricordare l'esplosione del motore della pedana nel "Laboratorio di Robotica

Pesante" , che poi non ho mai capito perchè si chiami Pesante se l'oggetto che pesa di più

lì dentro è di pochi Kg, mha…misteri di Tor Vergata.

Devo ringraziare Alessandro A., Alessio, Gianpiero, Marco R., Marco P., Valentina,

Gianni con cui ho condiviso questi anni fantastici all'insegna del divertimento ma anche

della sofferenza avendo dovuto superare gli esami difficili che l'Università ci poneva

difronte.

Ringrazio di cuore tutti i ragazzi dell'Alitur, Alessandro P., Andrea P., Emilia, Silvia,

Clemente, Sara, tutti gli altri… con cui ho condiviso questo anno l'esperienza del

FORUM.

Ringrazio tutti i Tester, non li elenco perchè sicuramente me ne dimenticherò qualcuno,

che sono stati così gentili nel sottoporsi alla prova della pedana e tutti i miei amici

Ringraziamenti

126

trebisaccesi e romani.

Ringrazio i miei due compagni di viaggio Daniele S. e Giudo C. con cui ho condiviso

l'esperienza di questa tesi sperimentale, i ragazzi del laboratorio ed i miei due coinquilini

Daniel e Marco che mi sopportano costantemente ogni giorno.

Ringrazio i miei genitori, mio fratello Giuseppe, mia sorella Elena i miei nonni che mi

hanno invogliato ed incoraggiato sempre durante tutto il cammino universitario e sono

sicuro che lo faranno anche negli anni avvenire.

Un ultimo ma per me il piu' grande pensiero va a due persone venute a mancare

prematuramente che sono mio Zio Antonio da cui ho appreso la passione e la volontà di

riparare qualsiasi oggetto mi trovassi difronte fin da piccolo ed il mio amico Diego con cui

ho passato 4 anni di Università bellissimi ed avremmo dovuto concludere insieme questo

percorso universitario.

Per non concludere in maniere triste visto che le persone che mi conoscono sanno che sono

tutto altro tipo, voglio dare il benvenuto al mondo alla figlia di mia cugina nata pochi mesi

fa Marianna augurandole tutto il bene possibile.

Marco