CSP 共空間模式 的python實現

2021-10-10 16:31:31 字數 3909 閱讀 6900

提取碼:7jal

def

csp_yx

(eegsignals_x_train,eegsignals_y_train)

:

eeg_channels =

3 eeg_trials =

280 eeg_classes =

2 class_labels =[1

,2]# 計算協方差矩陣 cov1 cov2

trialcov = np.zeros(

(eeg_channels,eeg_channels,eeg_trials)

)for i in

range

(280):

e = eegsignals_x_train[:,

:,i]

.t # print(e.shape)

ee = np.dot(e,e.t)

trialcov[:,

:,i]

= ee/np.trace(ee)

;

cov1 = np.zeros(

(eeg_channels,eeg_channels,

140)

) cov2 = np.zeros(

(eeg_channels,eeg_channels,

140)

)

matrixcov = np.zeros((3

,3,2

))k=

0 s=

0for i in

range

(eeg_channels)

:if eegsignals_y_train[i]==1

: cov1[:,

:,k]

= trialcov[:,

:,i]

k=k+

1if eegsignals_y_train[i]==2

: cov2[:,

:,s]

= trialcov[:,

:,i]

s=s+

1

np.set_printoptions(precision=4)

# 計算平均協方差矩陣之和 covtotal

cov1 = np.mean(cov1,2)

cov2 = np.mean(cov2,2)

covtotal = cov1 + cov2

print

(covtotal)

# 計算公共特徵向量矩陣和特徵值

[dt,uc]

= np.linalg.eigh(covtotal)

# 降序排序

uc = uc[

:,dt.argsort()[

::-1

]]dt =

sorted

(dt,reverse=

true

)# 矩陣白化

dt = np.diag(dt)

dt = np.sqrt(1.

/dt)

# 去 inf值

c = np.isinf(dt)

dt[c]=0

print

(dt)

p = np.dot(dt,uc.t)

# print(p)

# 將p作用於 cov1 cov2

transformedcov1 = np.dot(np.dot(p,cov1)

,p.t)

transformedcov2 = np.dot(np.dot(p,cov2)

,p.t)

# s1 = p*r1*p.t

# 將 transformedcov1 按主分量分解得到公共特徵向量矩陣 b

[d1,u1]

= np.linalg.eig(transformedcov1)

# 降序

u1 = u1[

:,d1.argsort()]

d1 =

sorted

(d1,reverse=

true

)# print(u1)

[d2,u2]

= np.linalg.eig(transformedcov2)

# 公升序

u2 = u2[

:,d2.argsort()]

d2 = np.sort(d2)

# print(u2)

# 計算投影矩陣

cspmatrix = np.dot(u1.t,p)

return cspmatrix

import scipy.io as sio

import numpy as np

datasetfile =

"../l-r hand/dataset_bcicomp1.mat"

testlabelfile =

"../test/labels_data_set_iii.mat"

eegsignals = sio.loadmat(datasetfile)

labelset = sio.loadmat(testlabelfile)

eegsignals_x_train = np.concatenate(

[eegsignals[

'x_train'

],eegsignals[

'x_test']]

, axis=2)

eegsignals_y_train = np.concatenate(

[eegsignals[

'y_train'

],labelset[

'y_test']]

)

w = csp_yx.csp_yx(eegsignals_x_train,eegsignals_y_train)
filterpairs =

1# csp特徵選擇引數m

features_train = np.zeros(

(280,2

*filterpairs)

)# features_test = np.zeros((80, 2*filterpairs))

m1 = w[

0:filterpairs]

m2 = w[

3-filterpairs:3]

filter = np.concatenate(

[m1,m2]

)filter

data = np.concatenate(

[eegsignals[

'x_train'

],eegsignals[

'x_test']]

,axis=2)

projectedtrial = np.zeros((2

*filterpairs,

1152))

eeg_trials =

280for i in

range

(eeg_trials)

:# 將源訊號投影到 csp空間上

projectedtrial = np.dot(filter,data[:,

:,i]

.t)# 將投影訊號的方差得對數作為特徵

variances_train = np.var(projectedtrial,1)

for f in

range

(len

(variances_train)):

features_train[i,f]

= np.log(variances_train[f]

)

csp = features_train[0,

:2]

pycharm下的多個python版本共存(二)

選擇版本可以在建立專案的時候進行,也可以在設定中進行設定 開啟file default setting project interpreter 在右側介面的設定圖示處單機add local。然後選擇python2或者3的可執行檔案 python.exe 目錄。新增完兩個版本後 之後就可以選擇乙個然後...

python中的命名空間

命名空間就是存放變數名和函式名的空間。如果你想訪問乙個變數值,必須先訪問對應的命名空間,拿到名字和對應記憶體位址的繫結關係。1 內建命名空間 python提前定義好的名字,就是存在於內建命名空間 2 全域性命名空間 存放於檔案級別的名字,就叫做全域性命名空間 在全域性空間下 if while for...

python命名空間列印 python的命名空間

定義 名稱到物件的對映。命名空間是乙個字典的實現,鍵為變數名,值是變數對應的值。各個命名空間是對立沒有關係的,乙個命名空間中不能有重名,但是不同的命名空間可以重名且沒有任何影響。分類 python程式執行期間會有2個或3個活動的命名空間 函式呼叫時有3個,函式呼叫結束後2個 按照變數定義的位置,可以...