# How do I find source of vibration from a mechanical source outside of my home?

My problem is vibration from a mechanical source outside of my home. I think I have found the source (machinery at a legal marijuana grow op) and need to prove it to get an injunction at court.

I don't know if there is direct mechanical transmission (1 - 80 Hz) or if ground or air noise is causing my house to resonate (4 - 8 Hz). So I'm looking for a tool, probably an oscilloscope, to use with an industrial accelerometer to find direction to source. I'm also looking for a spectrum analyser to use with an infrasonic microscope to detect infrasonic noise and get a frequency signature.

How do I select a DSO/SA that has frequency response from 0 - 80 hz? My budget is very limited, as this is just a one time use.

If anyone has a better idea let me know!

• I've seen some weird resonances in natural gas lines that cause rather irritating intermittent noise in a house. If that's the source you could monitor the gas lines with your instrument. – Spehro Pefhany Dec 26 '14 at 10:23
• A \$35 Arduino Nano board and a USB cable could work as your DSO. The Nano v3 can sample 10 bits up to some kHz. It can send serial data at 115kbaud, so could easily write it out as fast as it samples it. Use a timer interrupt to trigger the sampling, to keep the jitter down. Watch out for electrical noise from the PC. Write some python to ingest and process the serial stream. – tomnexus Dec 26 '14 at 12:36
• Curious, were you able to find a resolution to this and prove it was a specific location? – paqogomez May 10 '19 at 16:39
• I purchased software from Virtins that I can use to analyse recordings. I purchased two measurement microphones and put them on a one meter board. I record the noise, look at the recording on the spectrum analyser, bandpass filter to isolate a frequency and use the oscilloscope to find time difference for zero crossing at each microphone. The time difference can be used to figure out which microphone is closer and a compass can be used to get bearing to source. The grow op is closed due to change in regulations. – Whariwharangi May 11 '19 at 21:25

An idea for low cost vibration monitoring: use your smartphone.

I did this recently out of curiosity. Found an app that records my phone accelerometer to a text file. Leaving the phone on a table, I could detect the vibration of a diesel generator in the office basement. The generator vibration was only just perceptible by a person, and the phone could just detect it after some post processing in Octave/Python/Matlab.

You could take measurements at a few places and plot them on a map to show the source of the vibration.

The phone records at up to 200 Samples/s, plenty for the vibration you're hunting. And the results are in m.s-2,so even if this isn't a traceable calibrated measurement, it gives you some figures to play with.

Edit: here's the result, from processing my smartphone accelerometer. The Android app is called Accelerometer Monitor, though there may be others. You can see the generator vibration, and the way it vanishes when the generator shuts down:

The code to plot this looks like this, works in Octave (free software), should also work in Matlab. I did need to remove the headers and footer from the text file.

windowsize = 1000;                             % samples in a window

B = detrend(A(200000:end-100,1:3),'linear');   % remove DC and drift
sb = size(B,1);                                % size of B
nw = floor(sb/wind);                           % number of windows in the file
dt = mean(A(:,4));                             % delta-t in ms
freq = linspace(0,500/dt,wind/2-1);            % frequency axis for plotting
tim = (1:(nw))*wind*dt/1000;                   % time axis for plotting

clear F
for a=1:nw
temp = abs(fft(B(((a-1)*wind+1):(a*wind),:))).^2;
F(:,:,a) = (( temp(2:(wind/2),:) + temp((wind):-1:(wind/2+2),:) )/wind);
end

figure(57);
cax=caxis; caxis([cax(2)-25 cax(2)]); colormap(hot);
ylabel('Frequency, Hz'); xlabel('time, s');
title('Vibration measurement');


The code above is made more complicated than it needs to be, because I wanted a spectrogram. For a simple graph of the spectrum, just take the fft of a few seconds worth of data, like this:

A = dlmread('acceleration.txt',' ');  % load the data
F = fft(A(1:2000,3);   % choose a channel, Z had the most vibration for me
F = abs(F(2:1000))+abs(F(1999:-1:1001)); % add positive and negative frequency
plot(10*log10(F));


Octave is available for Windows, free.

Edit: I neglected to mention in the code above, that the acceleration data from a smartphone isn't necessarily at even intervals in time. You might get away with it in a short spectrogram, but you really need to resample it before doing the DFT.

• I have that application on a tablet. How do I convert the data to the graphs you are showing here? – Whariwharangi Dec 27 '14 at 16:52

Since you are trying to do this cheaply, You might try making a directional microphone using a subwoofer speaker as the microphone element. article link for construction of a directional mic is here:http://72.52.208.92/~gbpprorg/mil/shotgun/ This would allow you to point a directional microphone at the source. If you compared the audio captured by directional mic to one coupled to the building; that may help establish it as the source. Particularly if you pan the directional mic on a tripod and no other direction records a similar signal.

• Unfortunately microphones can't easily be made directional for low frequencies. They would need to be a few wavelengths long, which for a 4-8 Hz signal is hundreds of metres. Finding this will need to be done mapping the strength of the signal, not finding the direction of it. – tomnexus Dec 26 '14 at 9:27