first working fft

This commit is contained in:
DJ2LS 2021-09-05 11:24:57 +02:00 committed by GitHub
parent 957a204c14
commit 099ad48f10
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -22,6 +22,7 @@ import static
import data_handler
#import Hamlib
import numpy as np
import rigctld
rigctld = rigctld.Rigctld()
@ -458,7 +459,7 @@ class RF():
data_in = self.stream_rx.read(nin, exception_on_overflow=False)
#self.calculate_fft(data_in)
self.calculate_fft(data_in)
data_in = audioop.ratecv(data_in,2,1,static.AUDIO_SAMPLE_RATE_RX, static.MODEM_SAMPLE_RATE, None)
@ -643,70 +644,16 @@ class RF():
def calculate_fft(self, data_in):
data_in_array = np.frombuffer(data_in, dtype=np.int16)
#print(fft_raw)
#fft_raw = fft(data_in_array)
#print(fft_raw)
#fft_raw = data_in.hex()
#print(fft_raw)
#static.FFT = fft_raw.tolist()
#fft_raw = fft_raw.tobytes()
#rate = 48000
#M = 1024
#freqs, times, Sx = signal.spectrogram(data_in_array, fs=rate, window='hanning', nperseg=1024, noverlap=M - 100, detrend=False, scaling='spectrum', return_onesided=True)
#freqs, times, Sx = signal.spectrogram(data_in_array, fs=rate, return_onesided=True, axis=-1)
#print(Sx)
#fft_raw = Sx.tobytes()
#print(fft_raw)
#static.FFT = fft_raw.hex()
#static.FFT = fft_raw
#data_in = np.frombuffer(data_in, dtype=np.int16)
#data = fft(data_in)
#print(data)
#data = getFFT(data_in, 48000, 2048)
#print(data)
#data = abs(data) * 2 / np.sum(8192)
#data = abs(data) // np.sum(1024)
#data = np.frombuffer(data_in, dtype=np.int16)
#data.resize((1,2048))
#data = np.delete(data,0)
#data = data.tobytes()
#print(data)
#static.FFT = data.tolist()
#static.FFT = data.hex()
def getFFT(data, rate, chunk_size, log_scale=False):
data = data * np.hamming(len(data))
try:
FFT = np.abs(np.fft.rfft(data)[1:])
except:
FFT = np.fft.fft(data)
left, right = np.split(np.abs(FFT), 2)
FFT = np.add(left, right[::-1])
#fftx = np.fft.fftfreq(chunk_size, d=1.0/rate)
#fftx = np.split(np.abs(fftx), 2)[0]
if log_scale:
try:
FFT = np.multiply(20, np.log10(FFT))
except Exception as e:
print('Log(FFT) failed: %s' %str(e))
return FFT
# https://gist.github.com/ZWMiller/53232427efc5088007cab6feee7c6e4c
audio_data = np.fromstring(data_in, np.int16)
# Fast Fourier Transform, 10*log10(abs) is to scale it to dB
# and make sure it's not imaginary
dfft = 10.*np.log10(abs(np.fft.rfft(audio_data)))
print(dfft.tolist())
dfftlist = dfft.tolist()
static.FFT = dfftlist[:512]
return dfft