Info

La pregunta está cerrada. Vuélvala a abrir para editarla o responderla.

speeding up the proccess

1 visualización (últimos 30 días)
tony karamp
tony karamp el 25 de Abr. de 2013
Cerrada: MATLAB Answer Bot el 20 de Ag. de 2021
hello,
I have a wavfile that I read with 'wavread' and I want to apply some weighting function on each channel. everything is working ok, but it takes almost 2 minutes to through the for loop. Any ideas as to how to speed things up? the sampling frequency fs=32kHz and duration is 10secs.
[y,fs] = wavread('C:\Desktop\testwavfile')
y = y';
t =0:1/fs:length(y)/fs-1/fs;
t = t';
gain1 = 0:4/fs:40-4/fs; %this is level
gain2 = 20:4/fs:60-4/fs;
gain3 = 40:-4/fs:0+4/fs;
t1 = 8*fs;
slope = (gain2(1)-gain2(t1))/t1;
con = slope+gain2(1);
slopeout = (gain1(5*fs)-gain1(t1))/t1;
conout = slopeout+gain1(5*fs);
%creates a weighting function
for iTime = 1:t1
temp(iTime) = -slope*iTime+con; %#ok<*SAGROW>
out(iTime) = -slopeout*iTime+conout;
end
temp(t1+1:length(y)) = 6.5*gain3(t1+1:length(y));
out(t1+1:length(y)) = 4*gain3(t1+1:length(y));
  3 comentarios
Matt Kindig
Matt Kindig el 25 de Abr. de 2013
In fact, the for loop doesn't even appear to be necessary. You can define both of them as:
temp(1:t1) = -slope*iTime+con;
out(1:t1) = -slopeout*iTime+conout;
and eliminate the for loop entirely.
tony karamp
tony karamp el 25 de Abr. de 2013
it did the trick. I don't know how I forgot to pre-allocate, I usually do it.
Thanks a bunch!

Respuestas (0)

La pregunta está cerrada.

Community Treasure Hunt

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

Start Hunting!

Translated by