On Tue, 2023-08-08 at 17:27 +0200, Sylvain Munaut wrote:
Hi Seppo,
Thanks for the answer.
I had figured out some things on my own since originally asking the question and figured out how to create a topology file that had all the "normal" features in my default file (deep buffer and dynamic pipes for instance) and also add the 'eq' with a FIR and IIR in the playback path.
Warning: Do not play loud sounds from speakers to avoid damage! If the speaker sound is distorted, stop the playback immediately and drop the volume control.
Oh wow, I didn't know that was a possibility, thanks for the warning !
To set up equalizing this should be useful:
https://thesofproject.github.io/latest/algos/eq/equalizers_tuning.html
Yes, I've read that very attentively. Even got myself a UMIK-1 to make the measurements.
Nice, I think it's good value for money.
This was a quick test I made with REW (Room Eq Wizard) to capture the response : https://assets.chaos.social/media_attachments/files/110/735/051/339/246/082/...
That's a very good clean response to equalize, much better than what I saw in my T480 notebook. You could try to boost the mid frequencies with parameteric IIR EQ to not lose much of the loud bass resonance at ~800 Hz. Alternatively the FIR procedure might do everything automatically in 1k - 7k band.
Cutting the lowest bass should give practical headroom and give some protection for the speaker. The speaker displacement usually increases a lot below the resonance. Hitting the displacement limits will in long term break the speaker.
We don't have high-pass by default for speaker path in SOF. We could do it in platforms with separate speaker and headphone DAI but in HDA it's shared. You would need to set with sof-ctl the equalizers to pass- through when using headphones.
I didn't get a chance yet to actually try and design filters and load them. I'd like to do that using scipi instead of octave (just because I like making things harder for myself apparently :) and I haven't dug yet into what format the configuation of the filter is. I guess I need to read the octave code to know what all those numbers mean.
You can feed your measured response to example Octave scripts scripts and see what happens ;D Scipy seems to have a quite similar basic signal processing library as Octave and Matlab so should be possible to convert without need to re-invent everything if you like.
Probably something like 2nd or 4th order high-pass around 100 - 200 Hz is suitable. The band 500 - 10 kHz can be likely made flatter if you are able to measure the frequency response. With the added high-pass there should be practical signal-headroom to amplify in the EQ with few decibels. You should be able to create a custom topology to use for T14 so there is no need to run sof-ctl every time to set up the filters.
This was definitely an enlightening read, I must admit I had never thought about cutting off the low frequency there was no hope to recover to make head room to amplify/flatten the rest of the band.
The DRC component is not part of the signed firmware image, but I hope it will be later in future. It would be useful to make the speaker sound louder. But EQ should already give a noticeable improvement.
Ah yeah, I had seen the DRC mentioned a couple of times reading around SOF and was wondering if this could help too. Didn't realize of course you need the actual component to be present in the actual firmware for it to be loadable. I do have one of those upsquared sbc as well and I seem to remember those can load unsigned firmware so I could also use that for experimentation.
Yep, UP2, UPX, and Chromebooks in developer mode allow to run all open- source components. We don't have in git main support for UP2, but UPX with TGL platform is supported. SOF v2.2 works with UP2.
We are developing also an ALSA plugin version of SOF. It will enable to run all same algorithms in main CPU user space without restrictions.
Cheers, Seppo
Cheers,
Sylvain
--------------------------------------------------------------------- Intel Finland Oy Registered Address: PL 281, 00181 Helsinki Business Identity Code: 0357606 - 4 Domiciled in Helsinki
This e-mail and any attachments may contain confidential material for the sole use of the intended recipient(s). Any review or distribution by others is strictly prohibited. If you are not the intended recipient, please contact the sender and delete all copies.