# Compute EDF Signal Averages

In this tutorial, you will learn how to:

1. Load a signal and compute signal averages.

The Requirements for running this tutorial are described after the discussion of the tutorial script.

# The script

``````require 'rubygems'
require 'colorize'
require 'edfize'
require 'nsrr'

Edfize.edfs do |edf|
puts "\nEDF: #{edf.filename}"
puts "               Signal Average"
edf.signals.each do |signal|
physical_values_average = signal.physical_values.inject(&:+) / signal.physical_values.count
puts "     #{format("%16s", signal.label)} #{physical_values_average.round(2).to_s.colorize(:green)} #{signal.physical_dimension}"
end
end

puts "\nCongrats! You have completed your fourth tutorial!".colorize(:green).on_white
``````

# Breaking down the script

The script loads an EDFs from the NSRR using the `Nsrr::Commands::Download.run` method, described in Tutorial 01.

Next, the script iterates through each EDF in the current folder or subfolders, and loads all the signals into memory using the `load_signals` method. Note that for large EDFs, you may choose to load the signals epoch by epoch using the `load_epoch(epoch_number, epoch_size)` method instead.

``````physical_values_average = signal.physical_values.inject(&:+) / signal.physical_values.count
``````

For each signal in the EDF, the script then computes the average value of the physical values, by summing up all the values, and then dividing by the number of values in the signal.

## Try These

1. Modify the script to compute the minimum and maximum of each signal. Ruby has two array methods `max` and `min` that can be used for this purpose.

2. As noted, this script doesn't handle large EDF files well as the `load_signals` method attempts to load every value of every signal into memory. Modify the script to compute the averages by loading epoch by epoch instead.

If you completed this tutorial, please leave a review and check out the next tutorial in the series:

Tutorial 05 - Counting Apneas in EDF Annotations

## Requirements

This tutorial requires that you have Ruby 2.2 or above installed, preferably Ruby 2.3 or higher.

## Extract

Extract the script to your desktop to a folder of the same name. Open your console (Command Prompt on Windows or Terminal on Mac/Linux) and navigate to your tutorial folder.

MacOS/Linux

``````cd ~/Desktop/tutorial_04
``````

Windows

``````cd %USERPROFILE%\Desktop\tutorial_04
``````

Notes

• `cd` stands for "Change Directory"
• `~`, and `%USERPROFILE%` represents your user home directory

## Installing the required gems.

This script requires you to have the `colorize`, `nsrr`, and `edfize` gems installed. The `colorize` gem is used to color command line output. The `nsrr` gem is used to easily download sets of files from the National Sleep Research Resource (https://sleepdata.org). The `edfize` gem is used to read and write EDF files using Ruby.

``````gem install colorize nsrr edfize --no-document
``````

This command will get you the latest stable release of the `colorize`, `nsrr`, and `edfize` gem from RubyGems.org. The `--no-document` flag specifies to skip the installation of the documentation for the gems.

## Running the script.

In your console and from the tutorial_04 directory, type:

``````ruby tutorial_04.rb
``````

## Questions?

Remember, if you have any questions on this script, please let us know on the NSRR forum here: https://sleepdata.org/forum, or email us at support@sleepdata.org.