# How to normalize FIR filter gain from the amplitude response in frequency domain?

I've got a set of measured data (amplitude and phase responses) of a filter. And I want to normalize its gain to be unit (equal to 1) for further processing. I know that we can convert to time-domain coefficients and normalize by dividing to its sum of all coefficients.

The question is could we normalize the gain using frequency-domain results (amplitude)? Because converting to time-domain introduces more computational complexity (employ iFFT) which I don't want.

Thank you very much.

BRs,

Yes, assuming you want unity gain at max amplitude, just normalize your magnitude coefficients $$A[k]$$ with regards to the value at maximum magnitude:

$$A_{unityGain}[k] = \frac{A[k]}{\max(A[k])}$$

In matlab:

A_unityGain = A / max(A); % A is the array of magnitude coefficients.


Note: Are you sure you're going to implement this filter in the frequency domain? The reason I'm saying this is if you wanted to implement the filter in the time domain, I don't see why getting the filter coefficients through an inverse Fourier Transform and normalizing them adds any complexity. If you're processing real-time data, you just need to do it once offline.

• Thanks for your reply. Yes, I definitely want to normalize in frequency domain. Aug 18 at 7:48

normalize by dividing to its sum of all coefficients.

This will adjust the gain at DC ($$\omega = 0$$) to unity. That's ok for a lowpass filter but it's less useful for other filter types. Example: for a high pass filter the sum of the impulse response is zero and you do NOT want to divide by that.

So proper definition of "normalization" and "gain of 1" within your specific context is important.

In the frequency domain, you can pick whatever frequency you want to normalize at and divide by the magnitude of that. Could be DC, could be Nyquist, could be the max, could be 1kHz, etc. It really depends on the purpose of the normalization.

• Thanks for your comment. Aug 18 at 7:48