Prosthetics Control
EMG Signal Classification
Feature Extraction
import numpy as np
class EMGFeatureExtractor:
def extract(self, signal):
return {
'MAV': np.mean(np.abs(signal)),
'WL': np.sum(np.abs(np.diff(signal))),
'ZC': np.sum(np.diff(np.sign(signal)) != 0),
'RMS': np.sqrt(np.mean(signal ** 2)),
'MF': self._mean_frequency(signal),
'MNF': self._mean_freq(signal)
}
def _mean_frequency(self, signal):
fft = np.abs(np.fft.rfft(signal))
freqs = np.fft.rfftfreq(len(signal))
return np.sum(freqs * fft) / (np.sum(fft) + 1e-8)
Intent Recognition
class IntentClassifier(nn.Module):
def __init__(self, n_channels=8, n_classes=7):
super().__init__()
self.conv = nn.Sequential(
nn.Conv1d(n_channels, 32, 5, padding=2), nn.ReLU(), nn.MaxPool1d(2),
nn.Conv1d(32, 64, 5, padding=2), nn.ReLU(), nn.AdaptiveAvgPool1d(1))
self.fc = nn.Linear(64, n_classes)
def forward(self, x):
return self.fc(self.conv(x).squeeze(-1))