If you take a closer look, you will find that the approach using filter masks and the approach of filtering out frequencies in the fourier transform are actually two way to do the same thing.

In particular, multiplying the spectrum F by another function H to isolate a specific band of frequencies is equivalent to applying the inverse transform of H: h to f.

Short: f*h = F·H (* is called convolution)

In my opinion the reason why this stuff doesn't work as good as one would expect is the reason that fourier series use sine and cosine to synthesize functions. A sharpening-filter is basically a high-pass filter. The problem: You do get the high frequencies BUT you will still have the smooth look of the trigonometric function! And you will not get completely rid of this with discrete fourier transformation.

This also creates some counter intuitive effects:

You can measure the wavelength of the triangle function and calculate the single frequency. Yet, if you're using a sine-based transformation, you will not need just one frequency but infinitely many.

I suggest experimenting with the expander - it can create pretty sharp edges which might be what you're looking for.

I got an A by the way but I have to admit that it was fairly easy.

Edit: by the way: As I learned, my sharpening macro implements the "Difference of Gaussian" filter. It's cool to see how something you created intuitively actually has a name and can be proven to work