Temporal filters on rs-fMRI derivatives from fMRIPrep using XCP-D for post-processing

Hello,

I preprocessed my rs-fMRI data with fMRIprep. This software applies high-pass (128s / 0.008 Hz), then it computes aCompCor components and saves them to a .tsv file.

Now, I am denoising the data with XCP-D (pipeline . In principle, I would use those pre-filtered aCompCor components in my XCP-D pipeline, but I’m concerned about excessive filtering.
Question: Applying high-pass filter and regresing out with CompCor is redundant or inconsistent? this is my pipeline: aCompCor + motion regression + high-pass filter (0.01 Hz) Interpolation + scrubbing (FD > 0.5mm) + smoothing (6mm FWHM).

Hi @Julian_GL ,

You can disable high pass filtering as an XCPD command line argument and just use the filtering from the cosine regressors.

Best,
Steven

Hello Steven,
Thanks for your comment.


I implemented the filtering you mentioned. Confound strategy: aCompCor + cosine regressors (no band-pass). As you can see in the output image, there’s a strong granular appearance. I wonder if it’s due to the absence of low-pass filtering. High-frequency noise (respiratory ~0.3 Hz, cardiac ~1.0 Hz, and other physiological/thermal noise) remains in the signal, giving the image that granular (salt-and-pepper) texture. What do you think?
xcp_d_0.14.1_denoising.txt (4.7 KB)

Following up this post, I realized that the granular appearance of denoised BOLD images from XCP-D are present regardless of the filtering strategy. See example below:

Is this expected?
Can anyone confirm whether XCP‑D outputs mean‑removed residuals (i.e., voxel-wise residuals centered on zero)? If so, that would explain why these residuals can look granular in viewers like FSLeyes or Mango even when the underlying signal quality is equivqlent.

This is my denoising pipeline: Despike — remove large intensity spikes
Interpolation — temporarily fill censored frames for continuous GLM
Regression — single GLM: 28 regressors (aCompCor + motion + cosine)
Censoring — drop high-motion frames (FD > 0.5mm) from output Smoothing — 6mm FWHM spatial smoothing on clean residuals

The QC output look fine:

In addition, I ran the following verification tests, and all confirmed optimal performance:

1. Power spectrum: Drift removed. Physiological noise reduced. Neural signal preserved.

2. FD-DVARS correlation. Motion artifacts eliminated**.** Namely, motion explains literally 0.00% of signal variance after denoising. The motion-BOLD coupling has been completely removed.

3. Temporal StdDev. 85% of temporal variance was noise. It was removed by aCompCor + cosine HP + motion regression:

Any feedback on this would be greatly appreciated.
This is my first time using XCP-D, and I would very much like to denoise my full dataset with it and cite this excellent work — I just want to make sure I fully understand the output before proceeding.

The denoised data are mean-centered and detrended, though not z-scored. This mean-centering is done across all volumes though, so if you have high-motion censoring enabled (--fd-thresh > 0), then the mean may not end up being zero. Plus it happens before bandpass filtering, so that would impact the mean as well. There is a bit more documentation the exact steps at xcp_d/xcp_d/utils/utils.py at 2f848792c4abcd55cbd07f77d1b93edb6b02e458 · PennLINC/xcp_d · GitHub.

Unfortunately, I’ve never really considered how to apply low-pass filtering in combination with the cosine regressor-based high-pass filter for CompCor regressors. I will try to look into it.

thanks @tsalo for your comments. To note, I did not apply low-pass filtering. Actually this is the reason I wouls like to use XCP-D. Instead I did:

Regression — single GLM: 28 regressors (aCompCor + motion + cosine)

for replacing the classical band pass. Recall my pipeline: Despike — remove large intensity spikes
Interpolation — temporarily fill censored frames for continuous GLM
Regression — single GLM: 28 regressors (aCompCor + motion + cosine)
Censoring — drop high-motion frames (FD > 0.5mm) from output Smoothing — 6mm FWHM spatial smoothing on clean residuals

If the granular appearance makes sense to you, I’d appreciate you letting me know. Thanks in advance.