How does

Illustration
Sebastian - 2021-01-06T09:39:45+00:00
Question: How does

I’m giving a timeseries vector with 14600 data points as an input to the “pwelch” function and getting 2049 data points as an output. I’m not sure how to assign these output points to specific frequencies, I need more info on how the averaging/binning works with this function?

Expert Answer

Profile picture of John Williams John Williams answered . 2025-11-20

The pwelch function in MATLAB or Python's SciPy library is used to compute the Power Spectral Density (PSD) of a signal using the Welch method. This involves segmenting the signal into overlapping segments, windowing them, and then averaging their periodograms. The frequency bins assigned by pwelch are determined by the following factors:

1. Sampling Frequency (fsf_s)

  • The sampling frequency (fsf_s) of the signal determines the range of frequencies in the PSD. The Nyquist frequency, which is half of the sampling frequency (fs/2f_s/2), is the maximum frequency that can be analyzed.

2. FFT Length (NFFTN_{FFT})

  • The FFT length determines the resolution of the frequency bins. The frequency resolution (Δf\Delta f) is given by: Δf=fsNFFT\Delta f = \frac{f_s}{N_{FFT}}
  • By default, pwelch uses the segment length as the FFT length unless otherwise specified.

3. Segment Length

  • The input signal is divided into overlapping segments of a specified length. The number of points in a segment directly affects the FFT length if not specified separately. A longer segment gives better frequency resolution but poorer time resolution.

4. Output Frequency Bins

  • The resulting frequency bins are computed as: fk=k⋅Δf,k=0,1,2,…,⌊NFFT/2⌋f_k = k \cdot \Delta f, \quad k = 0, 1, 2, \ldots, \lfloor N_{FFT}/2 \rfloor
  • The frequencies range from 0 to fs/2f_s/2 because the PSD is computed for positive frequencies only (since the signal is real-valued).

Example in Python (SciPy)

Here's how the frequency bins are determined in Python:

python
from scipy.signal import welch import numpy as np # Example signal fs = 1000 # Sampling frequency in Hz x = np.random.randn(10000) # Random signal # Compute PSD f, Pxx = welch(x, fs=fs, nperseg=1024) # f contains the frequency bins print(f)

Example in MATLAB

Here's how the frequency bins are determined in MATLAB:

matlab
fs = 1000; % Sampling frequency in Hz x = randn(10000, 1); % Random signal % Compute PSD [pxx, f] = pwelch(x, [], [], [], fs); % f contains the frequency bins disp(f)

Key Factors

  • Segment length affects the FFT length and therefore the frequency resolution.
  • Sampling frequency sets the Nyquist frequency and the range of the frequency bins.
  • Zero-padding can be applied to increase NFFTN_{FFT}, refining the frequency bin spacing.

Each frequency bin corresponds to a center frequency, and the bins are uniformly spaced over the range of 0 to fs/2f_s/2.


Not satisfied with the answer ?? ASK NOW

Get a Free Consultation or a Sample Assignment Review!