Well it's not just the gaps; your data is also non-uniformly sampled. Use index_col to use the time column as the index to your dataframe: df = pd.read_table('BD-10d4669.p.1', sep=' ...

No, the output is len(x)*2-1 long, an odd number I don't understand the question The x axis is the delay in samples, and the y axis is the cross-correlation. The number of x samples is odd, and the ...

Well the first problem is that nyq = fs/2, not 2*fs.

You should start with a simpler one-dimensional case first and then work your way up to two dimensions. If you slice one row of your graph paper: from matplotlib import image import matplotlib.pyplot ...

You are fitting a polynomial to a logarithmic decay curve, which is probably wrong. You probably want to fit a log curve to a log curve. You can use the naïve method of np.polyfit(log(x), y, 1) ...

Can you use deconvolution to convert these decaying impulses back into impulses? Proof of concept: import numpy as np from scipy import signal import matplotlib.pyplot as plt impulses = np.zeros(150) ...

The way to do this is to break the signal up into chunks and process each one at a time. I asked in a comment if you could accept one-dimensional filtering, but I guess you can do bidirectional ...

Below, the result of a simulation where I have the sum of two sine-waves with frequencies 100 Hz and 201 Hz, respectively: $$x(t) = > \sin(2 \pi 100 t) + \sin(2 \pi 201 t)$$ The signal is ...

Wouldn't mixing them give you a sum and difference frequency and you have to lowpass filter to get the difference frequency only? Also your chirps are the same frequency, just out of phase? So the ...

If you're using scipy.signal and processing signals offline, then you can just use decimate which handles the filtering for you. It also does zero-phase filtering by default, which you probably want ...

You probably meant to reverse them: The LPF should be at 1100 Hz, and the HPF should be at 100 Hz. Then you're keeping everything between 100 Hz and 1100 Hz, and throwing away lower and higher ...

It doesn't happen with a random signal. Your signal must have low frequency content around 0 Hz that shows up even after you've nulled out 0 Hz itself? import numpy as np from scipy import signal ...

You're just seeing the amplitude of the individual samples, not the wave that travels between them. If you generate a high-frequency sine wave, you will see that the samples don't necessarily go ...

Yes, Butterworth are IIR. The decay from an impulse technically lasts forever. Yes, all [implementable] IIR are causal. Yes, because of #1 and #2. Don't use signal.filtfilt. Use signal.lfilter. ...

It looks like it's working fine, but your signal contains some content at DC and the Nyquist frequency. DC doesn't survive through the transform, and Nyquist gets altered. If you bandlimit it first, ...

WAV files in 32-bit WAVE_FORMAT_IEEE_FLOAT can handle any arbitrary value in the range $±3.4×10^{38}$. I created a tone in Ocenaudio and amplified it to 15.5, saved it and re-opened it, and it works ...

The number of frequencies 'measured' in the Fourier transform of each time frame is exactly equal to the hop size, The number of frequencies is not determined by the hop size, it's determined by the ...

dBFS is a digital signal measurement, relative to full-scale. dBSPL is a sound pressure level measurement, relative to 20 μPa RMS air pressure. dB(A) is shorthand for "dBSPL A-weighted", which is the ...

So what you mean is that you want the continuous-time Hann window instead of the discrete-time window? $$w_{Hann}(t) = 1 - \cos \left(2\pi \frac{t}{T} \right)$$ is not correct, since it goes to 0 ...

What are the equations for determining the delays between the channels per beam? It's pretty basic trigonometry: If A and B are microphones, and C is the object you're trying to record, then C's ...

signal.windows.cosine is a window function, not a signal, as it says in the docstring: Return a window with a simple cosine shape. You want something like numpy.cos(2*pi*f*t).

You need to keep the phase information, which isn't included in a spectrogram. "Spectrogram" is just the magnitude of the STFT output. So this is conceptually the same as STFT ↔ ISTFT, which is ...

As others said in the comments, this looks like numerical error. 3rd-order filters are not typically prone to this, but the higher your sampling frequency, the closer the poles move to +1: You might ...

Python doesn't have an FFT, but it's provided by external libraries like NumPy, SciPy, pyFFTW, etc. None of these three libraries care what size the input is. It can process lengths that are power ...

Here are some animations I tried to make to demonstrate Fourier transforms and how phase and complex exponentials work:

I like these animations of Fourier transforms: The continuous Fourier Transform of rect and sinc functions

They represent fluctuations from atmospheric pressure. Positive values = increases in pressure = speaker cone moving outward Negative values = decreases in pressure = speaker cone moving inward ...

Maybe a table of decibels vs multiplication factors will help: \begin{array} {|r|r|r|} \hline +12\ \textrm{dB} & 4× & \textrm{amplification}\\ \hline +6\ \textrm{dB} & 2× & \textrm{...