[Scilab-users] Frequency response

Claus Futtrup cfuttrup at gmail.com
Sun Sep 16 19:13:42 CEST 2018


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
>>>>> users at lists.scilab.org
>>>>> http://lists.scilab.org/mailman/listinfo/users
>>>> 	Virus-free. www.avast.com
>>>>    _______________________________________________
>>>> users mailing list
>>>> users at lists.scilab.org
>>>> 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
>> users at lists.scilab.org
>> http://lists.scilab.org/mailman/listinfo/users





More information about the users mailing list