51 lines
2.1 KiB
JavaScript
Executable File
51 lines
2.1 KiB
JavaScript
Executable File
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Create an online spectrum analyser uysing mathutils.py
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
run("mathutils")
|
|
|
|
function plot_spectrum(signal, sampling_freq){
|
|
if (!is_defined(plots)) plots = null
|
|
signal = to_array(signal)
|
|
number_of_samples = signal.length
|
|
time_vector = range(0, number_of_samples, 1).map(function(x) {return x / sampling_freq})
|
|
tranform = fft(signal)
|
|
two_side_spectrum = get_modulus(tranform).map(function(x) {return x / number_of_samples})
|
|
spectrum = two_side_spectrum.slice(1,two_side_spectrum.length/2 + 1).map(function(x) {return x * x})
|
|
spectrum.splice(0,0,two_side_spectrum[0])
|
|
number_of_samples = tranform.length // Signal may have been padded to next power of two
|
|
freq_vector = range(0, spectrum.length , 1).map(function(x) {return x * sampling_freq / parseFloat(number_of_samples)})
|
|
if (plots == null){
|
|
plots = plot([signal,spectrum], ["signal", "spectrum"],[time_vector, freq_vector], undefined, title = "Spectrum")
|
|
plots[0].getAxis(AxisId.Y).setRange(-1.5,2.5)
|
|
plots[1].getAxis(AxisId.Y).setRange(0.0,1.1)
|
|
} else {
|
|
plots[0].getSeries(0).setData(time_vector,signal)
|
|
plots[1].getSeries(0).setData(freq_vector,spectrum)
|
|
}
|
|
return plots
|
|
}
|
|
|
|
function get_sample(samples, sampling_freq){
|
|
return range(0,samples,1).map(function(t) {return Math.sin(200*2*Math.PI*t/sampling_freq) + Math.random()})
|
|
//Simple example sampling a device:
|
|
//set_exec_pars(undefined, undefined, undefined, undefined, persist=false)
|
|
//set_preference(Preference.PLOT_DISABLED, true)
|
|
//set_preference(Preference.TABLE_DISABLED, true)
|
|
//return tscan(ai1, samples, 1/sampling_freq).getReadable(0)
|
|
}
|
|
|
|
plots = null
|
|
samples = 1024
|
|
sampling_freq = 1024.0
|
|
|
|
while(true){
|
|
signal = get_sample(samples, sampling_freq)
|
|
plots = plot_spectrum(signal, sampling_freq, plots)
|
|
sleep(0.1)
|
|
if (plots[0].displayable == false){
|
|
break
|
|
}
|
|
}
|