Why does the signal become thicker after noise reduction and the dots on both sides diverge?

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

Can you please provide the 1-D signal being used here?
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) :
@Sumukh sure, the 1D signla as follow 2F8.mat, "R” is clean signal, "y" is signal with noise, and "z" is noise. Each column in R, y, and z is a signal.

Sign in to comment.

Answers (1)

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

thank you very much, the result very good, i will learn it. but i want to apply network in signal denoise. Really appreciate your answer, hope you have a nice day!
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
yes, i have tried it as your method, the result is interesting. as the follows figures, only the second signal is perfect. i will to look at why this happens. This inspires me a lot, thank you very much!

Sign in to comment.

Products

Asked:

on 12 Sep 2024

Commented:

on 24 Sep 2024

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!