Matlab用连续小波变换后的小波系数的数据怎么提取

2024-12-15 11:27:06
推荐回答(1个)
回答1:

close all ; %关闭当前及所有工作区中所有打开的数据库,表,和索引,并选择 1 号工作区.
clc;
clear all ; % 从内存中释放所有的内存变量和数组以及所有用户自定义的菜单栏,菜单,和窗口的定义.
%信号滤波
l1=filter(b,1,c3); %c3 8-12Hz滤波
l2=filter(b,1,c4); %c4 8-12Hz滤波
figure;
subplot(2,1,1);plot(1:1152,c3(:,2),'r',1:1152,l1(:,2),'k');
xlabel('时间');ylabel('幅度');legend('c3 滤波前','c3滤波后');
subplot(2,1,2);plot(1:1152,c4(:,2),'r',1:1152,l2(:,2),'k');
xlabel('时间');ylabel('幅度');legend('c4 滤波前','c4滤波后');
title('8-12Hz滤波后的结果');
c3_shang=-(l1.^2).*log(l1.^2);
c4_shang=-(l2.^2).*log(l1.^2);
figure;
plot(1:1152,c3_shang(:,1),'r',1:1152,c3_shang(:,2),'k');
legend('左手c3','右手c3');
title('左手c3的熵和右手c3的熵的图');
figure;
plot(1:1152,c3_shang(:,1),'r',1:1152,c4_shang(:,1),'k');
legend('左手c3','左手c4');
title('左手c3的熵和左手c4的熵的图');
%由上图可以发现左手c3和右手c3的熵在600-1000点之间差别较大,因此在下面的分类中,选用600-1000之间的点进行分类
y_train=(y_train-1.5)*2;
model= svmtrain(y_train(1:90),c3(600:1000,1:90)','-s 0 -t 2 -c 1 -g 0.1');
[predictlabel,accuracy] = svmpredict(y_train(91:140),c3(600:1000,91:140)',model)