离群值:是指在数据中有一个或几个数值与其他数值相比差异较大,通俗来说就是离群体较远的数据。
需要用到的函数是isoutlier,对于原始含噪音的随机信号,其中会存在离群点的情况,接下来我们介绍如何对含有高斯白噪声的随机信号进行离群值检测和替换:
首先产生一个高斯白噪声加入随机信号,形成一个原始信号后对原始信号进行处理:
fs=500; %采样率
f1=7; %信号频率
f2=9; %信号频率
T=1; %时宽1s
n=round(T*fs); %采样点个数(四舍五入)
o=2*pi*rand; %生成(0:2π)之间的随机相位
t=linspace(0,T,n);%时域横坐标
x=2+cos(2*pi*f1*t+o)+2*cos(2*pi*f2*t+o);%形成三频信号,注意第二个频率信号幅度为2,直流幅度为3。
N=2*randn(size(t)); %生成一个均值为0,方差为4的高斯噪声信号
y=x+N; %给信号加上高斯噪声干扰
使用isoutlier函数检测其离群点,并找出其横纵坐标的值:
TF=isoutlier(y);%检测离群值
i=find(TF);%找出离群值横坐标位置
j=y(i);%得出该离群值位置的值是多少
最后使用filloutliers函数进行填充消除离群值绘制图像,填充方法很多如下,参考MATLAB帮助中心:
这里采用下一个点的坐标进行填充,根据数据类型选择合适的填充方法。
yfill = filloutliers(y,'next');
figure(4);
plot(t,y,t,yfill);
axis tight
legend('原始信号','离群值填充后信号')
填充后的对比如下所示:
可以明显看出中间有个值偏高,填充后消除了离群值,也可以在工作区中进行查看:
因为信号是随机的,所以每个人数据可能不同,也可能没有离散值,也可能不止一个离散值。