منابع پایان نامه ارشد درباره محدودیت ها

دانلود پایان نامه ارشد

= new Intent(
BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
startActivityForResult(enabler, REQUEST_DISCOVERABLE);
}

/* Close BT */
public void onDisableButtonClicked(View view) {
_bluetooth.disable();
}

/* Start search */
public void onStartDiscoveryButtonClicked(View view) {
Intent enabler = new Intent(this, DiscoveryActivity.class);
startActivity(enabler);
}
/* Client */
public void onOpenClientSocketButtonClicked(View view) {
Intent enabler = new Intent(this, ClientSocketActivity.class);
startActivity(enabler);
}
DiscoveryActivity: در این کلاس در ابتدا متغیری از جنس BluetoothAdapter برای دسترسی به سنسور بلوتوث گوشی تعریف ﻣﯽشود. متغیر بعدی یک لیست از BluetoothDevice برای قرار دادن دستگاهی دارای بلوتوث همسایه ﻣﯽباشد. در ادامه این کلاس چندین متغیر مهم تعریف شده است که به کار هر یک اشاره ﻣﯽکنیم. یک متغیر Runnable به نام _discoveryWorkder در این کلاس تعریف شده، که با مقداردهی اولیه آن سنسور گوشی شروع به جستجوی دستگاههای اطراف ﻣﯽکند. متغیر بعدی _foundReceiver از نوع BroadcastReceiver ﻣﯽباشد. با کمک این متغیر نتایج جستجوی دستگاههای همسایه در متغیر لیست BluetoothDevice ذخیره ﻣﯽشوند. تابع showDevices در این کلاس لیست دستگاههای کشف شده را نشان مـﯽدهد. در انتهای این کلاس تابع onListItemClick برای انتخاب یک دستگاه برای اتصال به گوشی تعریف شده است. با فراخوانی این تابع این کلاس به پایان می رسد و در ضمن یک ارتباط بلوتوث برقرار ﻣﯽگردد.
private BluetoothAdapter _bluetooth = BluetoothAdapter.getDefaultAdapter();
/* Storage the BT devices */
private List _devices = new ArrayList();
/* Discovery is Finished */
private volatile boolean _discoveryFinished;
private Runnable _discoveryWorkder = new Runnable() {
public void run() {
/* Start search device */
_bluetooth.startDiscovery();
Log.d(“EF-BTBee”, “Starting Discovery”);
for (;;) {
if (_discoveryFinished) {
Log.d(“EF-BTBee”, “Finished”);
break;
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
}
}
};

private BroadcastReceiver _foundReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
/* get the search results */
BluetoothDevice device = intent
.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
/* add to list */
devices.add(device);
/* show the devices list */
showDevices();
}
};

