## 2 Materials and Methods
Then the next four vertices of \(proj[i+1][j]\), \(proj[i+2][j]\), \(proj[i+2][j+1]\), and \(proj[i+1][j+1]\) would be taken in turn. The process of this kind of filling mesh surfaces would be repeated, one by one. **Step 6**: After each line of the mesh surfaces was drawn, the point of \(proj[0][j+1]=(0,t_{j}+\Delta t)\) would be dealt in the chronological order of time, that is, along the positive direction of the \(Y\)-axis. Additionally, the process of filling mesh surfaces would be repeated, line by line. As is shown in Figure 3, the mesh surface would be rendered as follows: F1 \(\rightarrow\) F2 \(\rightarrow\)... \(\rightarrow\) F3 \(\rightarrow\) F4. When the algorithm was programmed in an embedded system, the above steps could be completed with two, for-loop nesting. Suppose \(i\) was updated once after each single surface was drawn: \(i=i+1\), and \(j\) was updated to: \(j=j+1\), after each line of mesh surfaces was drawn. The pseudo-code diagram is shown as follows (Algorithm 1). Figure 3: Schematic diagram of the painting order. ```
INIT:\(thx\leftarrow\alpha\), \(thy\leftarrow\beta\), \(thz\leftarrow\gamma\); // rotation angle \(f[m]\), \(\{n\}\), \(a[m][n]\); // the STFT results LOOP1: obtain the 2D projection coordinates \(proj[m][n]\). For \(i=0\); \(i<m\); \(i=i+1\) For \(j=0\); \(j<n\); \(j=j+1\) \(x\gets f[i]\); \(y\gets t[j]\); \(z\gets a[i][j]\); \((x,y,z)\leftarrow(x,y,z)\) coordinates sequentially rotate \(thx\), \(thy\), \(thz\); \(proj[i][j].x\leftarrow\) orthogonal projection of \(x\); \(proj[i][j].y\leftarrow\) orthogonal projection of \(y\); \(proj[i][j].z\leftarrow\) orthogonal projection of \(z\);  End For End For END LOOP1 LOOP2: generate the 3D mesh surface. For \(j=0\); \(j<n-1\); \(j=j+1\) For \(i=0\); \(i<m-1\); \(i=i+1\)  DrawPolygon(\(proj[i][j]\), \(proj[i+1][j]\), \(proj[i+1][j+1]\), \(proj[i][j+1]\));  FillPolygon(\(proj[i][j]\), \(proj[i+1][j]\), \(proj[i+1][j+1]\), \(proj[i][j+1]\));  End For END LOOP2
```  
**Algorithm 1**SMSG Algorithm  
By defining \(M\) as the number of polygons in a scene, and \(N\) as the number of pixels in the resolution of the screen, it could be calculated that the SMSG algorithm had a complexity of \(O(MN)\). The efficiency of the painter's algorithm essentially depends on the method of sorting which is a time consuming procedure. As in the worst case the complexity of a sorting algorithm, is \(O(N^{2})\), and the average complexity is \(O(NlogN)\) as shown in Table 1[17], which gives the time complexity of several common sorting algorithms. It is important to note that the time complexity shown in Table 1 is only the complexity of sorting algorithms, not including the complexity of drawing operation of the painter's algorithm, which also has the same complexity as that of the SMSG algorithm. In addition, considering a user's observation demand of the specific distribution of frequency values and its change trend with time, a Frequency-Time-Amplitude (_F-T-A_) coordinate system and a Time-Frequency-Amplitude (_T-F-A_) coordinate system would be needed to display. The default coordinate system of the above algorithm is the _F-T-A_ coordinate system. If the user expects to observe the result in the _T-F-A_ coordinate system, it only needs to perform an up-and-down flipping and a transpose operation of the joint time-frequency distribution matrix. The embedded device used in this paper is shown in Figure 4. The hardware was composed of a STM32F407 microprocessor, a Thin Film Transistor LCD (TFT-LCD) module, a program download interface, and liquid crystal drive circuits. The operating frequency of the STM32F407 microprocessor was 168 MHz. The STM32F407 microprocessor was a 32-bit MCU, with float point units, and digital signal processor instructions, which was capable of handling complex calculation and analysis operations. The TFT-LCD supports up to 24 bit, 854 \(\times\) 480 real color displays.