【脑电信号】基于matlab小波睡眠监测【含Matlab源码 595期】
2021/6/25 14:57:07
本文主要是介绍【脑电信号】基于matlab小波睡眠监测【含Matlab源码 595期】,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、简介
基于matlab的脑电波睡眠监测
二、源代码
data0=rand(1,9999); %脑电信号原始数据 tm=0.02; %采样时间间隔 td=1:tm:30; %取时间1-30秒 data=data0(1:(30-1)/tm+1); %1-30秒的数据 figure(1) subplot(211); plot(td,data); xlabel('时间(秒)'),ylabel('脑波电压'),title('1-30s脑电图波'); %fft变换 Fs=1000; n=length(data); data1=fft(data,n);%傅里叶变换% df=Fs/length(data1); %频域分辨率 Fx=df*(0:length(data1)-1); %将横轴变为频率轴% figure(1); subplot(212); plot(Fx,abs(data1)); %绘制脑电波信号的频谱图% axis([0 150 0 60]); title('频谱图');xlabel('频率/Hz');ylabel('幅值'); %信号预处理 %低通滤波——巴特沃斯滤波器 Fs=1000; fp=30; fs=40; Ap=1; As=30; Wp=fp/(Fs/2);%计算归一化角频率 Ws=fs/(Fs/2); [N,Wc]=buttord(Wp,Ws,Ap,As);%计算阶数和截止频率 [b,a]=butter(N,Wc,'low');%计算H(z)分子、分母多项式系数 [H,F]=freqz(b,a,500,Fs);%计算H(z)的幅频响应,freqz(b,a,计算点数,采样速率) figure(2) subplot(2,2,2) ; plot(F,20*log10(abs(H))) ; xlabel('频率(Hz)'); ylabel('幅度(dB)') axis([0 100 -30 3]); grid on ; subplot(2,2,1) plot(F,abs(H)); xlabel('频率(Hz)'); ylabel('幅度 ') ; title('低通滤波器'); axis([0 100 0 2]); grid on; subplot(2,2,3); pha=angle(H)*180/pi; plot(F,pha); xlabel('频率(Hz)'); ylabel('相位(dB)') axis([0 100 -200 200]); grid on; % % %用低通巴特沃斯滤波器 Q=filter(b,a,data); figure(3) subplot(211); plot(td,Q); title('过巴斯后时域图');xlabel('时间');ylabel('幅值'); %fft变换 n=length(Q); Q1=fft(Q,n);%傅里叶变换% df=Fs/length(Q1); %频域分辨率 Fx=df*(0:length(Q1)-1); %将横轴变为频率轴% figure(3); subplot(212); plot(Fx,abs(Q1)); %绘制脑电波信号的频谱图% axis([0 50 0 60]); title('频谱图');xlabel('频率/Hz');ylabel('幅值'); % %------小波阈值去噪 %------软阈值小波去噪 [c,s]=wavedec2(Q,2,'db5'); [thr,sorh,keepapp] = ddencmp('den','wv',Q); [xc,cxc,lxc,perf0,perfl2]=wdencmp('gbl',Q,'sym4',2,thr,sorh,keepapp);% figure(4); subplot(211); plot(td,xc); title('小波去噪后时域图');xlabel('时间');ylabel('幅值'); u=xc; %fft变换 n=length(xc); xc1=fft(xc,n);%傅里叶变换% df=Fs/length(xc1); %频域分辨率 Fx=df*(0:length(xc1)-1); %将横轴变为频率轴% figure(4); subplot(212); plot(Fx,abs(xc1)); %绘制声音信号的频谱图% axis([0 60 0 100]); title('小波去噪后频谱图');xlabel('频率/Hz');ylabel('幅值'); %-- 第一段波过带通滤波器------------ n=length(xc); fs=[0.1,5];fp=[0.5,3]; fo=1200; %采样频率 wp=2.*fp./fo;ws=2.*fs./fo; rp=1;as=40; f = design(fdesign.bandpass(fs(1),fp(1),fp(2),fs(2),as,rp,as,fo),'butter'); y1=filter(f,xc); yt1=fft(y1,n); df=Fs/length(yt1); %频域分辨率 Fx=df*(0:length(yt1)-1); %将横轴变为频率轴% figure(5); subplot(3,1,1),plot(td,y1); xlabel('时间(秒)'),ylabel('脑波电压'),title('1-30s第一阶段脑电图波'); subplot(3,1,2); plot(Fx,abs(yt1)); %绘信号的频谱图% axis([0 6 0 100]); title('第一阶段频谱图');xlabel('频率/Hz');ylabel('幅值'); %功率谱 fs=800;ts=1/fs; t=0:ts:2; nfft=64; power1=(norm(y1)^2/length(y1+1)); spow1=abs(fft(y1,nfft).^2); f=(0:nfft-1)/ts/nfft; f=f-fs/2; figure(5); subplot(3,1,3); plot(f,fftshift(spow1),'k'); title('第一阶段功率谱图');xlabel('频率');ylabel('功率谱'); disp(['power1=',num2str(power1),'.']); %-- 第二段波过带通滤波器------------ n=length(u); fs=[3,9];fp=[4,7]; fo=1200; %采样频率 wp=2.*fp./fo;ws=2.*fs./fo; rp=1;as=40; f = design(fdesign.bandpass(fs(1),fp(1),fp(2),fs(2),as,rp,as,fo),'butter'); y2=filter(f,u); yt2=fft(y2,n); df=Fs/length(yt2); %频域分辨率 Fx=df*(0:length(yt2)-1); %将横轴变为频率轴% figure(6); subplot(3,1,1); plot(td,y2); xlabel('时间(秒)');ylabel('脑波电压');title('1-30s第二阶段脑电图波'); subplot(3,1,2); plot(Fx,abs(yt2)); %绘信号的频谱图% axis([2 15 0 50]); title('第二阶段频谱图');xlabel('频率/Hz');ylabel('幅值'); %功率谱 fs=800;ts=1/fs; t=0:ts:2; nfft=64; power2=(norm(y2)^2/length(y2+1)); spow2=abs(fft(y2,nfft).^2); f=(0:nfft-1)/ts/nfft; f=f-fs/2; figure(6); subplot(3,1,3); plot(f,fftshift(spow2),'k'); title('第一阶段功率谱图');xlabel('频率');ylabel('功率谱'); disp(['power2=',num2str(power2),'.']); %-- 第三段波过带通滤波器------------ n=length(u); fs=[7,14];fp=[8,13]; fo=1200; %采样频率 wp=2.*fp./fo;ws=2.*fs./fo; f = design(fdesign.bandpass(fs(1),fp(1),fp(2),fs(2),as,rp,as,fo),'butter'); y3=filter(f,u); df=Fs/length(yt3); %频域分辨率 Fx=df*(0:length(yt3)-1); %将横轴变为频率轴% figure(7); subplot(3,1,1); plot(td,y3); xlabel('时间(秒)');ylabel('脑波电压');title('1-30s第三阶段脑电图波'); subplot(3,1,2); plot(Fx,abs(yt3)); %绘信号的频谱图% axis([4 16 0 30]); title('第三阶段频谱图');xlabel('频率/Hz');ylabel('幅值'); %功率谱 fs=800;ts=1/fs; t=0:ts:2; nfft=64; power3=(norm(y3)^2/length(y3+1)); spow3=abs(fft(y3,nfft).^2); f=(0:nfft-1)/ts/nfft; f=f-fs/2; figure(7); subplot(3,1,3); plot(f,fftshift(spow3),'k'); title('第三阶段功率谱图');xlabel('频率');ylabel('功率谱'); disp(['power3=',num2str(power3),'.']);
三、运行结果
四、备注
版本:2014a
完整代码或代写加1564658423
这篇关于【脑电信号】基于matlab小波睡眠监测【含Matlab源码 595期】的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-14后台交互资料入门指南
- 2024-11-14如何轻松创建项目环境:新手入门教程
- 2024-11-14如何抽离公共代码:初级开发者指南
- 2024-11-14Python编程入门指南
- 2024-11-14Python编程入门:如何获取参数
- 2024-11-14JWT 用户校验:简单教程与实践
- 2024-11-14Pre-commit 自动化测试入门指南
- 2024-11-14Python编程基础
- 2024-11-14Server Action入门教程:轻松掌握服务器操作
- 2024-11-14Server Component入门教程:轻松搭建服务器组件