Skip to content

Notebook 5 - Sound

    The following conducts a sound analysis for each voxel in the building. While the script does produce the desired result it is not entirely physically correct. The first step in the script is to import the roads with different sound values as separate lists. The road map used for this calculation was made by hand based on intuition. The loudness of the different road types were estimated with an online tool. The next step is to select a radius around the envelope for analysis. This radius should be large enough for an accurate calculation but should not be too large to keep it computationally viable.
    The roads within this radius are then divided into points and the distance is measured from each voxel to each point. We use the rule of dB lowers by 6 when the distance to the source doubles. After this step, we stray from accurate physics and use a mass addition to calculate the noise for each voxel. In real life, noise cannot just be added to each other. We however chose this approach to keep the analysis simple and within our reach.
     To forego the computational limitations of grasshopper we split the calculation for each level of the building. This prevents crashes and allows us to get a more defined calculation overall. The data per floor is pickled and saved in data/sound.


    The flowchart as shown in Figure 40 is in the second (blue) section of the fundamental flowchart as shown in the Planning - products.

Flowchart - Sound
Figure 40: Flowchart - Sound

Additional diagrams

     Figure 41 shows the grasshopper schript of the first steps in which the curves are loaded and picked within radius.

Grasshopper file I
Figure 41: Grasshopper file I

    In Figure 42, grasshopper file for the last part of the script in which the calculation is done and the data exported, is visualized

Grasshopper file II
Figure 42: Grasshopper file II

    A visualisation of the first step of establishing the radius is shown in Figure 43

Established radius
Figure 43: Established radius

    After that, the curves are divided and distances are measured, as you can see in Figure 44.

Measuring the distances
Figure 44: Measuring the distances

Pseudo code

    For a better understanding of the code, we wrote a pseudo code. Grasshopper file 5, and the other notebooks, can be found here.

For coordinates in center cluster
    add a center next to the center in the x direction  

Stack the centers vertically 
Add all centers in cluster final list 

For cluster center in cluster final
    set 1 in shaft lattice
Assign maximum height for the shafts

#Creation of horizontal corridors
Take the stencil, lattice and adress of a voxel in that lattice
Returns the indices of the neigbhours of that voxel
Find the number of all voxels
Initialize the adjacency matrix
Find the index of the available voxels in availability lattice
Fill the adjacency matrix using the list of all neigbhours

For voxel location in availability index
  Find the 1 dimensional id
  Retrieve the list of neighbours of the voxels based on the stencil

  For neighbours in voxel neighbours
      Set the entry to 1

Construct the graph

#Find the shortest path to the cluster centres seeds and construct the corridor
Define the clusters again
Initialize corridor lattice

For each voxel that needs to have access to shafts
  For available voxel in occupation index cluster
    Slice the corridor lattice horizontally
    Find the vertical shaft voxel indices 
    Construct the destination address
    Construct 1-dimensional indices
        Find the shortest path
        Set the shortest path as occupied in the coordinate flat path = 1
        Print "unreachable" when the voxel is unreachable 

Reshape the flat lattice

Visualisations of the result


GIF - Sound
Figure 45: GIF - Sound


End result - Sound calculation
Figure 46: End result - Sound calculation

Last update: January 27, 2021