################################################################# # # edbtoolboxversionhistory.txt # # - version history of the EDBtoolbox # # Peter Svensson (svensson@iet.ntnu.no) # ################################################################# # The first version, which did up to second-order diffraction # was developed in 1999. A more general version which handled # higher-order diffraction and most combinations of specular # and diffraction components was developed in 2003. Improved # numerical integration for first-order diffraction was # implemented in 2004. Frequency-domain expressions for first-, second- # and third-order diffraction were implemented preliminarily in 2009 # and officially released in 2013. A frequency-domain version of the # integral equation which permits arbitrarily high diffraction orders # was implemented preliminarily in 2011 and is planned to be officially # released during 2013. # Parts of the algorithms are described # in the various papers by myself and co-authors. # # Help with debugging and development and discussions has been # offered by many, by large or small contributions. In chronological # order these persons are (I hope no one has been forgotten!): # Roger Andersson/Fred # John Vanderkooy # Rendell Torres # Kai Wendlandt # Chris Strahm # Herman Medwin # Tom Funkhouser # Shinsuke Nakanishi # Tapio Lokki # Lauri Savioja # Anders Loevstad # Paul Calamia # Johan Rise Karlsen # Marije Baalman # Eirik Tuftin # Ville Pulkki # Uwe Stephenson # Dirk Schroeder # Alexander Pohl # Hassan EL-Banna Zidan # Andreas Asheim # Santiago Ortiz # Marcel Remillieux # Dave Hewett # Bjørn Kolbrek # ################################################################# Start 18 March 2005 050318 Mod. of EDBmakeirsISESx. For 2nd-order diffraction only: if two edges are parallel and close to each other, then the edge sub-division is made finer than asked for by the user (via the parameter elemsize). This speeds up processing a bit when some parallel edges are close to each other and other parallel edges are far from each other. No speed advantage compared to previous versions if all parallel edges have the same inter-edge distance. 050404 Mod. of BENCH_Lsp_Kessel.m in EDBtoolbox_examples.zip The parameters open_or_closed_model and int_or_ext_model were missing. 050404 Mod. of EDBmainISESx, EDBfindISEStree, EDBfindpathsISESx Added an extra check of geometry: if source/receiver does not see a single plane, give user a warning text and pause - but only if SHOWTEXT >= 2. 050404 Mod. of EDBmakeirsISESx, EDBwedgeN_huge (new) Replaced EDBwedgeN by EDBwedgeN_huge which is a little bit more memory saving. Also, inserted the global IRDIFFVEC for higher-order diffraction so that one can extract the DC values of the individual edge combos afterwards. (The DC values are relevant for an accuracy check). 050405 Mod. of EDBmainISESx, EDBmakeirsISESx, EDBreadsetup Introduced a new optional parameter in the setup-file: saveindividualdiffirs with the possible values 0 (default) or 1. With the value 0, the diffraction IR is saved in a single vector as before. With the value set to 1, all individual diffraction orders are saved in individual columns. 050405 Mod. of EDBmakeirsISESx Small modification of the automatical fine-subdivision for 2nd-order diffraction (see 050318): if edgeelem for 2nd-order diffraction is < 0.1, then there is no automatically finer sub-division. Consequently, for fast (and inaccurate) processing of 2nd-order diffraction, one could set the second value of the edgeelem vector to a value smaller than 0.1 050421 Mod. of EDBed2geox Fixed a bug that gave problems in unpredictable ways for second- and higher order diffraction. 050504 Mod. of EDBedgeox, EDBed2geox, EDBmakeirsISESx. New file: EDBrefinecad. Fixed a bug that gave problems when there were head-to-tail aligned edges for second- and higher-order diffraction. Created a new program: EDBrefinecad, which gives the possibility to modify a CAD file to give a maximum edge length by inserting new corners. Seems to work for thin plates. Not tested for non-thin plates - but should work! Modified EDBmakeirsISESx so that the refined subdivision, when two edges are parallel, is used only when the two edges are not "displaced" in the z-direction. If one sub-divides the edges in smaller pieces already in the CAD-file, then there will be many parallel edges that are not close to each other. 050505 Mod. of EDBcreindexmatrix, EDBmakeirsISESx, EDBwedge2nd_huge, EDBwedgeN_huge. Small mod of EDBcreindexmatrix: outputs index vector in uint32 format rather than double, to save some memory. Major change to EDBmakeirsISESx for 3rd- and higher-order diffraction. Instead of calling EDBwedgeN_huge a single time, with a huge BIGEDGESTEPMATRIX, a loop is created, using smaller pieces of BIGEDGESTEPMATRIX. Small time penalty, and much finer edge divisions can be used. Also, EDBwedge2nd_huge was changed so that the automatic edge refining for edge pairs that are close to each other is done inside EDBwedge2nd_huge rather than outside. 050506 Mod. of EDBmakeirsISESx. Fixed a small bug: after the big change, a few things were forgotten: I hadn't implemented the new for-loop for fourth and fifth-order diffraction. Also, there were some pause print-outs and plotting of intermediate data. 050510 Mod. of EDBmakeirsISESx, EDBmainirsISESx, EDBwedgeN_Huge + new program EDBfindpathrepetitions. Introduced a new optional parameter in the edpathsfiles: multfactors This should be a vector with the same length as reflpaths, and should contain numbers [0,1,2,...]. If EDBmakeirsISESx finds such a vector in the edpaths file, any occurence of the value zero will mean that specific path will not be computed. If a value 2 is found, that particular path is boosted by a factor 2. By modifying (manually or using the new utility program EDBfindpathrepetitions) the edpathsfiles between the 'findpaths' and 'calcirs' stages, a time saving of close to 2 might result. 050510 Mod. of EDBwedge1st_int Fixed a small bug: EDBwedge1st_int did not assign any value to the output variable singularterm in the (unusual) case when the edge had zero length. 050511 Mod. of EDBwedgeN_huge and EDBfindpathrepetitions Fixed a major bug in EDBwedgeN_huge that gave larger errors for diffraction order 4 and higher. Fixed a small bug in EDBfindpathrepetitions. 060913 A number of smaller and larger changes. Renamed some functions, removed others. Fixed an important bug in EDBedgeox, which gave errors for models with 12-15 planes, or with 182-255 planes. 061101 A few smaller fixes: bug in EDBreadcad. Small speed-up for higher-order diffraction in EDBwedgeN and EDBmakeirsISESx and EDBcoordtrans1. 061118 Important change to EDBdiffISESx: old version gave wrong values for prespecs in the reflpaths list in the edpaths files. But, the specextradata was correct so IRs were computed correctly. Also, a remaining bug EDBcoordtrans1 since last change. Finally a small "if ~isempty" was inserted in EDBdiffNISESx. 061208 Small improvement to EDBmakeirsISESx and consequential changes to EDBmainISESx and EDBreadsetup: let the optional setup file parameter saveindividualdiffirs be a vector with two values (instead of a single value). The new second value determines if all individual first-order diffraction IRs should be saved (or not). 070103 Small bug fix to EDBmakeirsISESx: if the optional input parameter saveindividualiffirs in the setup file was set to 1 (that is, if its first value of two was set to 1), and difforder was 1, then the irtot in the xxx_ir.mat output file had an error. Small improvement to EDBmainISESx and EDBreadsetup: works also for the Matlab 7.3 version for Intel Mac. 080414 Fixed small bug in EDBdiffISESx: an error occurred in some rare circumstances (causing an error message that referred to "initialzeros(1) on line 867") and that was fixed. 080507 Implemented missing function in EDBed2geox.m. Previously, geometries with parallel planes were not handled correctly for 2nd and higher order diffraction. Now, most of the in-plane edge-to-edge combinations that pass across another plane are excluded. 080507 Fixed EDBwedge2nd: edge-to-edge pairs that were in the same plane, but not sharing a surface/polygon, were not allowed before but they are in this fixed version. Another case is still not implemented: if two edges are not in the same plane, that combination can not be handled (and the program terminates with a warning). Quite a small extension is needed to handle this. Another issue is a known limitation/error: geometries like reflector clouds with several surfaces in the same plane will give some errors: obstruction checks are not done properly for edge-to-edge pairs if they are in the same plane. Some removal of non-allowed edge-to-edge pairs is done: if a path from one edge to another edges starts by crossing the first edge's own plane, then that edge-to-edge combination is shut off. This could be expressed as if a second edge is "behind" the first edge. It corresponds somewhat to the check for the image source method if an image source is behind or in front of its last potential reflection surface - a "validity" check. But, the subsequent "obstruction" check is not done yet. 080609 Added one feature to EDBed2geox. If the model consists of all thin planes that are all aligned then most of the "edgeseespartialedge" should be set to zero: there is no 2nd- or higher-order diffraction from edge to edge unless the edges belong to the same plane. 090326 Added two output parameters to EDBreadcad: "planehasindents" and "indentingcorners", which are saved in the output file for further use by other programs. 090326 Modified EDBedgeox: Earlier there was a place holder for computing "planehasindents" but it wasnt implemented. Now that planehasindents is implemented in EDBreadcad, EDBedgeox will pass on planehasindents to other functions, but also compute indentingedgepairs from indentingcorners 090326 Modified EDbed2geox: Removes edge-to-edge combos that form an indenting corner (this is based on the "indentingedgepairs" from EDBedgeox). Also, handles edge-to-edge obstructions when these edge-to-edge combos are in the same plane. That is, plane with indents are now handled better. There is still the limitation that edge-to-edge part-visibility is not handled correctly. 090617 Modified EDBreadcad: a rounding problem was fixed for finding the sign of the plane normal vectors. 090326 Modified EDBedgeox: Fixed a bug; the recently implemented "planehasindents" did not create an empty matrix, so there was a problem at the saving stage. 090708 Modified EDBedgeox so that it could could handle files (cadgeo and eddata) in the same directory, that is, without a path specified. This is normally not needed when EDBmainISESx is run, but for separate use of EDBedgeox it can be practical. Also fixed a bug: the finding of indenting edges gave an error when plane numbers = nplanes had indents. 090708 Modified EDBplotmodel so that it could could handle an eddata file in the same directory, that is, without a path specified. 090708 Mod. EDBreadcad: added a test which detects some twisted planes. Also changed the file name handling so that a small-letter extension is possible (.cad instead of .CAD). 090717 Mod. EDBreadcad: streamlined the code by using textscan, but no functional change. 090717 Mod. a number of files by removing the EDBcap2smal (replaced by the built-in function "lower") and EDBstrpblnk (replaced by the built-in function "strtrim"). 091210 Mod. EDBmainISESx (and EDBreadsetup) so that it could handle "doaddsources" and "dobackscatter". 091229 Made a specialized version of EDBmainISESx called EDBmainLSP which is specialized on doing loudspeaker calculations. Main features: doesnt save individual edpaths files, and always adds sources. 100103 Modified EBDinfrontofplane so that huge models dont cause memory swapping in the "plane sees plane" phase. This was done by splitting up a long list into chunks in the EDBinfrontofplane function. 100204 Implemented (and debugged) a faster EDBpoinpla and EDBpoinplax version based on 2D-projected ray casting instead of the angle winding number algorithm for point-in-polygon test. 100206 The Edge diffraction toolbox was made available at http://www.iet.ntnu.no/~svensson/software/ under the GNU GPL license. 20120415 Some important debugging + cleaning up of code - Bug was found in EDBpoinpla: when the ray (from the hitpoint in the positive x-direction) passed exactly through a vertex, then there was an error. For those rare cases an extra ray is shot in a random direction. STILL TO FIX: EDBpoinplax needs to be modified as well!!! - Bug was found in EDBed2geox, which gave the wrong amplitude for second- and higher-order diffraction, but only for diffraction paths that do not travel along a surface. It is unclear how long this bug has been there. - The entire toolbox + functions were renamed to EDB1.... rather than EDB in order to make it possible to track version number more easily. - Shortening of the names of the two main functions to EDB1main and EDB1makeirs. - Some cleaning up of "dead code": code that had been commented out. - Some cutting out of code that has not been implemented further in many years: "makeambisonicsir", "accuratedoubint", "accuratetripint" was removed from EDB1makeirs; - Cleaned up the example files a bit so they should run without editing file paths. - Added a new file, "EDBreadac.m", made by Alexander Pohl, for reading geometry files that are made with e.g. Invis AC3D. 20130814 Some important debugging + introduction of freq.domain diffraction - Bug was found in EDB2poinpla: the random-ray version didn't seem to work properly so the function was rewritten quite much. At the same time, the edgehit and cornerhit was implemented correctly. - Bug found and fixed in EDB2ed2geox ,which stopped edges from seeing each other if they belonged to the same plane, with subplanes. - Bug found and fixed in EDB2findISEStree, which gave errors for specular order > 4 in models with only two walls. - Introduced new functions: EDB2maketfs, EDB2wedge1st_fd, EDB2wedge2nd_fd, EDB2betaoverml_fd, EDB2betaoverml2_fd. - As a consequence of these new function, there were changes also to EDB2main, EDB2readsetup and others. 20130816 Minor modification to EDB2edgeox: old syntax for "fileparts" remained in one place. Also updated the text on the start screen of EDB2main. 20140207 Minor mod. to EDB2readcad: fixed a problem which was caused by that corner number zero got confused with "no value". 20150424 Mod. to EDB2readsetup (better structure of error messages for calcirs and calctfs), EDB2edgeox (Bug found and fixed, generated when the list indentingedgepairs is empty), EDB2main (EDB2main erroneously called EDB2makeirsISESx, which was replaced by a call to EDB2makeirs).