I would like to indicate to a human speaker standing at the front of a classroom if he/she is speaking loudly enough to be heard from the back. From some research, i have gathered that I am looking to calculate the Signal to Noise Ratio or something similar. It looks like this sort of thing can be calculated in MATLAB or preferably Python.

What types of inputs are needed? Is it possible to figure this out all from a mic in the back of the room? Or do I need a reference signal. For example, if i have a mic in the back of the room (connected via Bluetooth or WiFi) getting a noisy signal, will I also need a mic on (or near) the speaker so that i have something to compare to?

In the end, this would be running on a raspberry pi. Can anyone point me towards helpful libraries, modules, or tools for this type of thing?

This seemed like the best forum to ask this question. If there is a better place for it, let me know.


closed as too broad by MBaz, A_A, Peter K. Oct 13 '16 at 13:02

Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. Avoid asking multiple distinct questions at once. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.

  • 1
    $\begingroup$ Your question is very broad and not a very good fit for the format of this forum. If you could break it up into smaller, more specific questions, you may get better answers. $\endgroup$ – MBaz Oct 11 '16 at 0:02
  • 1
    $\begingroup$ Your problem is much harder than it appears - namely, your not looking for SNR, but for SINR, considering that the problem is not how much uncorrelated noise gets added to the "known" speech signal from the lecturer, but the question of how much mumbling and other human noises, which look pretty similar to both the human ear (which is why this is a problem in the first place) overlay with the original signal, and how much intelligibility of that desired signal is lost to attenuation and frequency-selectiveness and what would be considered ISI in a digital comms system... $\endgroup$ – Marcus Müller Oct 11 '16 at 7:32
  • $\begingroup$ also, the measurement is going to be very complicated, too: Human perception is not like an omnidirectional microphone at all, but it's also not like a very directional microphone either; you will probably need a microphone array to build something that compares to the selectiveness that human hearing can provide. $\endgroup$ – Marcus Müller Oct 11 '16 at 7:35

There's possibly an easy way out: Add two mics, one near the speaker and one in the back of the room. Run both signals through speech recognition software. If there is textual output from both and they agree, then the voice must be loud and clear. The software must be able to handle the language spoken though.

Other than that, there is research and standards on speech intelligibility. Perhaps it is better to start with a simplified model of intelligibility. Two important factors are speech level and noise level. By carrying out preliminary listening tests and measurements in the space, you can determine what the baseline noise level ($N_0$ dB) in the back is and how loud the speech must be ($S_0$ dB) in the minimum at the front mic for it to be intelligible in the back. Then during a lecture, you would detect voiced segments of the audio with the front mic and measure the speech level ($S$ dB) at the front during voiced segments and noise level ($N$ dB) in the back during non-voiced segments. If $S-N \ge S_0-N_0$, the speech should be intelligible. When measuring levels, you should weight the spectrum (by running the signal through a filter) so that level best reflects speech intelligibility or the detrimental quality of the noise. You would need to look into voiced/non-voiced detection, or simply have a threshold level for $S$ above which you classify the input as voiced.


Not the answer you're looking for? Browse other questions tagged or ask your own question.