Problem with parfor loop (not enough input arguments)

6 visualizaciones (últimos 30 días)
I'm having problem with the following snippet of code:
parfor i = 1:196072
z = x(i,:);
z1 = filter(Hd, z);
fprintf(fid, '%20.6f', z1);
fprintf(fid, '\n');
end
fclose(fid);
As soon as I run the code snippet, it says: Not Enough Input Arguments.
However, the code works fine using normal for loop. I tried shutting down and restarting Parpool but no effect. I also tried restarting MATLAB, no effect. I tried deleting local_cluster_jobs folder in C:/Users/AppData/Roaming/MATLAB but no effect.
  3 comentarios
Walter Roberson
Walter Roberson el 26 de Mayo de 2019
Is Hd possibly a global variable?
Swapnil Sayan Saha
Swapnil Sayan Saha el 26 de Mayo de 2019
I solved it.
The filter function can work in two ways:
First method: filter function works with a filter object: filter(Hd, x), where Hd is a filter object exported from FilterDesigner... second method: filter function works with filter coefficients: filter(b,a,x), where b and a are filter transfer function coefficients.. x is the signal..
For some reason, parfor loop cannot process Hd.. So i just exported the coefficents in the workspace and used them inside the loop, also made a couple of changes to better optimize memory usage.
fid = fopen('bagaccx_f.txt','w');
fclose(fid);
parfor i = 1:196072
fid = fopen('bagaccx_f.txt','a');
fprintf(fid, '%f\t', filter(b,a, x(i,:)));
fprintf(fid, '\n');
fclose(fid);
end

Iniciar sesión para comentar.

Respuesta aceptada

Swapnil Sayan Saha
Swapnil Sayan Saha el 26 de Mayo de 2019
I solved it.
The filter function can work in two ways:
First method: filter function works with a filter object: filter(Hd, x), where Hd is a filter object exported from FilterDesigner... second method: filter function works with filter coefficients: filter(b,a,x), where b and a are filter transfer function coefficients.. x is the signal..
For some reason, parfor loop cannot process Hd.. So i just exported the coefficents in the workspace and used them inside the loop, also made a couple of changes to better optimize memory usage.
fid = fopen('bagaccx_f.txt','w');
fclose(fid);
parfor i = 1:196072
fid = fopen('bagaccx_f.txt','a');
fprintf(fid, '%f\t', filter(b,a, x(i,:)));
fprintf(fid, '\n');
fclose(fid);
end
  2 comentarios
Walter Roberson
Walter Roberson el 26 de Mayo de 2019
Was Hd a global variable? If so then parfor would have seen it as [] in the workers, as the content of global variables is not copied to workers.
Swapnil Sayan Saha
Swapnil Sayan Saha el 5 de Jun. de 2019
Yes. Maybe that was a problem.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Parallel for-Loops (parfor) en Help Center y File Exchange.

Productos


Versión

R2018a

Community Treasure Hunt

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

Start Hunting!

Translated by