Analysis¶
Signal analysis (FFT, THD, SNR)
Advanced analysis tools for waveform data.
FFTResult
dataclass
¶
FFTResult(frequency: ndarray, magnitude: ndarray, phase: ndarray, window: str, sample_rate: float, magnitude_db: bool = True)
Result of FFT analysis.
Attributes:
| Name | Type | Description |
|---|---|---|
frequency |
ndarray
|
Frequency array (Hz) |
magnitude |
ndarray
|
Magnitude array (linear or dB) |
phase |
ndarray
|
Phase array (radians) |
window |
str
|
Window function used |
sample_rate |
float
|
Sample rate (Hz) |
magnitude_db |
bool
|
Whether magnitude is in dB |
get_peak_frequency
¶
Get the peak frequencies.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
num_peaks
|
int
|
Number of peaks to find |
1
|
Returns:
| Type | Description |
|---|---|
list
|
List of (frequency, magnitude) tuples |
Source code in scpi_control/analysis.py
FFTAnalyzer
¶
FFT analyzer for frequency domain analysis of waveforms.
Initialize FFT analyzer.
Source code in scpi_control/analysis.py
compute_fft
¶
compute_fft(waveform, window: str = 'hanning', output_db: bool = True, detrend: bool = True) -> Optional[FFTResult]
Compute FFT of a waveform.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
waveform
|
Input waveform |
required | |
window
|
str
|
Window function name ('rectangular', 'hanning', 'hamming', 'blackman', 'bartlett', 'flattop') |
'hanning'
|
output_db
|
bool
|
If True, output magnitude in dB; otherwise linear |
True
|
detrend
|
bool
|
If True, remove DC component before FFT |
True
|
Returns:
| Type | Description |
|---|---|
Optional[FFTResult]
|
FFTResult or None if error |
Source code in scpi_control/analysis.py
compute_power_spectrum
¶
compute_power_spectrum(waveform, window: str = 'hanning', nperseg: Optional[int] = None) -> Optional[Tuple[np.ndarray, np.ndarray]]
Compute power spectral density using Welch's method.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
waveform
|
Input waveform |
required | |
window
|
str
|
Window function name |
'hanning'
|
nperseg
|
Optional[int]
|
Length of each segment (default: 256) |
None
|
Returns:
| Type | Description |
|---|---|
Optional[Tuple[ndarray, ndarray]]
|
Tuple of (frequencies, power_spectrum) or None if error |
Source code in scpi_control/analysis.py
compute_spectrogram
¶
compute_spectrogram(waveform, window: str = 'hanning', nperseg: Optional[int] = None) -> Optional[Tuple[np.ndarray, np.ndarray, np.ndarray]]
Compute spectrogram (time-frequency representation).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
waveform
|
Input waveform |
required | |
window
|
str
|
Window function name |
'hanning'
|
nperseg
|
Optional[int]
|
Length of each segment (default: 256) |
None
|
Returns:
| Type | Description |
|---|---|
Optional[Tuple[ndarray, ndarray, ndarray]]
|
Tuple of (frequencies, times, spectrogram) or None if error |
Source code in scpi_control/analysis.py
apply_bandpass_filter
¶
Apply bandpass filter to waveform.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
waveform
|
Input waveform |
required | |
lowcut
|
float
|
Low frequency cutoff (Hz) |
required |
highcut
|
float
|
High frequency cutoff (Hz) |
required |
order
|
int
|
Filter order |
5
|
Returns:
| Type | Description |
|---|---|
|
Filtered waveform or None if error |
Source code in scpi_control/analysis.py
apply_lowpass_filter
¶
Apply lowpass filter to waveform.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
waveform
|
Input waveform |
required | |
cutoff
|
float
|
Cutoff frequency (Hz) |
required |
order
|
int
|
Filter order |
5
|
Returns:
| Type | Description |
|---|---|
|
Filtered waveform or None if error |
Source code in scpi_control/analysis.py
apply_highpass_filter
¶
Apply highpass filter to waveform.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
waveform
|
Input waveform |
required | |
cutoff
|
float
|
Cutoff frequency (Hz) |
required |
order
|
int
|
Filter order |
5
|
Returns:
| Type | Description |
|---|---|
|
Filtered waveform or None if error |
Source code in scpi_control/analysis.py
calculate_thd
staticmethod
¶
calculate_thd(fft_result: FFTResult, fundamental_freq: float, num_harmonics: int = 5) -> Optional[float]
Calculate Total Harmonic Distortion (THD).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
fft_result
|
FFTResult
|
FFT result |
required |
fundamental_freq
|
float
|
Fundamental frequency (Hz) |
required |
num_harmonics
|
int
|
Number of harmonics to include |
5
|
Returns:
| Type | Description |
|---|---|
Optional[float]
|
THD in percent or None if error |
Source code in scpi_control/analysis.py
See Also¶
- Waveform - Waveform acquisition and data handling