How to calculate SNR in hydrophone measures and reduce noise to improve signal detection

2 次查看(过去 30 天)
I am using Matlab to analyze sound which I have recorded using an underwater microphone (20kHz acquisition frequency) over 5 seconds. The microphone is placed in the center of an agitated tank.
I would like to determine particle collisions hitting my microphone when I add particles in my tank but as the particles are very small i expect the voltage response to be very small (at the moment they cannot be visually detected from the noise). I expect the voltage response of each collision to last approximately 100µs from litterature.
I have recorded the blank signal which is noisy due to the agitator but has an expected response : plotting the power spectrum using fourrier transform shows the presence of harmonics of my agitator speed.
I have recorded the signal when adding particles but i am not yet able to analyze it and nothing particular seems to show shen plotting power spectrum.
I would like to :
  1. Calculate my Signal to noise ratio which i expect to be quite low
  2. Clean up my signal from known perturbations (agitation harmonics) in the hope to increase this signal to noise ratio
Can any of the Matlab functions or addons help me to do this?

回答(1 个)

Abhimenyu
Abhimenyu 2024-4-4
编辑:Abhimenyu 2024-4-4
Hi Charlotte,
From the information shared, I inferred that you want to calculate "SNR" and clean up your signal. MATLAB provides a comprehensive set of tools and functions that can help to analyze the signal, calculate the "signal-to-noise ratio (SNR)", and filter out known perturbations to reveal the signals caused by particle collisions.
  • "SNR" calculation: To calculate the SNR, you first need to define what you consider as signal and what as noise. Assuming there is a segment with no particle collisions (the blank signal), this can serve as the noise. The segment where collisions are expected can be considered as the signal plus noise. MATLAB's "snr" function can calculate the SNR:
%Assuming y is the signal with particles and y_blank is the blank signal
SNR = snr(y,y_blank);
  • Cleaning up the signal by filtering out known perturbations: MATLAB's "Signal Processing Toolbox", "Wavelet Toolbox", and "DSP System Toolbox" provide many functions for filtering in both time and frequency domains, wavelet analysis, advanced signal analysis, etc respectively that can help to clean the signal. Here are some examples of the MATLAB functions that can help in filtering:
  1. The "filter" function can help in one-dimensional digital filtering using a custom filter design like moving average filter or matched filter.
  2. The "wdenoise" function denoises the data using an empirical Bayesian method with a Cauchy prior.
  3. The "sgolayfilt" function filters to smooth the signal and reduce noise while preserving important features.
  4. The "medfilt1" function for 1-D median filtering helps remove spikes and outliers from the signal.
Many other techniques in MATLAB can be used for denoising the signal according to the signal and noise characteristics.
Please follow the below mentioned MATLAB R2024A documentation links to understand more on the "snr", "filter", "wdenoise", "sgolayfilt" and "medfilt1" functions respectively:
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