giovedì 8 agosto 2019

Kiss FFT



------------------------------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#include <kiss_fft.h>
#include <tools/kiss_fftr.h>


#define NUM_FFT 256

int main()
{

float samples[NUM_FFT];


// si crea un segnale fittizio
for (int i = 0; i < NUM_FFT; i++) {
    samples[i] = sin(i*0.1);
    // con questo incremento si che i varia da 0 a 25.6 rad
    // ovvero circa 4 volte 2pigreco (ovvero 4 circonferenze)


}

    int isinverse = 1;
    kiss_fft_scalar zero;
    memset(&zero,0,sizeof(zero));
    kiss_fft_cpx fft_in[NUM_FFT];
    kiss_fft_cpx fft_out[NUM_FFT];
    kiss_fft_cpx fft_reconstructed[NUM_FFT];
    kiss_fftr_cfg fft = kiss_fftr_alloc(NUM_FFT ,0 ,0,0);
    kiss_fftr_cfg ifft = kiss_fftr_alloc(NUM_FFT,isinverse,0,0);

// azzera le matrici
for (int i = 0; i < NUM_FFT; i++) {
    fft_in[i].r = zero;
    fft_in[i].i = zero;
    fft_out[i].r = zero;
    fft_out[i].i = zero;
    fft_reconstructed[i].r = zero;
    fft_reconstructed[i].i = zero;
}

//inserisce i campioni nella parte reale della matrice di input
for (int i = 0; i < NUM_FFT; i++) {
     fft_in[i].r = samples[i];
     fft_in[i].i = zero;
     fft_out[i].r = zero;
     fft_out[i].i = zero;
 }

 kiss_fftr(fft, (kiss_fft_scalar*) fft_in, fft_out);
 kiss_fftri(ifft, fft_out, (kiss_fft_scalar*)fft_reconstructed);

// calcolo della potenza
for (int i = 0; i < NUM_FFT/2; i++) {
    samples[i] = sqrt((fft_out[i].i*fft_out[i].i)+(fft_out[i].i*fft_out[i].i))/(NUM_FFT*2);
    printf("%.6f\n\r", samples[i]);

}

    printf("Terminato!\n\r");
    return 0;
}
------------------------------------------------------------------------------------------------


Dato input

Potenza



Segnale ricostruito

martedì 23 luglio 2019

Astronomia luglio 2019



Luna vista con un cannocchiale da bird watching dall'Oasi WWF di Burano (foto da cellulare accoppiato all'oculare)


Congiunzione Luna-Giove


Eclisse lunare (foto da cellulare) del 16 luglio. Loc. Albinia


Video del passaggio ISS del 16 luglio ore 23:09. Loc. Albinia

venerdì 7 giugno 2019

Traiettorie Mandelbrot con GeoGebra

Ho trovato su GeoGebra un visualizzatore delle orbite di Mandelbrot. Non sapevo che le orbite di fuga (o stabilita') dei punti potessero essere cosi' eleganti e simmetriche






Flip Flop per orologi al quarzo

Ho trovato oggi una risposta di quando ero bambino...come funzionano gli orologi al quarzo.

In estrema sintesi viene creato un generatore di onda quadra ed il segnale viene passato ad una cascata di circuiti Flip Flop JK. Per ogni passaggio la frequenza del segnale viene divisa per due



Se si sceglie con astuzia la frequenza del generatore di onda quadra (l'oscillatore al quarzo) di una potenza di due sara' semplice avere dopo alcuni passaggi una frequenza di esattamente 1 Hz. Nello specifico negli orologi al quarzo la frequenza del quarzo e' impostata a 32768 Hz che guarda equivale a 2 elevata alla 15. Se si usano quindi 16 flip flop in sequenza si avra' una frequenza in uscita di 1 Hz

Nel circuito dello schema sui pin J e K si imposta una tensione continua di 5 V. Il pin Q segnato deve essere collegato al segnale del flip flop successivo

Perche' tutto funzione il tempo di delay del flip flop deve essere adeguato alla frequenza che si sta utilizzando come segnale...se il flip flop e' troppo lento a reagire agli impulsi non seguira' il segnale

giovedì 30 maggio 2019

AD7550BD

Pensavo di avere visto tutto ma di sicuro non avrei mai pensato di trovare un integrato su supporto ceramico (e contatti dorati)  in un cestino delle pile esaurite


Nel dettaglio si tratta di un AD7550BD, un convertitore analogico digitale a 13 bit in formato DIP 40

Debugger integrato ESP32S3

Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede  nell'ID USB della porta Jtag. Nel modulo...