ScaleValues property error in designing a filter with designParamEQ and dsp.BiquadFilter

2 visualizaciones (últimos 30 días)
Hello everyone,
I'm trying to design a filter with dsp.BiquadFilter and designParamEQ in MATLAB R2020a. I get the following error message:
Error using BiquadFilter/BiquadFilter.setParameters
The ScaleValues property value must be either a scalar or a vector of length one greater than the number of sections.
I'm designing twelve parametric equalizers for a certain frequency (FreqVector) and amplitude (GVector), which I want to cascade and apply to a stereo signal (two channels). Here's my current code:
rma = zeros(3,12);
rmb = zeros(2,12);
for ii=1:12
[rma(:,ii), rmb(:,ii)] = designParamEQ(N1,GVector(ii,:),FreqVector(ii,:),BW);
end
BiquadFilter1 = dsp.BiquadFilter('SOSMatrix',[rma(1).',[1,rmb(1).']]);
BiquadFilter2 = dsp.BiquadFilter('SOSMatrix',[rma(2).',[1,rmb(2).']]);
% ...
[AllBiquads] = dsp.FilterCascade(BiquadFilter1, BiquadFilter2, BiquadFilter3, BiquadFilter4, BiquadFilter5, BiquadFilter6, BiquadFilter7, BiquadFilter8, BiquadFilter9, BiquadFilter10, BiquadFilter11, BiquadFilter12);
for ii=1:2
y(ii,:) = AllBiquads(in(ii,:));
end
Here's the complete error message that I get:
Error using BiquadFilter/BiquadFilter.setParameters
The ScaleValues property value must be either a scalar or a vector of length one greater than the number of sections.
Error in dsp.BiquadFilter/setParameters
Error in dsp.FilterCascade/getNumInputsImpl (line 614)
n = getNumInputs(obj.Stage1);
Error in prototype_25012021 (line 207)
y(ii,:) = AllBiquads(in(ii)); - Show complete stack trace
What's wrong here? Any ideas how to solve my problem?

Respuesta aceptada

jibrahim
jibrahim el 3 de Mzo. de 2021
Hi Patrick,
I can't run your code because certain variables are missing (N1, GVector, in, out, etc), but in R2020a, this code should give you a dsp.BiquadFilter:
Fs = 48e3;
N = [2, 4];
G = [6, -4];
Noct = [1.5, 1];
Q = sqrt(2.^Noct)./(2.^Noct-1); % Q factors
Wo = [100 5000]/(Fs/2);
BW = Wo./Q;
[B,A] = designParamEQ(N,G,Wo,BW,'Orientation','row');
bqd = dsp.BiquadFilter('SOSMatrix',[B,A]);
bqd(1) % works
f = dsp.FilterCascade(bqd,bqd);
f(1) % works
  1 comentario
Patrick Boettcher
Patrick Boettcher el 4 de Mzo. de 2021
Thanks! I found the mistake myself, I was adressed the wrong lines, because I have a vector matrix. It has to be:
BiquadFilter1 = dsp.BiquadFilter('SOSMatrix',[rma(:,1).',[1,rmb(:,1).']]);
BiquadFilter2 = dsp.BiquadFilter('SOSMatrix',[rma(:,2).',[1,rmb(:,2).']]);

Iniciar sesión para comentar.

Más respuestas (0)

Etiquetas

Productos


Versión

R2020a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by