
Audio distortion using IIR filters for an audio equalizer
5 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
I am building an audio equalizer. I have created my filters using the ellip() function. Unfortunately I am still hearing distortion when I test the equalizer with music. I am currently using the sosfilt() functions to filter the audio. I tried filter() but there was way too much distortion and fitfilt() did not really help. Below is my filter function code for the low pass section. This filter has n = 6 coefficients. Any ideas how to improve my filtering so as to reduce distortion in the audio?
function filtered_audio = lpFilter(input_audio, Fs)
% Desired specifications
% pb_ripple
Rp = 1; % in dB
% stopband_attenuation
Rs = 50; % in dB
% passband frequencies
Wp = 500 / (Fs / 2); % remember to divide by (Fs / 2) to normalize
% stopband frequencies
Ws = 600 / (Fs / 2);
% Get minimum number of poles required
[n, Wn] = ellipord(Wp, Ws, Rp, Rs);
% Get zeros, poles and gain of filter with the specs
[z,p,k] = ellip(n, Rp, Rs, Wp);
% Convert to SOS matrix
[sos, gain] = zp2sos(z,p,k);
filtered_audio = sosfilt(sos, input_audio);
% maxVal = max(abs(filtered_audio));
% if maxVal > 1
% filtered_audio = filtered_audio / maxVal;
% end
end
0 commentaires
Réponses (1)
Mathieu NOE
le 13 Nov 2023
hello
simple correction
% Convert to SOS matrix
[sos] = zp2sos(z,p,k);
filtered_audio = sosfilt(sos, input_audio);
and you get :
sos = Columns 1 through 5
0.0042342 -0.0029254 0.0042342 1 -1.7705
1 -1.6899 1 1 -1.8021
1 -1.787 1 1 -1.8323
Column 6
0.79926
0.90188
0.97547
when coding your way :
[sos, gain] = zp2sos(z,p,k);
sos = Columns 1 through 3
1 -0.6909 1
1 -1.6899 1
1 -1.787 1
Columns 4 through 6
1 -1.7705 0.79926
1 -1.8021 0.90188
1 -1.8323 0.97547
you get a SOS filter with a gain in the passband frequency range of +46 dB (roughly) instead of 0 dB

and then you get a huge clipping of the filtered output as it will exceed +/-1 range
2 commentaires
Voir également
Catégories
En savoir plus sur Audio Processing Algorithm Design dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!