  Signal denoising---also known as non-parametric regression---is often
performed through shrinkage estimation in a transformed (e.g., wavelet) domain;
shrinkage in the transformed domain corresponds to smoothing in the original
domain. A key question in such applications is how much to shrink, or,
equivalently, how much to smooth. Empirical Bayes shrinkage methods provide an
attractive solution to this problem; they use the data to estimate a
distribution of underlying "effects", hence automatically select an appropriate
amount of shrinkage. However, most existing implementations of Empirical Bayes
shrinkage are less flexible than they could be--both in their assumptions on
the underlying distribution of effects, and in their ability to handle
heterskedasticity---which limits their signal denoising applications. Here we
address this by taking a particularly flexible, stable and computationally
convenient Empirical Bayes shrinkage method, and we apply it to several signal
denoising problems. These applications include smoothing of Poisson data and
heteroskedastic Gaussian data. We show through empirical comparisons that the
results are competitive with other methods, including both simple thresholding
rules and purpose-built Empirical Bayes procedures. Our methods are implemented
in the R package smashr, "SMoothing by Adaptive SHrinkage in R," available at
https://www.github.com/stephenslab/smashr
