高通滤波去除基线漂移matlab,去基线漂移

去除基线漂移有多种方法。

1.matlab内置函数detrend

不适合非线性的复杂信号

2.小波变换去除基线漂移wavelet

定义一个函数DeBaseline_Wavelet为去基漂函数

function y = DeBaseline_Wavelet(x)

s=x; %获取要处理的信号,x是在上面.mat里的一个参数

%整个信号的长度

N = numel(s);

%小波分解;

maxlev=7; %分解6尺度7层

wavename = 'db6'; %小波函数名称(需根据信号定)

[C,L] = wavedec(s,maxlev,wavename);

%提取分解后逼近系数和细节系数

A7=appcoef(C,L,wavename,7);

D1=detcoef(C,L,1);

D2=detcoef(C,L,2);

D3=detcoef(C,L,3);

D4=detcoef(C,L,4);

D5=detcoef(C,L,5);

D6=detcoef(C,L,6);

D7=detcoef(C,L,7);

D1= zeros(1,length(D1))'; %去掉高频噪声

D2= zeros(1,length(D2))';

A7=zeros(1,length(A7));

C2 = [A7,D7',D6',D5',D4',D3',D2',D1']; %新的系数

y = (waverec(C2,L,wavename))'; %重构去基线后信号

end

高通滤波去除基线漂移matlab,去基线漂移_第1张图片

3.低通滤波

先进行低通滤波,然后用原始信号减去得到的趋势信号,即为去趋势后的信号

sig_raw=lfp4;

NLen=length(sig_raw);

fs=1000;%采样频率,可从软件上设定

Ts=1/fs;%时间间隔为采样频率的倒数

fmaxd=5;%截止频率为3Hz

fmaxn=fmaxd/(fs/2);

[b,a]=butter(1,fmaxn,'low');

dd=filtfilt(b,a,lfp4);%通过5Hz低通滤波器的信号

Y1=lfp4-dd;          %去除这一段信号,得到去基线漂移的信号

%绘图

subplot(3,1,1),plot(lfp4,'b');xlabel('原始信号');

subplot(3,1,2),plot(dd,'b');xlabel('趋势线');

subplot(3,1,3),plot(Y1,'b');xlabel('去除基线漂移的信号')

高通滤波去除基线漂移matlab,去基线漂移_第2张图片

4.高通滤波

直接设置一个高通滤波器将低于3Hz的信号除掉即可

%高通滤波去除基线漂移

clear

load(x);%load your raw sinal

sig_raw=x;

NLen=length(sig_raw);

fs=1000;%采样频率,可从软件上设定

Ts=1/fs;%时间间隔为采样频率的倒数

%高通滤波

[bbw,abw]=cheby1(4,0.5,1.5/180,'high');

Y1=filtfilt(bbw,abw,lfp4);

figure(1)

subplot(2,1,1),plot(sig_raw);xlabel('原始信号');

subplot(2,1,2),plot(Y1);xlabel('去除基线漂移的信号')

高通滤波去除基线漂移matlab,去基线漂移_第3张图片

你可能感兴趣的:(高通滤波去除基线漂移matlab,去基线漂移)