Hi Tim

ZPK can mean many things (Google Search, I suppose) ... but after search I understand it's something with Zero Pole ... don't know what the letter K stands for, though.

What I like about the Matlab example is that random data is generated to represent the impulse response, so this represents "any data" ... I need that. If Scilab cannot do it, it's OK.

/Claus

On 16.09.2018 19:01, Tim Wescott wrote:
I didn't answer about ZPK because I didn't know either!

It's not so much a Scilab thing as -- are you getting the signal
processing right?

On Sun, 2018-09-16 at 18:15 +0200, Claus Futtrup wrote:
Hi Tim

  >So, this is complicated.

I admitted from the very beginning, it's probably just me that
doesn't
know how to read the Scilab manual. It cannot be complicated for
someone
who knows and/or understand the manual.

BTW, I also notice that nobody answered the question what ZPK means?
...
ZPK = Zagrepa Plivaci Klub ... at least the Scilab could spell out
what
it stands for.

/Claus

On 15.09.2018 22:50, Tim Wescott wrote:
So, this is complicated.

First, if you have an impulse response, in the form of a vector of
samples, then you can turn it into a FIR filter, and you can find
the
frequency response of that with any of the available Scilab tools.
  I'm
not sure if there's a more direct way, but if you had an impulse
response h = [1, 1/2, 1/4, 1/8], then you can turn that into H = 1
+
0.5*%z^(-1) + 0.25*%z^(-2) + 0.125*%z^(-3) (note that %z is a
built-in:
%z = poly(0, 'z')).  Then you can use techniques surrounding
repfreq to
get the frequency response.

Assign a sampling rate to it (i.e., by setting H.dt = 0.001, for a
1kHz
sampling rate) and you can just use the Bode plot function:
bode(H).

Second, you can take your impulse response, pad it with zeros, and
then
take the FFT of it -- i.e. H = fft([h zeros(1, 252)]).  You need to
pad
it because the FFT is only exact for a periodic function in time --
padding it gives you an approximation of an actual impulse response
(and before someone jumps in and says you need to window it -- no,
you
don't, windowing is for sample vectors of continuous signals, not
impulse responses).  But if you don't know WHY the method is
approximate, you're going to have trouble correctly massaging the
data
before it's presented to the FFT, and with interpreting the
results.

On Sat, 2018-09-15 at 22:15 +0200, Claus Futtrup wrote:
Hi Samuel and Scilabers

My problem with freq and repfreq is that they require a "sys"
input,
which implies I need to describe a response function of some
sort.
For example (from the Scilab web-help):

https://help.scilab.org/docs/6.0.1/en_US/freq.html (example code)
s=poly(0,'s');
sys=(s+1)/(s^3-5*s+4)
rep=freq(sys("num"),sys("den"),[0,0.9,1.1,2,3,10,20])

https://help.scilab.org/docs/6.0.1/en_US/repfreq.html (syntax)
[ [frq,] repf]=repfreq(sys,fmin,fmax [,step])
[ [frq,] repf]=repfreq(sys [,frq])
[ frq,repf,splitf]=repfreq(sys,fmin,fmax [,step])
[ frq,repf,splitf]=repfreq(sys [,frq])

... So, the thing with the matlab freqz (as the example repeated
below shows) is just a basic FFT with sampling, etc:

h = rand(1,64); // impulse response (Matlab source code)
fs = 1000;
Nfft = 128;
[H,F] = freqz(h,1,Nfft,fs);
semilogx(F,mag2db(abs(H))); grid on;
xlabel('Frequency (Hz)'); ylabel('Magnitude (dB)');

It may very well be that I just don't understand the help page of
repfreq. For example it says about sys: "A siso or simo linear
dynamical system, in state space, transfer function or zpk
representations, in continuous or discrete time." - al right
then, it
seems pretty capable, but so, what's "zpk" for example? ... my
apologies for finding the Scilab help to be cryptic and the
examples
insufficient for me to solve my problem, hence I ask if someone
can
take above matlab code and make it work in Scilab.

Best regards,
Claus

On 15.09.2018 00:32, Samuel Gougeon wrote:
Le 14/09/2018 à 20:57, Claus Futtrup a écrit :
Dear Scilabers
I have calculated an impulse response and wish to do an FFT
to
achieve the frequency response. I know what to expect. In the
matlab forum someone asked the same question and was
recommended
to use freqz ... I wonder what would be the equivalent
function
in Scilab?
https://www.mathworks.com/matlabcentral/answers/350350-how-to
-plo
t-loudspeaker-frequency-response-from-its-impulse-response
For example, to replicate the code snippet (second answer in
above link), how to do this in Scilab?
h = rand(1,64); // impulse response (Matlab source code)
fs = 1000;
Nfft = 128;
[H,F] = freqz(h,1,Nfft,fs);
Did you have a look around freq() or repfreq()?

We have somewhat the equivalence invfreqz(H,F,m,n,W)  <=>
frfit(F*2*%pi, H, n, W) // Scilab

So you may look for the reciprocal of Scilab's frfit()

HTH
Samuel



_______________________________________________
users mailing list
[email protected]
http://lists.scilab.org/mailman/listinfo/users
        Virus-free. www.avast.com
   _______________________________________________
users mailing list
[email protected]
http://lists.scilab.org/mailman/listinfo/users

---
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus

_______________________________________________
users mailing list
[email protected]
http://lists.scilab.org/mailman/listinfo/users


_______________________________________________
users mailing list
[email protected]
http://lists.scilab.org/mailman/listinfo/users

Reply via email to