private BroadcastReceiver _discoveryReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
/* unRegister Receiver */
Log.d(“EF-BTBee”, “unregisterReceiver”);
unregisterReceiver(_foundReceiver);
unregisterReceiver(this);
_discoveryFinished = true;
}
};
ClientSocketActivity: این کلاس مهمترین کلاس در این بخش ﻣﯽباشد. متغیرهای مهمی که در ابتدای این کلاس تعریف شدﻩاند شامل، یک آداپتور برای بلوتوث، یک سوکت بلوتوث، دو متغیر برای گرفتن جریان ورودی و خروجی داده، و در نهایت برای این پروژه چهار متغیر برای تفکیک دادﻩهای سه محور شتاﺏسنج و رسانایی پوست. در شروع این کلاس فعال بودن آداپتور بلوتوث بررسی ﻣﯽشود، تا در صورت نبود آن از این کلاس خارج شود. در غیر اینصورت یک Intent برای کلاس DiscoveryActivity تقاضا ﻣﯽشود و در ادامه یک دستگاه برای ارسال و دریافت توسط کاربر انتخاب ﻣﯽشود. بعد از برقراری جریان داده بین گوشی و سنسور دادﻩهای ورودی در یک آرایه برای پردازش ذخیره ﻣﯽشوند. این بخش توسط یک thread پیاده سازی شده است.
for (; (read = inputStream.read(bytes)) -1 && (FCount 50); FCount++) {
final int count = read;
_handler.post(new Runnable() {
public void run() {
for (int i = 0; i count; ++i) {
s = Integer.toString(bytes[i]);
tempS += s;
tempS += “,”;
if (s == “1” || s == “2” || s == “3” || s == “4”)
label = s;
else if (label == “1”)
x = Integer.valueOf(s);
else if (label == “2”)
y = Integer.valueOf(s);
else if (label == “3”)
z = Integer.valueOf(s);
else if (label == “4”) {
gsr = Integer.valueOf(s);
Time now = new Time();
now.setToNow();
db.addData(new SensorDataModel(x, y, z, gsr, now.toString()));
SensorDataModel mdata = db.getData(db.getDataCount());
String log = “Id: ” + mdata.getID() + ” ,x: “
+ mdata.getX() + ” ,y: ” + mdata.getY()
+ ” ,z: ” + mdata.getZ() + ” ,gsr: “
+ mdata.getGSR()+ ” ,time: ” + mdata.getTIME();
Log.d(“data: “, log);
}
}

if (str != null) {
sTextView.setText(str + “– ” + sbu);
str += (“– ” + tempS.toString());
} else {
sTextView.setText(“– ” + sbu);
str = “– ” + tempS.toString();
}
str += ‘n’;
clearCount += 1;
if (clearCount == 51) {
str = “”;
clearCount = 0;
}
tempS = “”;
}
});
}
4-4-5-2 نرمال سازی دادﻩها
NormalizeData: دادﻩهایی که توسط سنسور تشنج جمع آوری ﻣﯽشوند، برای تجزیه و تحلیل آن ضرورت دارد که دادﻩها به یک سیستم با پردازنده قوی تری منتقل شوند، که مدنظر این پروژه یک گوشی هوشمند با سیستم عامل آندروید مجهز به بلوتوث ﻣﯽباشد. یکی از مشکلاتی که در ارتباطات بیسیم به طور معمول وجود دارد امکان گم شدن و یا خراب شدن دادﻩها است. یکی از بخشﻫﺎی اصلی کار بررسی وجود این مشکل و در صورت لزوم برطرف کردن آن است. در این کلاس این امکان وجود دارد تا اگر هر رکورد از دادﻩهای ورودی که از سنسور به گوشی ناقص رسیده اند، شناسایی شده و با استفاده از روشﻫﺎی نرمال سازی دادﻩها این مشکل تا حد امکان مرتفع گردد. با توجه به محدودیت هایی که در پردازنده و حافظه سیستم های همراه وجود دارد و همچنین امکان کاهش زمان پاسخگویی سیستم از یکی از سادهﺗرﻳﻦ روشﻫﺎ استفاده شده است. هر دادﻩای که در مسیر گم شده باشد از طریق میانگین داده از رکورد قبل و بعد از آن جایگزین ﻣﯽشود:
x_n=(x_(n-1)+ x_(n+1))/2
4-4-5-3 ذخيره در پايگاه داده
DatabaseHandler: این کلاس به عنوان کلاس اصلی در بخش پایگاه داده از کلاس SQLiteOpenHelper ارث بری دارد. در ابتدای این کلاس متغیرهای DATABASE_NAME، TABLE_DATA_RECEIVE، KEY_ID، KEY_ACCX، KEY_ACCY، KEY_ACCZ، KEY_GSR و KEY_TIME به ترتیب نام پایگاه داده، نام جدول ذخیره دادﻩهای دریافتی، شناسه رکورد، مقدار بعد X، مقدار بعد Y، مقدار بعد Z، مقدار GSR و زمان دریافت داده تعریف شدﻩاند. در قسمت سازنده این کلاس یک پایگاه داده ساخته ﻣﯽشود. در ادامه در بخش onCreate یک جدول با شش فیلد مربوط به شناسه رکورد دریافتی، دادﻩهای سنسور و زمان دریافت ساخته ﻣﯽشود. توابع onUpgrade، DropTable، updateData و deleteData به ترتیب برای بروز رسانی پایگاه داده و حذف جدول، بروز رسانی دادﻩهای جدول و حذف داده از جدول استفاده ﻣﯽشوند. سه تابع پرکاربرد در این کلاس addData، getData و getAllData به ترتیب برای افزودن یک رکورد، خواندن یک رکورد و خواندن همه رکوردهای ثبت شده از جدول ﻣﯽباشند.
// Database Name
private static final String DATABASE_NAME = “MyDB”;
// Data table name
private static final String TABLE_DATA_RECEIVE = “data_receive”;
// Data Table Columns names
private static final String KEY_ID = “id”;
private static final String KEY_ACCX = “accx”;
private static final String KEY_ACCY = “accy”;
private static final String KEY_ACCZ = “accz”;
private static final String KEY_GSR = “gsr”;
private static final String KEY_TIME = “mtime”;
public DatabaseHandler(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
// Creating Tables
public void onCreate(SQLiteDatabase db) {
String CREATE_DATA_TABLE = “CREATE TABLE ” + TABLE_DATA_RECEIVE + “(“+ KEY_ID + ” INTEGER PRIMARY KEY,” + KEY_ACCX + ” INTEGER,”+ KEY_ACCY + ” INTEGER,” + KEY_ACCZ + ” INTEGER,” + KEY_GSR+ ” INTEGER,” + KEY_TIME + ” TEXT” + “)”;
db.execSQL(CREATE_DATA_TABLE);
}
SensorDataModel: این کلاس در بخش مربوط به پایگاه داده در نقش تعریف یک مدل داده برای سنسور تشخیص تشنج ظاهر ﻣﯽشود. در این کلاس متغیرهای _x، _y، _z و _gsr به منظور دریافت داده از سه محور شتاﺏسنج و بخش رسانایی پوست به ترتیب در نظر گرفته شدﻩاند. متغیر _time برای ثبت زمان دریافت داده و _id برای ثبت یک شناسه منحصر به فرد برای هر رکورد از داده ﻣﯽباشد. در ادامه این کلاس مجموعه توابع SensorDataModel به عنوان سازنده و set و get برای تنظیم و یا گرفتن مقدار از متغییرهای ذکر شده استفاده ﻣﯽشوند.
public class SensorDataModel {
// private variables
int _id;
int _x;
int _y;
int _z;
int _gsr;
String _time;
.
.
.
}
4-4-5-4 استخراج ويژگی ها
میانگین یک ویژگی خوب و موثر در بخش دادﻩکاوی محسوب ﻣﯽشود. برای محاسبه این ویژگی مجموعه دادﻩای که در یک پنجره قرار دارد در قالب یک آرایه به تابع محاسبه میانگین ارسال ﻣﯽشود. سپس تک تک دادﻩها با هم جمع شده و بر تعداد اعضای آرایه تقسیم ﻣﯽشود. این ویژگی هم بر روی بردار شتاب و هم بر روی سیگنال GSR اعمال شد.
public double Mean(double[] inArray) {
double sum = 0.0;
double mean = 0.0;
if (inArray != null) {
for (int i = 0; i inArray.length; i++)
sum += inArray[i];
mean = sum / inArray.length;
}

return mean;
}

ویژگی مهم بعدی که در این پروژه از آن استفاده گردید انرژی سیگنال ﻣﯽباشد. این ویژگی به صورت مجموع توان دوم دادﻩهای یک پنجره محاسبه ﻣﯽشود. این ویژگی هم مانند میانگین هم بر روی بردار شتاب و هم بر روی سیگنال GSR اعمال گردید.
public double Energy(double[] inArray) {
double temp = 0.0, En;
for (int i = 0; i inArray.length; i++)
temp += Math.pow(inArray[i], 2);
En = temp;
return En;
}

توان ویژگی قابل قبول دیگری بود که همانند انرژی به صورت مجموع توان دوم دادﻩهای یک پنجره محاسبه شده و در نهایت حاصل بر دو برابر اعضاء پنجره تقسیم ﻣﯽشود. این ویژگی با انرژی رابطه خطی داشت، و اطلاعات بیشتری را در اختیار بخش دادﻩکاوی قرار ﻧﻣﯽ داد، بنابراین کنار گذاشته شد.
public double Power(double[] inArray) {
double temp = 0.0, Pw;
for (int i = 0; i inArray.length; i++)
temp += Math.pow(inArray[i], 2);
Pw = temp / ((2 * inArray.length) – 1);
return Pw;
}

جذر میانگین مربع هم یک ویژگی خوب در تشخیص نوع دادﻩها بود. و همانند توان رابطه خطی با انرژی داشت. و در ضمن چون محاسبه انرژی یک گام کوتاه تر از توان و جذر میانگین مربع بود، انتخاب شد و توان و جذر میانگین مربع از ادامه کار کنار گذاشته شدند.
public double RMS(double[] inArray) {
double temp = 0.0, RMS;
for (int i = 0; i inArray.length; i++)
temp += Math.pow(inArray[i], 2);
RMS = Math.sqrt(temp / inArray.length);
return RMS;
}

آنتروپی مربوط به میزان پراکنندگی یک مجموعه داده در یک بازه مشخص است. این ویژگی هم به عنوان یک ویژگی کارآمد در مجموعه باقی ماند. محاسبه این ویژگی به این صورت است که تک تک اعضاء یک مجموعه داده به توان دوم خود رسیده و در لگاریتم خود ضرب ﻣﯽشوند. در نهایت همه مقادیر بدست

پایان نامه
Previous Entries منابع پایان نامه ارشد درباره تلفن همراه، نام تجاری Next Entries منابع پایان نامه ارشد درباره محدودیت ها