Why does the signal become thicker after noise reduction and the dots on both sides diverge?
Ältere Kommentare anzeigen
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 Kommentare
Sumukh
am 19 Sep. 2024
Can you please provide the 1-D signal being used here?
Mathieu NOE
am 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
am 19 Sep. 2024
Antworten (1)
Mathieu NOE
am 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 Kommentare
Yi Ma
am 24 Sep. 2024
Mathieu NOE
am 24 Sep. 2024
Bearbeitet: Mathieu NOE
am 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
am 24 Sep. 2024
my pleasure !
Kategorien
Mehr zu Measurements and Feature Extraction finden Sie in Hilfe-Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
