您的位置:首页 > 编程语言 > MATLAB

Matlab小波包分解后如何求各频带信号的能量值?

2015-12-03 09:18 405 查看


Matlab小波包分解后如何求各频带信号的能量值? [转]

clear;

clc;

n=3;

wpname='db3';

% [b,a]=butter(8,[5/100 99/100]);

% load a1_1-1;

load k301_1-4;

% Data=filter(b,a,Data);

Data=Data-mean(Data);

Data=detrend(Data);

wpt1=wpdec(Data,n,wpname); %对数据进行小波包分解

for i=1:2^n %wpcoef(wpt1,[n,i-1])是求第n层第i个节点的系数

E(i)=norm(wpcoef(wpt1,[n,i-1]),2);%求第i个节点的范数平方,其实也就是平方和

end

% disp('每个节点的能量E(i)');

% E

% disp('小波包分解总能量E_total');

E_total=sum(E); %求总能量

for i=1:2^n

pfir(i)= E(i)/E_total;%求每个节点的概率

end

pfir

% load a1_1-2;

load k302_1-4;

% Data=filter(b,a,Data);

Data=Data-mean(Data);

Data=detrend(Data);

wpt2=wpdec(Data,n,wpname); %对数据进行小波包分解

for i=1:2^n %wpcoef(wpt1,[n,i-1])是求第n层第i个节点的系数

E(i)=norm(wpcoef(wpt2,[n,i-1]),2);%求第i个节点的范数平方,其实也就是平方和

end

E_total=sum(E); %求总能量

for i=1:2^n

psec(i)= E(i)/E_total;%求每个节点的概率

end

psec

% load a1_1-4;

load k303_1-4;

% Data=filter(b,a,Data);

Data=Data-mean(Data);

Data=detrend(Data);

wpt3=wpdec(Data,n,wpname); %对数据进行小波包分解

for i=1:2^n %wpcoef(wpt1,[n,i-1])是求第n层第i个节点的系数

E(i)=norm(wpcoef(wpt3,[n,i-1]),2);%求第i个节点的范数平方,其实也就是平方和

end

E_total=sum(E); %求总能量

for i=1:2^n

pthi(i)= E(i)/E_total;%求每个节点的概率

end

pthi
格式:

y = detrend(x) % 消除时间序列中的线性趋势项
y = detrend(x,'constant') % 消除时间序列中的均值
y = detrend(x,'linear',bp) % 分段消除时间序列中的线性趋势项,bp为分段点向量



detrend的一个实例

 sig = [0 1 -2 1 0 1 -2 1 0]; % 无线性趋势的信号

trend = [0 1 2 3 4 3 2 1 0]; % 有两段线性的趋势

x = sig+trend; % 将上面趋势叠加到信号上

y = detrend(x,'linear',5) % 根据指定的分段点去除两段线性趋势

y =

   -0.0000    1.0000   -2.0000    1.0000         0    1.0000   -2.0000    1.0000    0.0000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: