Skip to content

Commit d5f553d

Browse files
committed
add fft frequency transformation for data where the sampling rate must be at least twice the signal bandwidth
1 parent 3e232aa commit d5f553d

File tree

4 files changed

+74
-0
lines changed

4 files changed

+74
-0
lines changed

sigpro/basic_primitives.py

+7
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,13 @@ class FFTFreq(primitive.FrequencyTransformation):
3434

3535
def __init__(self):
3636
super().__init__("sigpro.transformations.frequency.fftfreq.fft_freq")
37+
38+
39+
class FFTFreqAllBand(primitive.FrequencyTransformation):
40+
"""FFT Freq primitive class."""
41+
42+
def __init__(self):
43+
super().__init__("sigpro.transformations.frequency.fftfreq.fft_freq_allband")
3744

3845

3946
class FFTReal(primitive.FrequencyTransformation):
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
{
2+
"name": "sigpro.transformations.frequency.fftfreq.fft_freq_allband",
3+
"primitive": "sigpro.transformations.frequency.fftfreq.fft_freq_allband",
4+
"classifiers": {
5+
"type": "transformation",
6+
"subtype": "frequency"
7+
},
8+
"produce": {
9+
"args": [
10+
{
11+
"name": "amplitude_values",
12+
"type": "numpy.ndarray"
13+
},
14+
{
15+
"name": "sampling_frequency",
16+
"type": "float"
17+
}
18+
],
19+
"output": [
20+
{
21+
"name": "amplitude_values",
22+
"type": "numpy.ndarray"
23+
},
24+
{
25+
"name": "frequency_values",
26+
"type": "numpy.ndarray"
27+
}
28+
]
29+
}
30+
}

sigpro/transformations/frequency/fftfreq.py

+18
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,21 @@ def fft_freq(amplitude_values, sampling_frequency):
1919
frequency_values = np.fft.fftfreq(len(amplitude_values), 1 / sampling_frequency)
2020

2121
return np.array(amplitude_values), np.array(frequency_values)
22+
23+
def fft_freq_allband(amplitude_values, sampling_frequency):
24+
"""Compute the Frequency having FFT values.
25+
26+
Args:
27+
amplitude_values (np.ndarray):
28+
A numpy array with the fft values.
29+
sampling_frequency (int or float):
30+
Sampling frequency value passed in Hz.
31+
Returns:
32+
tuple:
33+
* `amplitude_values (numpy.ndarray)`
34+
* `frequency_values (numpy.ndarray)`
35+
"""
36+
37+
frequency_values = np.arange(0, len(amplitude_values)) * sampling_frequency
38+
39+
return np.array(amplitude_values), np.array(frequency_values)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
"""Tests for sigpro.transformations.frequency module."""
2+
import numpy as np
3+
from sigpro.transformations.frequency import fft_freq_allband
4+
5+
6+
7+
def test_fft_freq_allband():
8+
# setup
9+
amplitude_values = [1.5, -0.5, 2.0, 0.5, -1.0]
10+
sampling_frequency = 2 # in Hz
11+
12+
# run
13+
amplitude_result, frequency_result = fft_freq_allband(amplitude_values, sampling_frequency)
14+
15+
# assert
16+
expected_amplitude_values = np.array([1.5, -0.5, 2.0, 0.5, -1.0])
17+
expected_frequency_values = np.array([0., 2., 4., 6., 8.])
18+
np.testing.assert_array_almost_equal(amplitude_result, expected_amplitude_values)
19+
np.testing.assert_array_almost_equal(frequency_result, expected_frequency_values)

0 commit comments

Comments
 (0)