Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 极度密集信号的去噪_Matlab_Signal Processing_Interpolation_Smoothing - Fatal编程技术网

Matlab 极度密集信号的去噪

Matlab 极度密集信号的去噪,matlab,signal-processing,interpolation,smoothing,Matlab,Signal Processing,Interpolation,Smoothing,我试图通过去除所有尖峰,然后执行保形分段三次样条插值来去除高采样频谱的噪声,以尽可能多地保留频谱信息。但是,我无法清除所有的峰值,包括开始时的一个峰值。我错过了什么?我是否明智地对待这一点?顺便说一句,我有几个光谱需要处理。非常感谢您提前提供的任何信息 找到使用的信号数据 尝试 minval = 0; maxval = 950; figure(); plot(lambda, SI, '-') xlabel('Wavelength') ylabel('Signal Intensity') y

我试图通过去除所有尖峰,然后执行保形分段三次样条插值来去除高采样频谱的噪声,以尽可能多地保留频谱信息。但是,我无法清除所有的峰值,包括开始时的一个峰值。我错过了什么?我是否明智地对待这一点?顺便说一句,我有几个光谱需要处理。非常感谢您提前提供的任何信息

找到使用的信号数据

尝试

minval = 0;
maxval = 950;

figure();
plot(lambda, SI, '-')
xlabel('Wavelength')
ylabel('Signal Intensity')
ylim([minval maxval])
title('Original signal')

ind_min = find(SI <= minval);
ind_max = find(SI >= maxval);
lambda([ind_min.', ind_max.']) = [];
SI([ind_min.', ind_max.']) = [];

figure();
plot(lambda, SI, '-')
xlabel('Wavelength')
ylabel('Signal Intensity')
ylim([minval maxval])
title('Signal after removing all values above 950')

% Define threshold representing 25th percentile difference between signal values
diffSI = abs(diff(SI));
thres = quantile(diffSI, 0.25);

%% Remove all sharp peaks
% Remove all signal values differing from neighbouring values above 
% computed threshold and replace their values estimated by 
% shape-preserving piecewise cubic spline interpolation 
for i = 2:(length(SI) - 1)
    if abs(SI(i) - SI(i+1)) > thres
        SI(i) = NaN;
        SI(i+1) = NaN;
    elseif abs(SI(i) - SI(i-1)) > thres
        SI(i) = NaN;
        SI(i-1) = NaN;
    end
end
SI = fillmissing(SI, 'pchip');

figure()
plot(lambda, SI, '-')
xlabel('Wavelength')
ylabel('Signal Intensity')
ylim([minval maxval])
title('Signal after interpolation')
minval=0;
maxval=950;
图();
绘图(λ,SI,'-')
xlabel(“波长”)
ylabel(‘信号强度’)
ylim([minval-maxval])
标题(“原始信号”)
ind_min=find(SI=maxval);
λ([ind_min',ind_max.])=[];
SI([ind_min.,ind_max.])=[];
图();
绘图(λ,SI,'-')
xlabel(“波长”)
ylabel(‘信号强度’)
ylim([minval-maxval])
标题('删除950'以上所有值后的信号)
%定义表示信号值之间25%差异的阈值
diffSI=abs(diff(SI));
thres=分位数(diffSI,0.25);
%%清除所有尖峰
%删除与上述相邻值不同的所有信号值
%计算的阈值并替换其由
%保形分段三次样条插值
对于i=2:(长度(SI)-1)
如果abs(SI(i)-SI(i+1))>thres
SI(i)=NaN;
SI(i+1)=NaN;
elseif abs(SI(i)-SI(i-1))>thres
SI(i)=NaN;
SI(i-1)=NaN;
结束
结束
SI=填充缺失(SI,“pchip”);
图(
绘图(λ,SI,'-')
xlabel(“波长”)
ylabel(‘信号强度’)
ylim([minval-maxval])
标题(“插值后的信号”)

如果您有图像处理工具箱,该函数就是您的过滤器。它对数据应用形态学打开,这是一个偏向低值的非线性平滑函数(关闭是反向操作,偏向高值)


请注意,它不会像
imopen
过滤器那样跟踪下封套。您可以将这些结果相互叠加以查看差异。

如果您有图像处理工具箱,该函数就是您的过滤器。它对数据应用形态学打开,这是一个偏向低值的非线性平滑函数(关闭是反向操作,偏向高值)

请注意,它不会像
imopen
过滤器那样跟踪下封套。您可以将这些结果相互叠加以查看差异

load ~/tmp/SI_and_lambda.mat
SI2=imopen(SI,ones(25,1));
plot(lambda,SI)
hold on
plot(lambda,SI2,'r')