Beispiel #1
0
	def _plot_default(self):
		self.data = self._data_default()

		plot = Plot(self.data)

		for ii, s_name in enumerate(self._samples):
			color = COLORS[ii % len(self._samples)]
			plot.plot(('bins',s_name), name=s_name,
					   type='filled_line',
					   edge_color=color,
					   face_color=color,
					   alpha=0.5,
					   bgcolor='white',
					   render_style='hold') # render_style determines whether interpolate

		plot.index = plot._get_or_create_datasource('bins') #set index name manually so range selection works
		plot.index_scale = 'log'
		plot.title = 'Fermi Plot'
		plot.padding = 50
		plot.legend.visible = True

		plot.tools.append(PanTool(plot))
		plot.active_tool = RangeSelection(plot)
		plot.overlays.append(RangeSelectionOverlay(component=plot))
		zoom = ZoomTool(component=plot, tool_mode='box', always_on=False)
		plot.overlays.append(zoom)

		return plot	
Beispiel #2
0
    def _plot_default(self):
        self.data = self._data_default()

        plot = Plot(self.data)

        for ii, s_name in enumerate(self._samples):
            color = COLORS[ii % len(self._samples)]
            plot.plot(
                ("bins", s_name),
                name=s_name,
                type="filled_line",
                edge_color=color,
                face_color=color,
                alpha=0.5,
                bgcolor="white",
                render_style="hold",
            )  # render_style determines whether interpolate

        plot.index = plot._get_or_create_datasource("bins")  # set index name manually so range selection works
        plot.index_scale = "log"
        plot.title = "Fermi Plot"
        plot.padding = 50
        plot.legend.visible = True

        plot.tools.append(PanTool(plot))
        plot.active_tool = RangeSelection(plot)
        plot.overlays.append(RangeSelectionOverlay(component=plot))
        zoom = ZoomTool(component=plot, tool_mode="box", always_on=False)
        plot.overlays.append(zoom)

        return plot
Beispiel #3
0
 def _fft_plot_default(self):
     plot = Plot(self.rms_data)
     plot.index_range.low_setting = 1e3
     plot.index_range.high_setting = 20e3
     plot.value_range.low_setting = 10
     plot.value_range.high_setting = 80
     plot.plot(('frequency', 'psd'))
     plot.index_scale = 'log'
     return plot
Beispiel #4
0
    def update_plots(self, waveforms, results):
        mic_psd = db(psd(waveforms, self.model.fs, 'hanning')).mean(axis=0)
        results['ref_mic_psd'] = mic_psd[1]
        results['exp_mic_psd'] = mic_psd[0]
        results['freq_psd'] = psd_freq(waveforms, self.model.fs)

        result = MicToneCalibrationResult(**results)
        frequency = results['frequency']
        ds = ArrayPlotData(freq_psd=results['freq_psd'],
                           exp_mic_psd=results['exp_mic_psd'],
                           ref_mic_psd=results['ref_mic_psd'],
                           time=results['time'],
                           exp_mic_waveform=results['exp_mic_waveform'],
                           ref_mic_waveform=results['ref_mic_waveform'])

        # Set up the waveform plot
        container = HPlotContainer(bgcolor='white', padding=10)
        plot = Plot(ds)
        plot.plot(('time', 'ref_mic_waveform'), color='black')
        plot.index_range.low_setting = self.model.trim
        plot.index_range.high_setting = 5.0/frequency+self.model.trim
        container.add(plot)
        plot = Plot(ds)
        plot.plot(('time', 'exp_mic_waveform'), color='red')
        plot.index_range.low_setting = self.model.trim
        plot.index_range.high_setting = 5.0/frequency+self.model.trim
        container.add(plot)
        result.waveform_plots = container

        # Set up the spectrum plot
        plot = Plot(ds)
        plot.plot(('freq_psd', 'ref_mic_psd'), color='black')
        plot.plot(('freq_psd', 'exp_mic_psd'), color='red')
        plot.index_scale = 'log'
        plot.title = 'Microphone response'
        plot.padding = 50
        plot.index_range.low_setting = 100
        plot.tools.append(PanTool(plot))
        zoom = ZoomTool(component=plot, tool_mode='box', always_on=False)
        plot.overlays.append(zoom)
        result.spectrum_plots = plot

        # Plot the fundamental (i.e. the tone) and first even/odd harmonics
        harmonic_container = HPlotContainer(resizable='hv', bgcolor='white',
                                            fill_padding=True, padding=10)
        for i in range(3):
            f_harmonic = results['exp_harmonics'][i]['frequency']
            plot = Plot(ds)
            plot.plot(('freq_psd', 'ref_mic_psd'), color='black')
            plot.plot(('freq_psd', 'exp_mic_psd'), color='red')
            plot.index_range.low_setting = f_harmonic-500
            plot.index_range.high_setting = f_harmonic+500
            plot.origin_axis_visible = True
            plot.padding_left = 10
            plot.padding_right = 10
            plot.border_visible = True
            plot.title = 'F{}'.format(i+1)
            harmonic_container.add(plot)
        result.harmonic_plots = harmonic_container

        self.model.tone_data.append(result)

        # Update the master overview
        self.model.measured_freq.append(results['frequency'])
        self.model.measured_spl.append(results['output_spl'])
        self.model.exp_mic_sens.append(results['exp_mic_sens'])
        for mic in ('ref', 'exp'):
            for h in range(3):
                v = results['{}_harmonics'.format(mic)][h]['mic_rms']
                name = 'measured_{}_f{}'.format(mic, h+1)
                getattr(self.model, name).append(v)
            v = results['{}_thd'.format(mic)]
            getattr(self.model, 'measured_{}_thd'.format(mic)).append(v)

        ds = ArrayPlotData(
            frequency=self.model.measured_freq,
            spl=self.model.measured_spl,
            measured_exp_thd=self.model.measured_exp_thd,
            measured_ref_thd=self.model.measured_ref_thd,
            exp_mic_sens=self.model.exp_mic_sens,
        )

        container = VPlotContainer(padding=10, bgcolor='white',
                                   fill_padding=True, resizable='hv')
        plot = Plot(ds)
        plot.plot(('frequency', 'spl'), color='black')
        plot.plot(('frequency', 'spl'), color='black', type='scatter')
        plot.index_scale = 'log'
        plot.title = 'Speaker output (dB SPL)'
        container.add(plot)

        plot = Plot(ds)
        plot.plot(('frequency', 'measured_ref_thd'), color='black')
        plot.plot(('frequency', 'measured_ref_thd'), color='black', type='scatter')
        plot.plot(('frequency', 'measured_exp_thd'), color='red')
        plot.plot(('frequency', 'measured_exp_thd'), color='red', type='scatter')
        plot.index_scale = 'log'
        plot.title = 'Total harmonic distortion (frac)'
        container.add(plot)

        plot = Plot(ds)
        plot.plot(('frequency', 'exp_mic_sens'), color='red')
        plot.plot(('frequency', 'exp_mic_sens'), color='red', type='scatter')
        plot.index_scale = 'log'
        plot.title = 'Experiment mic. sensitivity V (dB re Pa)'
        container.add(plot)

        self.model.spl_plots = container