揭秘响应式脑电波:Web 蓝牙+RxJS+Angular 赋能脑机交互!
2023-10-16 14:29:59
几个月前,我发现了一个蓝牙智能脑电波头戴设备,顿时被它的潜力所吸引。想象一下,我们可以使用 Web 蓝牙,让大脑直接与网页进行通讯!脑电波 ( Electroencephalography,简称 EEG ) 是一种监测脑电活动的方式,通常需要昂贵的仪器和复杂的操作。然而,随着技术的进步,脑电波头戴设备变得更加轻便和易于使用,为我们探索脑机交互的无限可能性打开了大门。
在这篇文章中,我们将深入探讨响应式脑电波技术,并使用 RxJS、Angular 和 Web 蓝牙构建一个简单的脑机交互演示。我们将学习如何从脑电波头戴设备接收数据,如何使用 RxJS 处理和过滤这些数据,以及如何将处理后的数据可视化呈现。
脑电波入门
脑电波是神经元在处理信息时产生的电活动。这些电活动可以被放置在头皮上的电极检测到,并被记录下来。脑电波可以分为不同的频段,每种频段都与不同的脑活动状态相关。例如,α 波 (8-12 Hz) 与放松和冥想状态相关,β 波 (13-30 Hz) 与注意力集中和认知活动相关,θ 波 (4-8 Hz) 与睡眠和梦境相关。
响应式脑电波
响应式脑电波是指大脑对外部刺激的电活动反应。当我们看到、听到或感觉到一些东西时,大脑会产生相应的脑电波。例如,当我们看到一张熟悉的面孔时,大脑会产生一种称为 P300 的脑电波。P300 波通常出现在刺激出现后的 300 毫秒左右,并且与注意和记忆相关。
Web 蓝牙
Web 蓝牙是 HTML5 中的一个新 API,允许网页与蓝牙设备进行通信。这使得我们能够使用 JavaScript 直接访问脑电波头戴设备的数据。Web 蓝牙的优势在于它简单易用,并且可以在各种设备上使用,包括台式机、笔记本电脑、平板电脑和智能手机。
RxJS
RxJS 是一个 JavaScript 库,用于处理异步数据流。它提供了丰富的操作符,可以让我们轻松地过滤、转换和组合数据流。在脑机交互中,我们可以使用 RxJS 来处理从脑电波头戴设备接收到的数据流,并从中提取有用的信息。
Angular
Angular 是一个前端框架,用于构建交互式 web 应用程序。它提供了许多开箱即用的组件和服务,可以帮助我们快速构建复杂的 web 应用程序。在脑机交互中,我们可以使用 Angular 来构建一个简单的演示应用程序,将处理后的脑电波数据可视化呈现。
构建脑机交互演示
现在,让我们一步一步地构建一个简单的脑机交互演示。
1. 设置开发环境
首先,我们需要设置开发环境。你可以使用你喜欢的代码编辑器和终端。还需要安装 Node.js 和 Angular CLI。
2. 创建 Angular 项目
接下来,我们需要创建一个 Angular 项目。打开终端,并输入以下命令:
ng new brain-computer-interface
3. 安装依赖项
我们需要安装一些依赖项。打开终端,并输入以下命令:
npm install rxjs web-bluetooth
4. 配置 Web 蓝牙
接下来,我们需要在 Angular 项目中配置 Web 蓝牙。在 src/main.ts 文件中,添加以下代码:
import { enableWebBluetooth } from '@web-bluetooth/繞台js';
enableWebBluetooth();
5. 创建服务
我们需要创建一个服务来处理脑电波头戴设备的数据。在 src/app/services/brain-computer-interface.service.ts 文件中,添加以下代码:
import { Injectable } from '@angular/core';
import { Observable, fromEvent } from 'rxjs';
import { map, filter } from 'rxjs/operators';
@Injectable({
providedIn: 'root'
})
export class BrainComputerInterfaceService {
private device: BluetoothDevice;
private service: BluetoothRemoteGATTService;
private characteristic: BluetoothRemoteGATTCharacteristic;
constructor() { }
connect(): Observable<void> {
return fromEvent(window, 'deviceattached').pipe(
filter((event: any) => event.device.gatt.prf !== null),
map((event: any) => event.device)
).subscribe((device: BluetoothDevice) => {
this.device = device;
this.device.gatt.connect().then((server) => {
server.getPrimaryService('e0cb49f0-8d8e-11e9-8f0b-362b9e155667').then((service) => {
this.service = service;
service.getCharacteristic('e0cb49f1-8d8e-11e9-ac3f-2a2ae2dbcce4').then((characteristic) => {
this.characteristic = characteristic;
characteristic.startNotifications().then(() => {
console.log('Connected to brain-computer interface device.');
});
});
});
});
});
}
getData(): Observable<number[]> {
return fromEvent(this.characteristic, 'characteristicvaluechanged').pipe(
map((event: any) => {
const data = event.target.value.getInt8Array(1);
return data;
})
);
}
}
6. 创建组件
我们需要创建一个组件来显示脑电波数据。在 src/app/components/brain-computer-interface.component.ts 文件中,添加以下代码:
import { Component, OnInit, OnDestroy } from '@angular/core';
import { BrainComputerInterfaceService } from '../services/brain-computer-interface.service';
import { Subscription } from 'rxjs';
@Component({
selector: 'app-brain-computer-interface',
templateUrl: './brain-computer-interface.component.html',
styleUrls: ['./brain-computer-interface.component.css']
})
export class BrainComputerInterfaceComponent implements OnInit, OnDestroy {
private subscription: Subscription;
public data: number[] = [];
constructor(private brainComputerInterfaceService: BrainComputerInterfaceService) { }
ngOnInit(): void {
this.brainComputerInterfaceService.connect().subscribe();
this.subscription = this.brainComputerInterfaceService.getData().subscribe((data) => {
this.data = data;
});
}
ngOnDestroy(): void {
this.subscription.unsubscribe();
}
}
7. 创建模板
我们需要创建一个模板来显示脑电波数据。在 src/app/components/brain-computer-interface.component.html 文件中,添加以下代码:
<div class="container">
<h1>Brain-Computer Interface</h1>
<div class="data">
<p *ngFor="let value of data">{{ value }}</p>
</div>
</div>
8. 运行项目
现在,我们可以运行项目了。打开终端,并输入以下命令:
ng serve
9. 使用脑电波头戴设备
最后,我们需要连接脑电波头戴设备,并将其置于头上。确保脑电波头戴设备已打开并已与你的电脑配对。
结论
我们成功地构建了一个简单的脑机交互演示。这个演示应用程序可以让我们使用大脑来控制网页上的元素。这是一个非常简单的示例,但它展示了脑机交互的巨大潜力。随着技术的进步,脑机交互技术将变得更加强大和复杂,并将在许多领域发挥重要作用,例如医疗、教育和娱乐。