How to denoise chirp signal in low SNR condition with NLMS or any other methods?

7 views (last 30 days)
I am trying to denoise a chirp (LFM) signal for further analysis, like Short Time Fourier Transform and FrFT. But when in low SNR condition, the STFT results seems to be terrible, and I'm trying to enhance it with dsp.LMSFilter function.
The desired output is the prediction of noise in current pulse, and the reference noise is the WGN with zero signal. It seems that the NLMS filter doesn't work.
Here are my script, it can run in Matlab directly. Can you help me?
T = 10*10^(-6); % Total time 10us
fs = 500*10^6; % 500MHz
t = 0:1/fs:(T-1/fs); % time points
n = length(t); % number of time points
A_lfm = 1; % lfm amplitude (lfm is same as chirp)
fc_lfm = 100*10^6; % start frenquency
B = 100*10^6; % lfm bandwidth 100MHz
SNR = -9; % low SNR
Kr_lfm = B/T; % modulation rate
y_lfm = A_lfm*cos(2*pi*fc_lfm*t + pi*Kr_lfm*t.^2); % original chirp signal
y_n1 = awgn(y_lfm, SNR);% actual input signal for further analysis
y_0 = zeros(1,length(y_lfm));
y_v = awgn(y_0, SNR); % refenence noise
noise = y_v';
x = y_n1'; % NLMS input
mu = 0.01;
L = 100;
nlms = dsp.LMSFilter(L,'StepSize',mu,'Method','Normalized LMS');
[y_nlms_noise,e,w] = nlms(x,noise); % y_nlms_noise is the output, prediction of noise in current pulse
y_n1_denoise =y_n1 - (y_nlms_noise)'; % denoise
figure;
p=plot(t(1:500),y_lfm(1:500), t(1:500),y_n1(1:500),...
t(1:500),y_n1_denoise(1:500));
legend('ideal denoise result','signal with noise','actual denose result');
% p(1).Color='g'; p(2).Color='b';p(3).Color='c';
xlabel('time');ylabel('amplitude');
  4 Comments
Yazan
Yazan on 19 Aug 2021
This line of research has gotten really wide recently. I haven't worked before on such low SNR values, so I don't have real suggestions apart from experimenting with the time-frequency representations provided by B.Boashash in his tool box. If you're doing research, I believe that it is trivial to say that you need to focus on time-frequency representations for low SNR values particularly.
yan liu
yan liu on 20 Aug 2021
I'm sdutying radar systems, it is not very unusual to deal with this kind of low SNR condition :-D

Sign in to comment.

Accepted Answer

Yazan
Yazan on 19 Aug 2021
Edited: Yazan on 20 Aug 2021
As I mentioned in my comments to your question, it is recommended that you experiment with some state-of-the-art time-frequency representations other than the STFT. Matlab starting from R2018b provides a native function for the Wigner-Ville distribution and its pseudo version. I experimented with it. The result was not so bad.
clc, clear
T = 10*10^(-6);
fs = 500*10^6;
t = 0:1/fs:(T-1/fs);
fc = 100*10^6;
B = 100*10^6;
SNR = -9;
Kr = B/T;
% I do not have the communication toolbox to use awgn function
x = cos(2*pi*fc*t + pi*Kr*t.^2);
n = db2mag(mag2db(rms(x))-SNR)*randn(size(x));
y = x+n;
% smoothed Pseudo Wigner-Ville distribution
% I am using kaiser windows of different lengths for the time and frequency
% axes
[d, f, t] = wvd(y, fs, 'smoothedPseudo', kaiser(512-1, 20), kaiser(128-1, 20));
imagesc(t, f, d), xlabel('Time - sec'); ylabel('Frequency - Hz')
  2 Comments
yan liu
yan liu on 20 Aug 2021
Thanks a lot! I forgot the WVD since I'm not quite familiar with time-freq domain analysis methods. and I tried to improve SNR by accumulating noisy signal yesterday, it seems useful in theory.
By the way, the NLMS seems to be rather sensitive to white noise. When the SNR was set to 40dB, the former script I provided works well with audio signal LOL
Yazan
Yazan on 20 Aug 2021
If you are dealing with linear chirps, the Wigner distribution is the optimal time-frequency representation. Problems arise when dealing with multiple components (e.g., two chirps), as noisy cross-terms will be present due to nonlinear interactions between the signal's components. If the signal is a noisy one-component signal, you need to use the pseudo version to reduce the noise power, but at the expense of losing some resolution. The performance of any time-frequency representation is signal-dependent. Some are good for a class of signals, but not so much for signals out of this class. It is much easier to focus on representations that suit the signals that you're dealing with.

Sign in to comment.

More Answers (0)

Categories

Find more on Time-Frequency Analysis in Help Center and File Exchange

Products


Release

R2021a

Community Treasure Hunt

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

Start Hunting!