## How do I get frequency response as values from multibandParametricEQ System object?

### Hiroshi Iwamura (view profile)

on 22 Aug 2018
Latest activity Commented on by Kei Otsuka

on 25 Aug 2018

### Kei Otsuka (view profile)

https://jp.mathworks.com/help/audio/ref/multibandparametriceq-system-object.html
I cant visualize the response using visualize(mPEQ). But I want "values" as [h,w]. How do I get?

R2016a

### Kei Otsuka (view profile)

on 24 Aug 2018

For example, you can use computefreqz, one of the dsp.util.FilterVisualizer object function to calculate frequency response within a multibandParametricEQ.
?
#1. Add following to visualize function defined in multibandParametricEQ.m
fVector = logspace(log10(20),log10(Fs/2),NFFT);
H = obj.visualObj.computefreqz(coeffs, fVector', Fs);
data = 20*log10(abs(H));
#2. Add output arguments to visualize function
function [data, fVector] = visualize(obj,NFFT)
#3. Confirm if modified method works
mPEQ = multibandParametricEQ(...
'NumEQBands',1,...
'Frequencies',9.5e3,...
'PeakGains',10);
[h, w] = visualize(mPEQ)
figure, semilogx(w,h)
ax = gca;
ax.YLim = [-25 25];
ax.XLim = [20 44100/2];
xlabel('Frequency (Hz)')
ylabel('Magnitude (dB)')
grid on
grid minor

Hiroshi Iwamura

### Hiroshi Iwamura (view profile)

on 24 Aug 2018
I tried to add these lines at the end of "function [data, fVector] = visualize(obj,NFFT)".
fVector = logspace(log10(20),log10(Fs/2),NFFT ); H = obj.visualObj.computefreqz(coeffs, fVector', Fs ); data = 20*log10(abs(H));
Something wrong? (I'm using R2016a. But other error occurred in R2018a. )
But I found I can get filter coefficients as below.
[B,A] = coeffs(mPEQ);
So now I can draw arbitrary graph such as ...
Fs = 48000; f = logspace(1,5,4096); f(f>Fs/2) = [];
h_all = 0; for i=1:size(B,2) sosPEQ = [B(:,i),[1;A(:,i)]]; h = freqz(B(:,i),[1;A(:,i)],f,Fs); h_all = h_all + 20*log10(abs(h)); end figure semilogx(f,h_all)
That's fine to me!
Thanks a lot.
Kei Otsuka

### Kei Otsuka (view profile)

on 25 Aug 2018
That's great, thanks for sharing your experience with us.
&#01
The error you run into was because dsp.util.FilterVisualizer is not available on R2016a. This is just FYI, but you can use freqz instead like this;
fVector = logspace(log10(20),log10(Fs/2),NFFT);
H = freqz(coeffs{1}, [1;coeffs{2}], fVector', Fs);
data = 20*log10(abs(H));