Hi TimZPK 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 :Did you have a look around freq() or repfreq()?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);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/usersVirus-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
