معرفی
هدف ما ساخت رابط مغز و کامپیوتر با استفاده از میکروکنترلر AVR بود. ما تصمیم گرفتیم که کمتهاجمیترین روش برای اندازهگیری امواج مغزی استفاده از الکتروانسفالوگرافی (EEG) برای ثبت تفاوتهای پتانسیل برد میکروولت در نقاط مختلف روی پوست سر کاربر باشد. به منظور انجام این کار، یک مدار تقویت و فیلتر دو مرحله ای ساختیم. علاوه بر این، ما از عملکرد ADC داخلی میکروکنترلر برای دیجیتالی کردن سیگنال استفاده کردیم. الکترودهای غیرفعال با روکش نقره آغشته به محلول نمکی روی سر کاربر قرار می گیرند و به برد تقویت کننده متصل می شوند. UART ایزوله شده مقادیر دیجیتال ADC را از طریق USB به رایانه ای که به میکروکنترلر متصل است ارسال می کند. رایانه شخصی نرم افزار نوشته شده با MATLAB و C را برای اجرای FFT و اجرای الگوریتم های یادگیری ماشین (SVM) روی سیگنال حاصل اجرا می کند. از آنجا، ما توانستیم اجرای OpenGL خودمان از بازی PC کلاسیک Pong را با استفاده از امواج مغزی خود کنترل کنیم. ما همچنین نرم افزاری نوشتیم تا خواب ما را ضبط کند و سیگنال EEG را در یک فایل داده ذخیره کند.
طراحی سطح بالا
منطقی و الهام بخش برای ایده پروژه
ایده پروژه ما از اختلال شدید آپنه انسدادی خواب (OSA) چارلز الهام گرفته شده است. به منظور تشخیص آپنه خواب، یک مطالعه بالینی خواب انجام می شود که در آن بیمار به الکترودهای EEG همراه با SpO 2 متصل می شود.سنسورهای EMG و تنفس. الگوهای خواب بیمار در طول شب ثبت می شود و آپنه ها (دوره های خواب بدون تنفس) را می توان در داده های جمع آوری شده شناسایی کرد. این فرآیند پرهزینه است و نیاز به یک شب اقامت در بیمارستان یا آزمایشگاه خواب دارد. علاوه بر این، بیمار اغلب از دسترسی به داده های خود محروم می شود زیرا یک متخصص خواب مجاز آن را برای آنها تفسیر می کند. هدف ما ساخت جایگزینی کمهزینه بود که به کاربران این امکان را میدهد تا با تشخیص و تلاش برای درمان اختلالات خواب خود، سلامت خود را در دست بگیرند. علاوه بر این، پروژه ما کاربردهای متنوعی در زمینههای نوروفیدبک (کمک به مدیتیشن و درمان اختلال ADHD) همراه با رابطهای مغز و رایانه دارد (به معلولان اجازه میدهد صندلیهای چرخدار را کنترل کنند و کلمات را روی صفحه رایانه با استفاده از افکارشان هجی کنند).
ریاضی پیشینه
ماشینهای بردار پشتیبانی
الگوریتم یادگیری ماشینی که ما استفاده کردیم یک ماشین بردار پشتیبان (SVM) بود، که طبقهبندیکنندهای است که در فضای ابعاد بالاتر عمل میکند و تلاش میکند تا بردارهای داده شده را با استفاده از یک ابر صفحه تقسیمکننده برچسبگذاری کند. روش یادگیری نظارت شده مجموعه ای از داده های آموزشی را می گیرد و مدلی را می سازد که قادر به برچسب گذاری داده های تست ناشناخته است. توضیح مختصری در مورد ریاضیات پشت SVM ها در زیر آمده است. در طول آموزش، به SVM مجموعهای از جفتهای instance-label به شکل {(xi⃗ ,yi):i=1,…,l} داده میشود که در آن نمونهها بردارهای n بعدی هستند به طوری که xi⃗ ∈Rn. ابعاد n نشان دهنده n "ویژگی" جداگانه است. علاوه بر این، برچسبها به شکل y∈{1,−1} هستند، که در آن 1 و -1 به ترتیب نمونههای هدف و غیرهدف را مشخص میکنند. برای "آموزش" ماشین بردار پشتیبان برای تشخیص بردارهای ورودی ناشناخته، مشکل کمینه سازی زیر حل می شود:
minw,b,ξ12wTw+C∑i=1lξi
موضوع:
yi(wTφ(xi)+b)≥1-ξi
ξi≥0
منبع: http://www.csie.ntu.edu.tw/~cjlin/papers/guide/guide.pdf
توجه داشته باشید که ϕ تابعی است که بردارهای آموزشی x⃗ i را در فضایی با ابعاد بالاتر ترسیم می کند، در حالی که C>0 و ξi به عنوان عبارات خطا عمل می کنند (به اصطلاح "متغیرهای شل"). علاوه بر این، K تابع هسته است که به عنوان K(φ(xi)Tϕ(xj)) تعریف می شود. برای اهداف خود، از یک هسته تابع پایه شعاعی (RBF) استفاده کردیم که دارای تابع K K(xi,xj)=exp(−γ||xi−xj||2) است که γ>0 یک پارامتر قابل تنظیم توسط کاربر را نشان میدهد. .
DFT
تبدیل فوریه گسسته (DFT) دنباله ای از N اعداد مختلط (یک سیگنال نقطه N) در حوزه زمان را به دنباله N دیگری در حوزه فرکانس از طریق فرمول زیر تبدیل می کند:
Xk=∑n=0N−1xn⋅e−2πkNn
تبدیل فوریه با F نشان داده می شود که در آن X=F(x) است. منبع: http://en.wikipedia.org/wiki/Discrete_Fourier_transform
الگوریتمی به نام تبدیل فوریه سریع (FFT) توسط کولی و توکی، برای انجام DFT در پیچیدگی محاسباتی O(nlogn) در مقابل O(n2) وجود دارد. ما از این افزایش سرعت برای انجام DFT در زمان واقعی بر روی سیگنال های ورودی استفاده می کنیم.
فیلترها
برای فیلتر کردن دادههای امواج مغزی در متلب، از یک فیلتر پاسخ ضربه محدود (FIR) استفاده میکنیم که بر روی آخرین نمونههای N+1 دریافتشده از ADC کار میکند. در پردازش سیگنال، خروجی y یک سیستم خطی با زمان ثابت (LTI) از طریق پیچیدگی سیگنال ورودی x با پاسخ ضربه ای آن به دست می آید. این تابع h سیستم LTI را مشخص می کند. معادله فیلتر بر حسب دنباله خروجی y[n] و دنباله ورودی x[n] است:
y[n]=h0x[n]+h1x[n−1]+…+hNx[n−N]
توجه داشته باشید که فقط ضرایب N برای این فیلتر استفاده می شود (بنابراین، پاسخ ضربه ای "محدود"). اگر اجازه دهیم N∞∞، آنگاه فیلتر به یک فیلتر پاسخ ضربه بی نهایت (IIR) تبدیل می شود. منبع: http://en.wikipedia.org/wiki/FIR_filter