I'm using GRC with a DVB-T tuner Chip.

I would like to know if there is a way to extract the Magnitude and the frequencies from a GT GUI Frequency Sink ?

I have also recorded the signal with a File Sink in order to process the data myself to get the same result but everytime I get something different than the result plot on the QT GUI Frequency Sink.

In the attachments you'll found the recorded signal as a binary file and a Python generated code from GRC corresponding to the display I want to be able either to generate or to extract data from it.

You'll find the code I have develop to process those data below :

Code: Select all

`#!/usr/bin/env python3`

# -*- coding: utf-8 -*-

import matplotlib.pyplot as plt

import numpy as np

import scipy.io

#Variables

sample_rate = 800000.0

FFT_size = 2048

delta_sample = (1.0 / sample_rate)

#print("delta_sample [s]=",delta_sample)

#File Recovery

signal = scipy.fromfile(open("/home/jalibert/Documents/3-GRC/2-Data_Output/Data_Recorded.bin"), dtype=scipy.float32)

#Check the lenght of the sample recorded

length_signal = len(signal)

#Calcul the duration of the sample recorded in [s]

sample_time = length_signal * delta_sample

#Creation of the abscissa axis in a list

t=[]

for index,data in enumerate (signal) :

time = delta_sample * index

t.append(time)

#Display Temporal Signal

#Slicing the sample to reduce the duration of the process

t_slice = t[0:FFT_size]

signal_slice = signal[0:FFT_size]

plt.figure()

plt.plot(t_slice,signal_slice)

plt.title('Temporal Signal Sample 1')

plt.ylabel('Amplitude')

#fft process

signal_fft_slice = np.fft.fft(signal_slice)

freq_slice= np.fft.fftfreq(len(signal_fft_slice))

#Amplitude Calculation (Linear)

signal_fft_slice_magnitude_Lin = np.sqrt(np.square(signal_fft_slice.real)+np.square(signal_fft_slice.imag))

#Amplitude Calculation (dB)

signal_fft_slice_magnitude_dB = 10 * np.log10(signal_fft_slice_magnitude_Lin/1000)

plt.figure()

plt.plot(freq_slice,signal_fft_slice_magnitude_Lin)

plt.title('FFT')

plt.ylabel('Amplitude [Lin]')

plt.figure()

plt.plot(freq_slice,signal_fft_slice_magnitude_dB)

plt.title('FFT')

plt.ylabel('Amplitude [dB]')

#Peack Searching

max_mag = -100

index_f_max = 0

for index, mag in enumerate (signal_fft_slice_magnitude_dB):

if mag > max_mag :

max_mag = mag

index_f_mag = index

print("Peak :")

print("Amplitude Lineaire :",signal_fft_slice_magnitude_Lin[index_f_mag])

print("Amplitude : [dB]",max_mag)

print("Frequence : [Hz]",freq_slice[index_f_mag]*sample_rate)

plt.show()

Edit :

I haven't been able to attach the files I wanted to, due to the format.

If you need this file, I'll gladly send them to your email.

Any help will be really appreciated.

Cordially

J.Alt