This commit is contained in:
50
script/tutorial/63_OnlineSpectrumAnalyser.js
Executable file
50
script/tutorial/63_OnlineSpectrumAnalyser.js
Executable file
@@ -0,0 +1,50 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// 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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user