New answers tagged

0

The original paper uses Wiener filtering, which usually requires knowledge of the expected spectrum. I haven't read the details of the algorithm (included below), but I suspect the PSD input allows the basic estimate to be avoided.


0

A low pass filter attenuate high frequencies, the low frequencies can only describe smooth features of the curve, this is why the depth of the narrow values reduced, while the other parts of the signal seems to be unchanged, this is why we call it a filter.


0

Parseval's theorem says the energy in a time domain signal and it's FFT will be identical. Remove energy from an FFT result, and that same amount of energy will be removed from its IFFT time domain result. Thus the reduced amplitude. e.g. It's likely those high frequency artifacts you removed contributed to the amplitude of your original signal.


2

The language choice depends on many factors. For instance, are you after developing low level features of DNN or using existing building blocks? Most advanced and popular Deep Neural Networks (DNN) Frameworks are nativly integrated into Python though they are mostly implemented using different low level language (C++ mainly). Those include PyTorch and ...


0

Just do: # wiener filter #f, t, fourier = stft(filtered, fs=fs) #yw = wiener(fourier) #y = np.asarray(istft(yw)) #y = y[1, :] y = wiener(filtered) and it appears to work for me. This is the absolute value of the FFT of the resulting signal: and this is the Wiener filtered signal: Otherwise, you're doing a Wiener filter on the STFT of the signal which will ...


1

I would try find_peaks, they implement the heuristics you probably would come up with and expose parameters you can tweak accordingly to the characteristic of your signal.


1

The problem with your implementation is that you are doing only the radix-2 decimation, that splits the input vectors (the inverse of interleaving), and then concatenate the results. Notice that they user the fact that $e^{-1j\pi}=-1$ to do only $N/2$ multiplications instead of $N$. Maybe this simplification made more difficult to see the link from this to ...


1

In the Python version you initialize the filter state and in the Matlab version you don't. Hence the result is different. lfilter_zi() calculates the filter state for a unit step response. Your actual signal is 17 orders of magnitude smaller, the initial state will completely dominate the result (for a while).


0

Here is how an Short Term Fourier Transform works You break your time series up in multiple segments. Each segment is nperseg samples long. The segments overlap by noverlap samples. Your time resolution then is nperseg - noverlap , i.e. that is the time distance between neighboring segments. It's often called the "hop size" You multiply the ...


0

Is it possible to select the post-autocorrelation band-pass filtering parameters to get both these signals to match? No, since forming the autocorrelation function of a real signal is going to do squaring operations on the spectrum, you can't apply a linear filter to implement the same nonlinear distortion.


1

What I would definitely check is this line self.P = self.P - dot(self.K, dot(IS, self.K.T)) I tried to reformulate this, and I think it does not match the update equation for the covariance. Usually people use one of the following: $P = \left(I - K C\right)P\left(I - K H\right)^T + KRK^T$ - this is numerically more stable. $P = \left(I - K C\right)P$ ...


0

The Wiener filter minimizes the MSE under a series of assumptions, which usually don’t match reality. That means that, in practice, it will not give the solution with the smallest MSE possible. Using the Wiener filter for deconvolution is the simplest thing you can do, and there are many other, more complex deconvolution algorithms that produce better ...


0

You need your period to fit an integer times into your DFT length, else you get leakage (not explaining that concept here, it's a very fundamental one and you can find plenty good material on it, here and in other places. Book: any textbook on digital signals). But. If I want to determine if there is a period of 288 samples, which graph is better to look at?...


0

Instead of using the Hilbert function. I tried the following: Find the location of peaks of (x_long). Find the location of troughs of (x_long). Get the interpolated (u_p) values of the upper envelope using the peaks and a spline (cubic) function. Get the interpolated (l_p) values of the lower envelope using the troughs and a spline (cubic) function. ...


1

Ndimage generates a Gaussian kernel by sampling a Gaussian and normalizing it to 1. The derivative of this kernel is generated by modifying that normalized kernel according to the chain rule to compute the derivative, and this modification is applied repeatedly to obtain higher order derivatives. Here is the relevant source code. This indeed leads to a ...


1

... it is easy to determine periodicity from FFT or PSD ... If you are assuming data corrupted by random noise, you can't say definitively that there is periodicity. You can only assign a confidence that there really is periodicity. That confidence may be very, very high (i.e., it's September, I'm in a temperate region of the Northern hemisphere and it's ...


2

I think I have figured out the answer. The results have to do with the difference between the integral of a continuous Gaussian function, versus the sum of a discretized Gaussian. In the ideal case, continuous and discrete sums of Gaussians already differ As one illustrative example, consider the integral of a Gaussian versus the discrete summation of a ...


2

Why is the Chebyshev2 plot so different from the others? Because something is really wrong with your code or plotting routine. The poles of Butterworth filters are NOT real and it should look like this


Top 50 recent answers are included