Deconvolution of noisy data

3 visualizzazioni (ultimi 30 giorni)
Totanly
Totanly il 12 Mar 2014
Risposto: Prateekshya il 14 Ott 2024
I have noisy waveform data and also normal waveform data.I want to extract original waveform data from noisy waveform.There are two methods (Wiener filter and Richardson-Lucy) in Matlab. But I can't understand how to use them.
noisywaveform = [0 0 0 0 0 0 0 0 0 0 0 0 82 76 66 82 70 64 70 82 87 79 88 89 84 100 89 79 98 96 85 72 108 98 99 106 105 108 101 105 129 111 133 108 101 118 117 142 123 131 137 122 118 144 196 131 137 151 162 146 183 157 172 152 166 171 172 193 174 175 171 158 168 174 166 179 198 166 172 187 164 133 161 155 163 143 134 155 144 157 136 136 151 129 139 156 168 105 127 130 150 137 136 138 171 146 125 135 106 123 115 123 113 98 108 87 0 0 0 0 0 0 0 0 0 0 0 0 ] ; normal_waveform=[0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 3 5 9 15 27 57 82 137 146 155 169 151 191 145 169 156 159 133 126 152 124 112 123 116 95 102 104 91 106 94 88 87 75 87 80 70 65 63 55 65 63 63 52 55 46 48 46 39 50 45 42 36 40 34 36 36 36 33 31 29 33 30 25 28 27 22 0 0 0 0 0 0 0 0 0 0 0 0 ];
Plz help me....

Risposte (1)

Prateekshya
Prateekshya il 14 Ott 2024
Hello Totanly,
To extract the original waveform from the noisy waveform, you can use signal processing techniques like the Wiener filter and the Richardson-Lucy deconvolution in MATLAB. Here is how you can apply both methods to your data:
  • Wiener Filter:
The Wiener filter is used to reduce noise and improve the signal quality. It assumes that both the signal and noise are stationary processes. Here is how you can apply the Wiener filter using MATLAB:
% Noisy waveform
noisywaveform = [0 0 0 0 0 0 0 0 0 0 0 0 82 76 66 82 70 64 70 82 87 79 88 89 84 100 89 79 98 96 85 72 108 98 99 106 105 108 101 105 129 111 133 108 101 118 117 142 123 131 137 122 118 144 196 131 137 151 162 146 183 157 172 152 166 171 172 193 174 175 171 158 168 174 166 179 198 166 172 187 164 133 161 155 163 143 134 155 144 157 136 136 151 129 139 156 168 105 127 130 150 137 136 138 171 146 125 135 106 123 115 123 113 98 108 87 0 0 0 0 0 0 0 0 0 0 0 0];
% Apply Wiener filter
estimated_signal_wiener = wiener2(noisywaveform, [1, 5]); % Adjust window size as needed
% Plot the results
figure;
plot(noisywaveform, 'r', 'DisplayName', 'Noisy Waveform');
hold on;
plot(estimated_signal_wiener, 'b', 'DisplayName', 'Wiener Filtered Signal');
legend;
title('Wiener Filter');
xlabel('Sample Index');
ylabel('Amplitude');
The plot looks like:
  • Richardson-Lucy Deconvolution:
The Richardson-Lucy algorithm is typically used for deconvolution, especially in image processing, but it can be adapted for 1D signals. This method assumes a known point spread function (PSF). Here is how you can apply the Richardson-Lucy deconvolution:
% Define the point spread function (PSF)
psf = ones(1, 5) / 5; % Example PSF, adjust as needed
% Apply Richardson-Lucy deconvolution
estimated_signal_rl = deconvlucy(noisywaveform, psf, 10); % Number of iterations can be adjusted
% Plot the results
figure;
plot(noisywaveform, 'r', 'DisplayName', 'Noisy Waveform');
hold on;
plot(estimated_signal_rl, 'g', 'DisplayName', 'Richardson-Lucy Deconvolved Signal');
legend;
title('Richardson-Lucy Deconvolution');
xlabel('Sample Index');
ylabel('Amplitude');
The result looks like:
I hope this helps!

Community Treasure Hunt

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

Start Hunting!

Translated by