mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-11-03 21:20:31 -05:00 
			
		
		
		
	Center audio spectrum.
This commit is contained in:
		
							parent
							
								
									fa780d9134
								
							
						
					
					
						commit
						960700249c
					
				@ -80,7 +80,8 @@ void NFMDemod::feed(SampleVector::const_iterator begin, SampleVector::const_iter
 | 
				
			|||||||
			demod = m_volume * m_lowpass.filter(demod);
 | 
								demod = m_volume * m_lowpass.filter(demod);
 | 
				
			||||||
			sample = demod * 32767;
 | 
								sample = demod * 32767;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (!(framedrop & 3))
 | 
								// Display audio spectrum to 12kHz
 | 
				
			||||||
 | 
								if (!(framedrop & 1))
 | 
				
			||||||
				m_sampleBuffer.push_back(Sample(sample, sample));
 | 
									m_sampleBuffer.push_back(Sample(sample, sample));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if(m_squelchState > 0)
 | 
								if(m_squelchState > 0)
 | 
				
			||||||
 | 
				
			|||||||
@ -163,7 +163,7 @@ NFMDemodGUI::NFMDemodGUI(PluginAPI* pluginAPI, QWidget* parent) :
 | 
				
			|||||||
	m_pluginAPI->addAudioSource(m_audioFifo);
 | 
						m_pluginAPI->addAudioSource(m_audioFifo);
 | 
				
			||||||
	m_pluginAPI->addSampleSink(m_threadedSampleSink);
 | 
						m_pluginAPI->addSampleSink(m_threadedSampleSink);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ui->glSpectrum->setCenterFrequency(0);
 | 
						ui->glSpectrum->setCenterFrequency(6000);
 | 
				
			||||||
	ui->glSpectrum->setSampleRate(12000);
 | 
						ui->glSpectrum->setSampleRate(12000);
 | 
				
			||||||
	ui->glSpectrum->setDisplayWaterfall(true);
 | 
						ui->glSpectrum->setDisplayWaterfall(true);
 | 
				
			||||||
	ui->glSpectrum->setDisplayMaxHold(true);
 | 
						ui->glSpectrum->setDisplayMaxHold(true);
 | 
				
			||||||
 | 
				
			|||||||
@ -137,11 +137,10 @@ SSBDemodGUI::SSBDemodGUI(PluginAPI* pluginAPI, QWidget* parent) :
 | 
				
			|||||||
	m_pluginAPI->addAudioSource(m_audioFifo);
 | 
						m_pluginAPI->addAudioSource(m_audioFifo);
 | 
				
			||||||
	m_pluginAPI->addSampleSink(m_threadedSampleSink);
 | 
						m_pluginAPI->addSampleSink(m_threadedSampleSink);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ui->glSpectrum->setCenterFrequency(0);
 | 
						ui->glSpectrum->setCenterFrequency(3000);
 | 
				
			||||||
	ui->glSpectrum->setSampleRate(12000);
 | 
						ui->glSpectrum->setSampleRate(6000);
 | 
				
			||||||
	ui->glSpectrum->setDisplayWaterfall(true);
 | 
						ui->glSpectrum->setDisplayWaterfall(true);
 | 
				
			||||||
	ui->glSpectrum->setDisplayMaxHold(true);
 | 
						ui->glSpectrum->setDisplayMaxHold(true);
 | 
				
			||||||
	m_spectrumVis->configure(m_threadedSampleSink->getMessageQueue(), 64, 10, FFTWindow::BlackmanHarris);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	m_channelMarker = new ChannelMarker(this);
 | 
						m_channelMarker = new ChannelMarker(this);
 | 
				
			||||||
	m_channelMarker->setColor(Qt::red);
 | 
						m_channelMarker->setColor(Qt::red);
 | 
				
			||||||
 | 
				
			|||||||
@ -60,19 +60,30 @@ void SpectrumVis::feed(SampleVector::const_iterator begin, SampleVector::const_i
 | 
				
			|||||||
			Real ofs = 20.0f * log10f(1.0f / m_fftSize);
 | 
								Real ofs = 20.0f * log10f(1.0f / m_fftSize);
 | 
				
			||||||
			Real mult = (10.0f / log2f(10.0f));
 | 
								Real mult = (10.0f / log2f(10.0f));
 | 
				
			||||||
			const Complex* fftOut = m_fft->out();
 | 
								const Complex* fftOut = m_fft->out();
 | 
				
			||||||
			size_t spectrumStart = 0;
 | 
								Complex c;
 | 
				
			||||||
 | 
								Real v;
 | 
				
			||||||
 | 
								size_t halfSize = m_fftSize / 2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if ( positiveOnly ) {
 | 
								if ( positiveOnly ) {
 | 
				
			||||||
				Real logZero = ofs + mult * log2f( 0 );
 | 
									for(size_t i = 0; i < halfSize; i++) {
 | 
				
			||||||
				for(size_t i = 0; i < m_fftSize / 2; i++)
 | 
										c = fftOut[i];
 | 
				
			||||||
					m_logPowerSpectrum[i] = logZero;
 | 
										v = c.real() * c.real() + c.imag() * c.imag();
 | 
				
			||||||
				spectrumStart = m_fftSize / 2;
 | 
										v = mult * log2f(v) + ofs;
 | 
				
			||||||
 | 
										m_logPowerSpectrum[i * 2] = v;
 | 
				
			||||||
 | 
										m_logPowerSpectrum[i * 2 + 1] = v;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			for(size_t i = spectrumStart; i < m_fftSize; i++) {
 | 
								} else {
 | 
				
			||||||
				Complex c = fftOut[((i + (m_fftSize >> 1)) & (m_fftSize - 1))];
 | 
									for(size_t i = 0; i < halfSize; i++) {
 | 
				
			||||||
				Real v = c.real() * c.real() + c.imag() * c.imag();
 | 
										c = fftOut[i + halfSize];
 | 
				
			||||||
 | 
										v = c.real() * c.real() + c.imag() * c.imag();
 | 
				
			||||||
					v = mult * log2f(v) + ofs;
 | 
										v = mult * log2f(v) + ofs;
 | 
				
			||||||
					m_logPowerSpectrum[i] = v;
 | 
										m_logPowerSpectrum[i] = v;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
										c = fftOut[i];
 | 
				
			||||||
 | 
										v = c.real() * c.real() + c.imag() * c.imag();
 | 
				
			||||||
 | 
										v = mult * log2f(v) + ofs;
 | 
				
			||||||
 | 
										m_logPowerSpectrum[i + halfSize] = v;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// send new data to visualisation
 | 
								// send new data to visualisation
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user