2. Inferenza Fuzzy
Per generare le Fuzzy-Inference abbiamo necessità di elaborare le relazioni min-max di Zadeh perché l’esperienza e la letteratura ci dicono che esse danno buoni risultati.
Il processo consiste nel:
1- Pulire il vettore d’uscita Y[]
2- Prendere il primo membro del vettore X1[]
3- Comparare esso con ogni membro del vettore X2[]. Il valore più piccolo viene memorizzato ad ogni comparazione.
4- Il valore massimo è trovato tra i membri ottenuti nello step 3
5- Questo valore viene sommato al membro del vettore d’uscita il quale è definito dalle regole d’inferenza.
6- Il prossimo membro del vettore X1[] è preso, processato e ripetuto dal passo 3 al passo 6.
Il vettore di uscita che otteniamo applicando le inferenze fuzzy è : Y[]=[0h, 30h, 3D0h, 0h, 0h]
flz47655 wrote:Volevo solamente segnalare che ho trovato un'introduzione alla logica fuzzy (6 pagine) sul n.140 di Fare Elettronica, articolo facente parte di una serie dedicata all'intelligenza artificiale
Ciao
Numero: 140
Mese: Febbraio
Anno: 1997
Numero doppio: NO
Pagine: 116
10 Centralina d'allarme
8 Pulce telefonica in FM
9 Xr2206 sinus generator
9 Superfiltro RCL
18 Semplice tester per riflessi
22 Love test
26 Controllo automatico per caricabatterie
29 Dottor square
36 Termometro digitale con 68HC11
42 Solar system 1' Parte
52 Filtro di banda sui 144 MHz
53 Stadio audio a transistor per rx
54 Ricevitore AM FM sui 10 metri
58 Sonda amplificata
59 Mixer a doppio bilanciamento
61 Filtro audio
63 Media frequenza a banda stretta
65 Compressore per trasmettitori
72 Ground plane VHF
79 Soundplayer
86 Timer ritardatore 1-130 secondi
90 Adc low cost
95 Preampli phono dinamico
102 I filtri passa alto
108 Pulsantiera a quattro tasti
//-----------------------------------------------------------------------------------
// La funzione converte i valori discreti in un vettore a 5 elementi Fuzzy Vector Data[]
//-----------------------------------------------------------------------------------
void Fuzzification(int Value, int *Data)
{
int i;
for (i = 0; i < 5; i++)
Data[i] = 0;
if (Value < -0x800)
Data[NM] = 0x400;
else if (Value < -0x400)
{
Data[NM] = 0x400 - (Value + 0x800);
Data[NS] = Value + 0x800;
}
else if (Value < 0)
{
Data[NS] = 0x400 - (Value + 0x400);
Data[ZE] = Value + 0x400;
}
else if (Value < 0x400)
{
Data[ZE] = 0x400 - Value;
Data[PS] = Value;
}
else if (Value < 0x800)
{
Data[PS] = 0x400 - (Value - 0x400);
Data[PM] = Value - 0x400;
}
else
Data[PM] = 0x400;
}
Users browsing this forum: No registered users and 7 guests