## Digital signal processing in Scilab and Xcos. Part 1: Reading sound files

In this part, we will load a *.wav sound file into a Scilab’s workspace, and then plot it in Xcos.

Let’s read a *.wav file into a Scilab’s workspace.

I do it in the Scilab’s editor in order to better organize my code and to save it after I exit Scilab.

Type into the workspace

```
editor
```

In the editor, type the command for reading a *.wav file:

```
) // reading the sound file
```

The file that I use for this example, `wheezing_c.wav`, is a recording of an auscultation over trachea and right lower lung of an 11-year old girl with acute asthma (taken from the R.A.L.E. repository).

`wavread` returns the sampled data in `y`, the sampling rate `Fs` in Hertz (number of samples per second) and `bits` — the number of bits per sample used to encode the data.

Checking our data,

```
disp(size(y),"size = ")
disp(Fs,"sampling rate = ")
disp(bits,"bits per sample = ")
disp("Range = ["+string(min(y))+", "+string(max(y))+"]")
```

we get

```
size =

2.    110243.

sampling rate =

11025.

bits per sample =

16.

Range = [-0.4912720, 0.4161072]
```

meaning that the sound file consists of two channels. Each channel contains 110243 16-bit samples. The sampling rate is 11025 times per second. The numeric values of the data vary between -0.5 and 0.5

To calculate the time duration of our signal, we need to divide the total number of samples by the sampling rate:

```
n_samples = length(y(1,:));
t_total = n_samples / Fs;
```

For this file, `t_total` is 10 seconds.

Let’s now create an array of time points at which the samples were taken:

```
t = linspace(0, t_total, n_samples);
```

Always remember that to plot the data, we need to make sure that the number of sampling time points should be equal to the number of data in our signal.

To open the data in Xcos, we have to put each channel into a separate structure:

```
channel_1.time = t';
channel_1.values = y(1,:)';

channel_2.time = t';
channel_2.values = y(2,:)';
```

Notice that each field in these structures is a column vector.

Save your code in the editor in a file (I called mine `wav_example.sce`) and execute it so that all calculated variables were in the workspace.

```
```

Then open Xcos by typing

```
xcos
```

into the workspace.

Build the following Xcos diagram

The block parameters are as follows.

For the first channel:

For the second channel:

For the clock:

The clock period is the reciprocal of the sampling frequency, `1/Fs`.

The parameters of the figure that I changed:

Ymin vector -0.5 -0.5
Ymax vector 0.5 0.5

(because our data is between -0.5 and 0.5)

Refresh period 10 10

I also chose the colour of both curves to be green (colour value = 3).

Then go to the Xcos’ toolbar and choose

Simulation –> Setup

Set the value of the final integration time to 10.

Run the simulation.

You should get the picture of the signals in both channels in the time domain.

Now, as you’ve got your signal values in Xcos, you can feed them to all kinds of filters and do other interesting things.

Remember that after starting a new session in Scilab, you have to first execute the file `wav_example.sce` to load all your variables into the Scilab’s worksheet before starting the simulations of this diagram in Xcos.

Read a few more tips on this topic here: Xcos, Scilab Workspace and Data-file Integration (by http://www.equalis.com).

Next: part 2, part 3