Untitled

 avatar
unknown
python
3 days ago
2.0 kB
2
Indexable
def compute_features(I, Q, fs=2e6):
    """
    Computes various statistical, spectral, and time-frequency features from I/Q signals.
    fs: Sampling frequency (default 2 MHz for ADS-B)
    """
    features = {}
    
    # Compute amplitude and phase
    amplitude = np.sqrt(I**2 + Q**2)
    phase = np.arctan2(Q, I)
    
    # === 1. Statistical Features ===
    features['mean_I'] = np.mean(I)
    features['mean_Q'] = np.mean(Q)
    features['var_I'] = np.var(I)
    features['var_Q'] = np.var(Q)
    features['skew_I'] = stats.skew(I)
    features['skew_Q'] = stats.skew(Q)
    features['kurt_I'] = stats.kurtosis(I)
    features['kurt_Q'] = stats.kurtosis(Q)
    features['iq_correlation'] = np.corrcoef(I, Q)[0, 1]
    
    # === 2. Amplitude & Phase Features ===
    features['mean_amplitude'] = np.mean(amplitude)
    features['var_amplitude'] = np.var(amplitude)
    features['mean_phase'] = np.mean(phase)
    features['var_phase'] = np.var(phase)
    
    # === 3. Spectral Features (FFT) ===
    fft_I = np.fft.fft(I)
    fft_Q = np.fft.fft(Q)
    freq = np.fft.fftfreq(len(I), d=1/fs)
    
    power_spectrum = np.abs(fft_I)**2 + np.abs(fft_Q)**2
    features['spectral_centroid'] = np.sum(freq * power_spectrum) / np.sum(power_spectrum)
    features['spectral_bandwidth'] = np.sqrt(np.sum(((freq - features['spectral_centroid'])**2) * power_spectrum) / np.sum(power_spectrum))
    
    # === 4. Time-Frequency Representations (Spectrogram) ===
    f, t, Sxx = signal.spectrogram(amplitude, fs=fs, nperseg=256)
    features['spectrogram_mean'] = np.mean(Sxx)
    features['spectrogram_variance'] = np.var(Sxx)

    # === 5. Wavelet Transform Features ===
    coeffs, _ = pywt.cwt(amplitude, np.arange(1, 128), 'morl')
    features['wavelet_energy'] = np.sum(coeffs**2)

    # === 6. MFCCs (Mel Frequency Cepstral Coefficients) ===
    mfccs = librosa.feature.mfcc(y=amplitude, sr=int(fs), n_mfcc=13)
    features['mfcc_mean'] = np.mean(mfccs)
    features['mfcc_var'] = np.var(mfccs)
    
    return features
Editor is loading...
Leave a Comment