基于平稳小波变换和非线性能量毛刺检测
程序员文章站
2023-12-31 20:46:46
...
使用matlab 2014a,具体如下:
function output = spikesDetection( wave, threshold, plotFlag)
%spikesDetection 毛刺检测
% 基于平稳小波变换swt和非线性能量检测算法,对毛刺进行特征增强后,根据阈值检测毛刺的位置
% wave 一维矩阵,1xn, n必须为2的N次方
% threshold 阈值
% plotFlag 是否打印结果图像,1打印
% 输出如果下标为1,则该位置为毛刺
n = length(wave); %获取长度
output = zeros(1,n); %声明变量
[swa,swd]=swt(wave,1,'coif2');%swa为近似信号,swd为细节信号,被检测信号序列必须为2的N次方
NEO = zeros(1,n); %声明变量
NEO(1) = swd(1,1); NEO(n) = swd(1,n); %初始化开始第一个值和最后一个值
for i= 2:length(wave)-1
NEO(i) = swd(1,i)*swd(1,i) - swd(1,i-1)*swd(1,i+1);
if NEO(i) > threshold
output(i) = 1;
end;
end
if plotFlag==1
figure;
subplot(2,1,1), plot(wave);
subplot(2,1,2), plot(NEO);
end
end
主函数:
clc;
clear;
t=0:1:127;
y=sin(t/10);
z=sin(t/5);
for i = 1:64
y(64+i) = z(i);
end
output = spikesDetection(y, 0.5,1);
推荐阅读