| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | #ifndef INCLUDE_SPECTRUMVIS_H
 | 
					
						
							|  |  |  | #define INCLUDE_SPECTRUMVIS_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-02 22:29:04 +02:00
										 |  |  | #include <dsp/basebandsamplesink.h>
 | 
					
						
							| 
									
										
										
										
											2015-10-22 02:27:56 +02:00
										 |  |  | #include <QMutex>
 | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | #include "dsp/fftengine.h"
 | 
					
						
							|  |  |  | #include "fftwindow.h"
 | 
					
						
							|  |  |  | #include "util/export.h"
 | 
					
						
							| 
									
										
										
										
											2015-08-18 02:47:14 +02:00
										 |  |  | #include "util/message.h"
 | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | class GLSpectrum; | 
					
						
							|  |  |  | class MessageQueue; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-02 22:29:04 +02:00
										 |  |  | class SDRANGEL_API SpectrumVis : public BasebandSampleSink { | 
					
						
							| 
									
										
										
										
											2015-08-18 02:47:14 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | public: | 
					
						
							| 
									
										
										
										
											2015-08-30 01:26:51 +02:00
										 |  |  | 	class SDRANGEL_API MsgConfigureSpectrumVis : public Message { | 
					
						
							| 
									
										
										
										
											2015-08-18 02:47:14 +02:00
										 |  |  | 		MESSAGE_CLASS_DECLARATION | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public: | 
					
						
							|  |  |  | 		MsgConfigureSpectrumVis(int fftSize, int overlapPercent, FFTWindow::Function window) : | 
					
						
							|  |  |  | 			Message(), | 
					
						
							|  |  |  | 			m_fftSize(fftSize), | 
					
						
							|  |  |  | 			m_overlapPercent(overlapPercent), | 
					
						
							|  |  |  | 			m_window(window) | 
					
						
							|  |  |  | 		{ } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		int getFFTSize() const { return m_fftSize; } | 
					
						
							|  |  |  | 		int getOverlapPercent() const { return m_overlapPercent; } | 
					
						
							|  |  |  | 		FFTWindow::Function getWindow() const { return m_window; } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	private: | 
					
						
							|  |  |  | 		int m_fftSize; | 
					
						
							|  |  |  | 		int m_overlapPercent; | 
					
						
							|  |  |  | 		FFTWindow::Function m_window; | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 	SpectrumVis(GLSpectrum* glSpectrum = NULL); | 
					
						
							| 
									
										
										
										
											2015-08-14 05:00:28 +02:00
										 |  |  | 	virtual ~SpectrumVis(); | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	void configure(MessageQueue* msgQueue, int fftSize, int overlapPercent, FFTWindow::Function window); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-25 08:24:23 +02:00
										 |  |  | 	virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool positiveOnly); | 
					
						
							|  |  |  | 	void feedTriggered(const SampleVector::const_iterator& triggerPoint, const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool positiveOnly); | 
					
						
							| 
									
										
										
										
											2015-08-14 05:00:28 +02:00
										 |  |  | 	virtual void start(); | 
					
						
							|  |  |  | 	virtual void stop(); | 
					
						
							|  |  |  | 	virtual bool handleMessage(const Message& message); | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | private: | 
					
						
							|  |  |  | 	FFTEngine* m_fft; | 
					
						
							|  |  |  | 	FFTWindow m_window; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	std::vector<Complex> m_fftBuffer; | 
					
						
							|  |  |  | 	std::vector<Real> m_logPowerSpectrum; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-14 05:00:28 +02:00
										 |  |  | 	std::size_t m_fftSize; | 
					
						
							|  |  |  | 	std::size_t m_overlapPercent; | 
					
						
							|  |  |  | 	std::size_t m_overlapSize; | 
					
						
							|  |  |  | 	std::size_t m_refillSize; | 
					
						
							|  |  |  | 	std::size_t m_fftBufferFill; | 
					
						
							| 
									
										
										
										
											2015-07-15 01:19:39 +02:00
										 |  |  | 	bool m_needMoreSamples; | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	GLSpectrum* m_glSpectrum; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-22 02:27:56 +02:00
										 |  |  | 	QMutex m_mutex; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 	void handleConfigure(int fftSize, int overlapPercent, FFTWindow::Function window); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif // INCLUDE_SPECTRUMVIS_H
 |