View
11
Download
0
Category
Preview:
Citation preview
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
Recommended