Hi Tan, et al.

Thank you for the complete response to my initial request.

This is very helpful for me to understand ... but if this is indeed the equivalent of the matlab script, I wonder about if the help I found in the matlab forum is helpful or not. The reason I'm still wondering is because the matlab forum question is exactly like mine - I wish to find the fft of a loudspeaker impulse response and I expect a loudspeaker frequency response with roll-off at low frequencies, but now that I see the result of the below script with random data for the impulse response ... I see that the generated output is a "filter" - which is not at all what I expected and I think the similar response in the matlab forum was also not helpful (I do not have access to matlab / cannot test and or verify). Sorry for this. The entire concept may not be useful in my case, but Scilab supports advanced FFT routines (FFTW) and it should be possible to do what I need.

Rafael is right that the previously attached stepresponse script explains in detail my situation. If I take the "H" vector (the impulse response) in the script and apply a basic fft(H), it looks like this:

Added script code:

Resp  =  fft(H);
[db,phi]  =  dbphi(Resp);  // convert frequency response into magnitude and 
phase
f_max  =  1/tau_step;  // Hz
f  =  f_max  *  (0:length(H)-1)/length(H);  //associated frequency vector
scf();
plot(f'(2:nt/2),db(2:nt/2));  // Transpose X to prevent WARNING
re  =  gca();
re.log_flags  =  "lnn";
xgrid(color("grey70"));
xlabel("Frequency (Hz)");
ylabel("Magnitude (dB)");

RESULT :

This is not exactly what I had in mind, the "shape" of the curve isn't right, but then again - there are some inner-workings I don't know about (like, is the dbphi function doing what I think it does?). Maybe I cannot use dbphi(), or maybe I just have an error somewhere in the calculation of the impulse response. I expected a level of approx. 86 dB with a roll-off towards the lower frequencies. Here's the expected response (from simulation based on the input response function, i.e. not based on impulse response and not by fft):



Best regards,
Claus

On 18.09.2018 04:25, Tan Chin Luh wrote:
On 18/9/2018 5:15 AM, Rafael Guerra wrote:
Chin Luh:  good to know but how does that solve Claus Futtrup specific problem?
_______________________________________________
users mailing list
[email protected]
http://lists.scilab.org/mailman/listinfo/users

just notice that the answer similar as the one Tim provided, just a bit confused on Claus' comment on the "random" data:

On 17/9/2018 1:13 AM, Claus Futtrup wrote:
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.

Do you refer this "random" data to the example provided?

h = rand(1,64); % impulse response <-- This?
fs  =  1000;
Nfft  =  128;
[H,F]  =  freqz(h,1,Nfft,fs);
plot(F,H);  grid  on;

If so, the equivalent scilab code would be as below:

h  =  rand(1,64);
fs  =  1000;
b  =  poly(h($:-1:1),"z","coeff");
a  =  %z^(length(h)-1);
Gz  =  syslin('d',b,a);
Gz.dt  =  1/fs;
[F,H]=repfreq(Gz,0,500,0.01);
plot(F,H); Do note that I replace the last part of semilogx plot and replace with plot for more simple codes.
--
Tan Chin Luh
Trity Technologies Sdn Bhd
Tel : +603 80637737
HP : +6013 3691728


_______________________________________________
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

Reply via email to