Why does the signal become thicker after noise reduction and the dots on both sides diverge?
Show older comments
I want to apply a voice noise reduction program similar to the one below to my own 1D signal, but I found that after noise reduction, the 1D signal becomes thicker and the points at both ends of the signal become divergent, and I can't find the cause of this phenomenon and how to fix it. Hope to get your help. Have a great day!
the program is that:
my result is as follow:

the red is clean signal, the yellow is signal with noise, and the green is signal after denoisng.
3 Comments
Sumukh
on 19 Sep 2024
Can you please provide the 1-D signal being used here?
Mathieu NOE
on 19 Sep 2024
at least the two bottom plots from your yellow window seem just signal + white noise , no a reverb effect.
Are you sure you are using the right tool for the task ? there may be other ways to achieve your goal
very simple solution like smoothing (smoothdata.m) , polyfit or spline smoothing , or this (also usefull for 1D signal denoising) :
Yi Ma
on 19 Sep 2024
Answers (1)
Mathieu NOE
on 20 Sep 2024
hello again
you can already get decent results with smoothdata , other smoothing techniques based on splines or NN could also work
this is the 4th y data , processed with the code shown below :

for k = 1:4
figure(k)
ys1 = smoothdata(y(:,k),'sgolay',150);
ys2 = smoothn(y(:,k),'robust');
plot(y(:,k))
hold on
plot(ys1)
plot(ys2)
legend('noisy signal','smoothdata','smoothn')
end
4 Comments
Yi Ma
on 24 Sep 2024
Mathieu NOE
on 24 Sep 2024
Edited: Mathieu NOE
on 24 Sep 2024
Hello again
tx , have a great day either
FYI, this fex submission may interest you :
I have tried it , not will all options and possibilities , but results are interesting. Also NN requires you to pay extra attention to network size , solver and other options to get to the expected results. Results will be sensitive to the correct implementation
here below some stuff done based on this fex submission
results for 2nd data (for example)

code :
load('2F8.mat')
[m,n] = size(y);
for k = 1:4
figure(k)
ys1 = smoothdata(y(:,k),'sgolay',150);
ys2 = NN_smooth((1:m),y(:,k)');
plot(y(:,k))
hold on
plot(ys1)
plot(ys2)
legend('noisy signal','smoothdata','NN smoothed')
end
%%%% NN_smooth function %%%%
function ys = NN_smooth(x,y)
% NN Set Up
NN0.LabelAutoScaling='on';
InputDimension=1;
OutputDimension=1;
LayerStruct=[InputDimension,8,8,OutputDimension];
NN0=Initialization(LayerStruct,NN0);
% Solver Set Up
option.Solver='BFGS'; % use Quasi-Newton Solver for faster convergence
option.MaxIteration=800;
NN0=OptimizationSolver(x,y,NN0,option);
ys=NN0.Evaluate(x);
end
Mathieu NOE
on 24 Sep 2024
my pleasure !
Categories
Find more on Multirate Signal Processing in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!