# How to normalize frequency response charts

I want write a simplistic program that can transform a high-quality voice recording in a way that it sounds like it was recorded using a specific low-quality microphone.

I have obtained the mic's FR using a program that uses sine sweeps in a sort-of-anechoic room since there is no official spec available. Sine sweep was played by a good loudspeaker of which I have the FR specs.

Now these FR charts have different "dB ranges":

• Mic FR: -90dB to -10dB
• Speaker spec: starts at -45dB, moves to 85dB and stays mostly linear.

The goal is to normalize the mic FR data w.r.t to the speaker's FR spec and then use that result to create an (inverse) FIR filter.

Question: How to read, interpret and normalize these charts so I can do the math on them?

My guess would be to choose mic amplification during the sine sweep so that the max amplitude observed is 0dB (is this the same as the mic's clipping threshold?), and then divide by the min amplitude observed. And for the speaker, normalize in the 45–85dB range.

Example speaker frequency response chart:

Example microphone frequency response chart:

• Can you maybe add the charts? It is very hard for me to understand what is your exact question? "How to read, interpret and normalize these charts so I can do the math on them?" is way to general given that we do not have the data or the charts. Jan 19 '20 at 11:59
• Sure, added some charts Jan 20 '20 at 12:12

First of all, I wouldn't worry too much about the speaker response since it is relatively flat and the microphone has a much bigger roll-off.

Since you've captured the frequency response using sweep, why not to skip the whole part of designing the filter that mimics the frequency response and use the original impulse response? I don't know what kind of software you used for doing your measurements, but a tool such as REW can export the IR wav file. Then it's just a matter of convolving it with your input signal. If your device has some significant amount of self-noise, you can record it in a quiet environment and add it post convolution.

Regarding the decibel scaling, an easy thing would be to play a signal at a known level (for example 94 dB SPL) and record it with the microphone. Then check what is the dBFS level of that recording. This will allow you to map the dB SPL to dB FS. Once it's done, you can convolve your signals and analyse the spectra to see what level they simulate. If any gain adjustment is necessary then you can do it afterwards. This, of course, assumes that you know the original level of those recordings, which is generally not true. If you had the same sort of measurement for the device that was used to capture those recordings, then it's easy. You know what is the sensitivity of that device, you know how much it differs from your microphone, so you can correct for that either by adjusting the level of impulse response or applying gain post convolution. Finally, you can simply ignore all of that and set the gain of your impulse response so the frequency response peaks at 0 dBFS. This means no boosting - only attenuation.

• Thanks for the pointers! I just read up on impulse response vs. frequency response. So from your answer I take it that microphones are considered linear(-ish) systems and so IR and FR are direct counterparts in different spaces. While I will now probably be able to continue working on my program, I'd still be curious what the response to my "normalisation" question would be 😄 Jan 20 '20 at 21:07