I am trying to convert the following code in Python from MATLAB for an EEG project (partly because Python is a little cheaper!)
I hope someone can point me in the right direction: I started changing it, but got stuck: in particular, trying to find equivalent functions.
Trial scipy.org (NumPy_for_Matlab_Users, etc.), but I'm not sure if my arguments have the correct format / number)
I originally used pyserial
ser.read()
To read the data and then
ord()
To convert it to an integer, but this MATLAB code goes about it differently ('uchar')
My main problems were with
fopen fread find repmat
And the entire plot plot, since I have even less idea about this in Python (MatPlotLib?)
MATLAB also tends to start with '1', whereas Python uses 0: I also tried changing them, but skipped a few that I didn't know about.
Is Python happy with the entire colon-separated range
...repmat(0:2:10, .....
or not?
So here is MATLAB:
% EEG data grabber and plotter N = 256; % Required number of sample frames % Read in a block of data from the OpenEEG board hCom = serial('COM1','BaudRate',57600,'timeout',5); fopen(hCom); numBlocks = (ceil(17*N/256) + 1); rawdata = zeros(numBlocks*256,1); for n = 1:numBlocks rawdata((0:255) + n*256) = fread(hCom, 256, 'uchar'); % Read data end fclose(hCom); % Convert raw data into a Matlab matrix % First find the first frame start startIndex = find(rawdata == 165); while(rawdata(startIndex(1) + 1) ~= 90) startIndex = startIndex(2:end); end % Now extract the samples frameStarts = (0:(N-1))'*17 + startIndex(1); indices = 4 + repmat(frameStarts, 1, 6) + repmat(0:2:10, length(frameStarts), 1); eegData = (rawdata(indices)*256 + rawdata(indices + 1)) - 512; % eegData is now a N by 6 matrix, each column is a channel of sampled data % Plot time-series data figure(1) subplot(2,1,1) plot((0:255)/256,eegData(:,1:2)) xlabel('Time [s]'); ylabel('EEG data'); % Calculate FFT and plot spectra subplot(2,1,2) window = 0.5 - 0.5 * cos(2*pi*(0:255)/255); % Von-Hann Window f = abs(fft(repmat(window',1,2) .* eegData(:,1:2))); plot((0:127),f(1:128,:)) xlabel('Frequency [Hz]'); ylabel('EEG FFT');
And here is my version of my cousin
import scipy import serial
All suggestions are gratefully received!
Dave!