New answers tagged

0

Fft normalization is often an overlooked topic and many articles dealing with FFT just say to divide the fft ouput by N (divide by either N or N/2 depending on the actual FFT algorithm used). Real FFT usually discards the upper part of the spectrum (due to FFT redundancy) so the normalization coefficient here is N/2, rather than N. So, my question is: ...


0

Whether you want to normalize or not depends on whether you want to know the level or the energy of the DFT input. IIRC, the SciPy FFT returns energy (complies with Parseval’s relation). A signal N times as long at the same level has N times more energy. So you could divide by N to get an estimation of a level instead of energy.


1

Your decision to normalize or not does not change the accuracy of your answer, as it is simply a scaling factor. If you use the common scaling of $1/N$, then the output for each DFT bin will represent the average of the portion of the input signal that is at the frequency defined by that bin, scaled to the same units as the input. So that is convenient and ...


0

Firstly, because the speed can be positive and negative (meaning approaching to and going from sensor if target is moving), you need to shift your doppler indices from [0, N-1] to [-N/2,N/2 - 1] by simple subtraction by N. Then you just multiply scale [-N/2,N/2-1] by: lambda/(2*N*T_rpi) where: - lambda is wavelength for your FMCW radar (lambda = c/Fc, c - ...


0

It works because the signals are complex. If they were real (actually a sum of two complex signals each) it would not. With a pure complex tone, as you sweep the frequency up it just loops around the DFT bins, no bin more special than another. A confirmation of this is that a phase shift in a pure complex tone will rotate all the DFT bins the same, ...


0

The "DC bin" does not represent DC exclusively, but has also some low frequency energy. How much depends on the fft size and sampling rate. Simple example: if your fft size is 1000 and your sampling rate is 1000Hz, then the dc bin represents frequencies from 0 to 0.5Hz, as the distance between fft bins is 1Hz. So, a phase can be calculated for the DC bin.


1

The main prerequisite for measuring anything meaningful is that the target parameter (THD) is much better in your measurement system than in the system under test. The higher the difference, the more accurate your result will be. If your measurement system is orders of magnitude better, that the system under test, the measurement error can be neglected. If ...


0

If you zero out most or all of the harmonics (you set them all to -inf in your cap), then the HPS algorithm can’t find them.


0

This would be trivial to do as simple decimation where each block increments its samples by $n+4$ with each block starting at sample 0,1,2,3 respectively. This is common with polyphase filter implementation and similar techniques to reduce the overall clock rate requirement for the processing (parallel processing). For more details on both of those ...


1

Zero-padding does not affect DFT magnitude of the original N-DFT Samples. Overall energy does increase in the longer DFT and that is because we have introduced non-zero samples in between N-point DFT. Zero-padding does not add noise to the DFT. The side-lobes appearing are as a consequence of polynomial interpolation which happens when we take DFT of a zero-...


0

Check this video on Frequency resolution using Zero Padding.


1

Depends on which processor platform you want to implement it. If it is an ASIC (Application Specific Integrated Circuit) chip, they come with ARM processor cores in most cases and real time computation require fixed-point implementation. There is also memory limitation in such processors due to smaller footprint of device. If you implementation is on ...


1

For the Fourier transform (FT) of the Morlet wavelet, I also arrived at the same equation as that of @Electricman. Based on that equation, I sought a relationship between $f_b$ and the standard deviation of the Gaussian form of the FT. Is there any citable published literature (book or journal article) arriving at the following derivation? $$X(f)=\mathcal ...


1

I agree with @user28715 answer. The best method is to apply a filter to your timeseries to get calibrated timeseries. Filter You did not specify which language you are using, but in Matlab I use the designfilt function. https://www.mathworks.com/help/signal/ref/designfilt.html d = designfilt('arbmagfir',...); a = 1; b = d.Coefficients; or you ...


0

Maybe you should average your FFT over time to enhance you signal's SNR, you may then be able to see a spectrum that fits your expectations. It also seems that your signal is filtered around 420 Hz. Unless this is your initial signal's bandwidth, your filtering may not have been applied correctly.


1

If your description is correct, you are seeing noise. After step 1, everything above 2 kHz should be gone. After your band-bass everything below 8750 Hz is gone, so you basically end up with a null set. Since your filters are not infinitely steep there is still something non-zero left over but it's mostly going to be noise and very poorly defined. ...


0

A good stringed instrument music pitch detection/estimation algorithm will do the opposite, e.g. it will not ignore overtones. Instead it will pay attention to the harmonics, specifically the harmonic train and its spacing, as this is a stronger indication of human perceived pitch than spectral content at the fundamental frequency (which could be nearly or ...


0

What kind of windowing/overlap scheme do you use? Did you look into cepstral processing, seeing as your bass should produce a harmonic series? Perhaps dynamic programming to pick a sensible «time-pitch-contour»? Fundamental pitch tracking is a long standing challenge. There should be many hints in the litterature.


1

Apply window function to each overlapped window, and then simply draw the FFT magnitude response of each window as if the spectrum corresponds to the center time of the window. Your approach is partially correct. But in the second half of sentence is not how you draw a spectrogram. You shouldn't align the FFT output in the same direction as time. It ...


0

I suggest monitoring the phase versus time directly instead of frequency. Frequency is the derivative of phase so the slope of the phase would indicate the frequency. Detrend the phase slope for the starting frequency and then the point in time where the phase starts to ramp up should be easier to detect. The window in which to detect this change will be ...


2

The same effect will happen on the time-domain sequence too, due to the fact that DFT time and frequency domains are exact duals apart from a scaling factor and reversal. Therefore, by properly zero padding (to the center of) the FFT data, the corresponding time-domain signal will be interpolated; i.e., more samples from the same signal will be obtained.


1

Your premise is due to the physical nature of the device under test it is possible that occurrence of higher frequencies vibrations can be predicted by lower frequencies and this is important as it will allow you to use a lower bandwidth sensor that can only respond to lower frequencies. Interesting problem and I would suggest this approach to find evidence ...


1

If yes then how can this be done ? Yes, it can be done. But doing it directly in the frequency domain is awkward, cumbersome and slow. The most efficient way is to generate it directly in the time domain using a rotating phasor. If you need it in the STFT domain, just generate a properly aligned frame of data in the time domain, window and FFT it. That's ...


1

If this is about using the STFT, then it's about frames of audio (or whatever signal class) and, if it's about frames, it's about windows. Usually the windows we want are complementary, they add to 1. An example would be a Hann window. So now imagine your sinusoid of an arbitrary frequency (mid bin or between bins or something else) being multiplied by a ...


2

A sinusoid with a frequency that is between bins in the FFT frequency domain is circularly discontinuous in the time domain. So you can't use the same IFFT results back-to-back without the noise from this discontinuity between each IFFT window, as the end of one window will have a value too far from the beginning of the next window (unless your frequency is ...


0

Is it possible to get the frequency of sine wave(100Hz) and sampling rate (1kHz) from the PCM data that I received. You will need to know either the frequency of the sine wave or the sampling rate. A digital signal is just a sequence of numbers. A 100 Hz sine wave sampled at 1 kHz looks identical to a 113 Hz wave sampled at 1.13 kHz. It's a sine with 10 ...


0

I am trying to do the same. My idea is to apply a digital filter based on the sensitivity/frequency curve, in order to calibrate my signal. Have you done this successfully?


0

How much is your $N$? For 802.11a 20MHz bandwidth signal, typical $N=64$ and frequency spacing between OFDM symbols is $\Delta f = 312.5kHz$. So $BW = N \times \Delta f = 20MHz$. When you say I have N equally spaced samples I am assuming you have 64 samples, so if you take IFFT, you will give channel response of 64. Here, the sampling rate is $20MHz$ ...


0

The formula for center frequency of each bin of an N-point FFT of a signal is $f=m*Fs/N$ where where $m=0,1,...N-1$. $H(f1)$ will be the bin value for DC signal which is the mean of the signal. $f2 = 1*fs/N$. Since you know both f2 and N, you can find $fs$ and hence $Ts$. Each spacing between any 2 bins will be $f=fs/N$. So $fs=f*N$ = 312.5k*53= 16.5MHz. ...


4

Generally the relationship between the sampling frequency $f_s$ and the frequency spacing of each bin $\Delta f$ is given by: $$\Delta f= f_s/N$$ For example if you have 1000 bins and the sampling rate is $f_s = 1$ KHz, then each bin is spaced by 1 Hz given by $f_s/N$. So if the frequencies $f_1, f_2, ..., f_N$ (using the OP's indexing) were associated ...


0

Since you are able to trace the target back in FFT, no need to trace it back to time domain. What does the phase information of the FFTs say? Below is a simple model for 2 Rx antenna case. The signal incident at antenna 2 $y_2$ has traversed distance $L$ more than signal incident on antenna 1 $y_1$. Due to the difference in distance traversed, the phase ...


3

@Hustler. Hi. I suggest you use all 48000 vibration samples. As a general rule: In mathematical analysis of measured data it's preferred that you use all available data to estimate some physical quantity. If you perform 48000-point DFTs (discrete Fourier transforms) your first DFT bin frequency will be zero Hz and your DFT bin spacing will be (as jithin said)...


1

For 3840 points, the frequency resolution between each bin is 48k/3840 = 12.5Hz. Hence you should see 2 peaks at bin 1 (corresponding to 12.5Hz) and bin 3838 (corresponding to -12.5Hz since this is a real signal). If you use 48000 points, resolution of each bin is 1Hz. Now, 48000 points cannot be represented as integer multiple of 3840 points (which ...


1

I'm not sure but there's something called the time-frequency resolution limit, basically the shorter your windowing interval the broader your spectrum is going to be. The frequency resolution in the low frequency area may be poor because of this. Things like wavlets attempt to resolve this problem but i dont know anything about them.


1

Here is it ... install pyaudo to play the generated sine signal, install numpy to help you with arrays and math, install matplotlib to plot ... I wrote this code quickly just to show how to do... some steps are commented in the code, this will play one generated signal in the choose frequency, concatenate all vectors signals and play using pyaudio at the ...


0

Phase shift in time domain translates to frequency shift in the Fourier transform. $FT of exp(j2πf0t)x(t) = X(f−f0).$ If there is a phase shift in time, the Fourier transform that you take is already shifted in frequency. Find the shift in frequency f0 and you should get the phase change.


0

I ran your code, there were some errors. f_spac variable is not used after it is filled inside the for-loop. What you can do is to define a variable f_delta=1000. This will make sure the 'f' variable is filled properly with spacing of 1000 and its multiples. N=8; r=1; f_d=1e3; M=4; m=0:M-1; fc=0; %% freq spacing for j=1:M f_spac(j)=(1+...


0

So after taking fft(X(m)), the windowed N-point FFT is simply the above three equations? X(m) is already in frequency domain. It is the mth value of fft(x(n)) where x(n) is a discrete time signal. Is windowed FFT called smoothing? In the context of windowing, smoothing of a signal is done to reduce the spectral leakage caused by the truncation of a signal ...


0

Yes, they are the same. Let us take the linear convolution of $x[t]$ and $y[t]$ as 2 portions $H_1$ of length $N$ corresponding to first $N$ samples, and $H_2$ of remaining $N-1$ samples. Circular convolution between $x$ and $y$ causes $H_2$ to overlap over $H_1$ because of time-aliasing. So the first $N-1$ samples of the result is $H_1 + H_2$ with only the ...


0

Goertzel in fact is the matched filter for a single frequency – so, it's, in the presence of uncorrelated noise, the estimator that gives the best estimation variance under fixed observation. But: for Goertzel to work, you need to use a number of samples that is an integer and a multiple of $f_\text{sample}/83\,\text{Hz}$. Unless your sampling rate hence ...


1

@Amelia. Hi. I tried to run your MATLAB code, but it contains several errors regarding vector lengths and produces error messages. But that's not the main issue here. The answer to your question is: If you compute the DFT of an N-point x(n) sequence you produce an N-point complex-valued xDFT(m) frequency-domain sequence. You can only reconstruct the original ...


0

At the risk of sounding stupid, I am going to give a fresh perspective (different from the link referenced above) to this problem. I will list my reasoning and finally give the code I tried. When the signal length is 1000, auto-correlation will have 1999 length. Hence FFT of PSD should have at least 1999 length. In my example I used 2000 for simplicity. I ...


0

Re-reference your FFT phase measurement reference point to the center of your data window by doing an FFTShift (N/2 vector rotate) before the FFT. That moves the portion of data where there is a circular discontinuity (due to non-integer periodicity) away from the phase reference point of a typical FFT.


1

That doesn't seem worth the bother. FFT of a 7 second long wave file on my windows 10 laptop using Matlab takes about 5 milliseconds. So unless you have a particularly slow setup, you will not save a significant amount of time by storing the FFTs instead of just reading the raw wave file and doing the processing again each time. That doesn't seem to ...


2

After playing with the notebook for a while, I figured out the following: The result from scipy is shifted by one pixel in each axis (probably due to its definition of the "same" mode). Or, alternatively, both the analytic result and pyfftw results are shifted the opposite way. After working around that, the result is exactly (within error) the same as the ...


1

There are a few possible answers depending on the signal and your meaning of "normal calculation". If the signal is stationary, then you might be able to use an old fashioned analog spectrum analyzer, the kind that works by sweeping a narrow-band analog filter across the input signal, and graphing the amplitude results on an X-Y pen plotter. Then you could ...


0

I'm going to disagree with the fellows here. Big time. Yes you can in special cases. If your signal is a pure real tone (sinusoid) with a whole number of cycles in the DFT frame, all the DFT values will be zero except for a conjugate pair which are directly determinable by your tone parameters. If your signal is a pure real tone (sinusoid) with a non-...


0

I dont know if this is what you are looking for but the formula to calculate time array in spectrogram for MATLAB is : t = $((colindex-1)+((nwind)/2)') /Fs$; where colindex is the starting index of columns along which time increases and nwind is the length of the window. The elements in t are centered in the segment. colindex is calculated by $colindex= 1 ...


0

The solution was to take Fourier transform 3D for each slice, then to chose only the 2nd component of the Transform to transform it back to the spatial space, and that's it. The benefit of this is to detect if something is moving along the third axis(time in my case). for sl in range(img.shape[2]): #-----Fourier--H1---------------------------------------...


0

I assume you notation "^-7V" refers to a voltage noise level of $1E-7$ volts, and then when you say it is in the frequency domain, then I assume this is the average of the FFT magnitude for all the bins that are not part of your signal (the noise floor). This average noise level is completely dependent on the number of bins in your FFT. I do not understand ...


Top 50 recent answers are included