@@ -8,7 +8,7 @@ This repository provides a Python package for generating, filtering, fitting, an
8
8
9
9
### Overview
10
10
11
- - Generate noisy sine wave signals (or import one )
11
+ - Generate noisy sine wave signals (or import custom signals )
12
12
- Apply Butterworth low-pass filters
13
13
- Fit damped sine waves to filtered signals
14
14
- Perform t-tests between filtered signals and fitted models
@@ -34,7 +34,7 @@ python -m unittest discover -s tests
34
34
```
35
35
36
36
### Example
37
- An example demonstrating generating a signal, applying filters, fitting models, and performing analysis, exists under ` examples ` directory (refer to ` run_example .py` )
37
+ An example demonstrating generating a signal, applying filters, fitting models, and performing analysis, exists in the ` main .py` .
38
38
39
39
> [ !Note]
40
40
> An example plot has been uploaded to the ` plots ` directory.
@@ -49,49 +49,61 @@ from src.signal_processor import SignalProcessor
49
49
50
50
timeVector = np.linspace(0, 1, 1000, endpoint = False) # Or consider importing or modifying your time vector
51
51
52
- processor = SignalProcessor (timeVector)
52
+ generator = SignalGenerator (timeVector)
53
53
54
- processor .generateNoisySignal(frequency = 20, noiseStdDev = 0.6)
54
+ generator .generateNoisySignal(frequency = 20, noiseStdDev = 0.6)
55
55
56
56
# or with defaults:
57
57
processor.generateNoisySignal () # frequency = 10, noiseStdDev = 0.5
58
58
```
59
59
60
- Apply Butterworth low-pass filter
60
+ Apply a Filter ( ` butter ` , ` bessel ` , ` highpass ` ). Default is ` butter ` .
61
61
62
62
``` shell
63
- processor.applyFilter(filterOrder = 2, cutoffFrequency = 0.8)
64
-
65
- # or with defaults:
66
- processor.applyFilter () # filterOrder = 4, cutoffFrequency = 0.2
63
+ from src.signal_filter import SignalFilter
64
+
65
+ filteredInstance = generator.generateNoisySignal () \
66
+ .applyFilter(filterType = ' butter' ,
67
+ filterOrder = 4,
68
+ cutOffFrequency = 0.2,
69
+ bType = ' lowpass' )
70
+ # Or with different filter parameters:
71
+ filteredInstance.setFilterParameters(' bessel' , 5, 0.5, ' highpass' ).applyFilter()
67
72
```
68
73
69
74
Fit a damped sine wave to the filtered signal
70
75
71
- ``` shell
76
+ ``` shell
77
+ from src.signal_fitter import SignalFitter
78
+
72
79
# default sine wave parameters: amplitudeParam = 1.0, frequencyParam = 10.0, phaseParam = 0.0, decayRateParam = 0.1
73
-
74
- processor.fitDampedSineWave ()
75
-
76
- # Or preset with:
77
- processor.setDampedSineWaveParameters(3.0, 12.0, np.pi / 6, 0.3)
78
- processor.setDampedSineWaveBounds([0, 0, -n p.pi/2, 0], [10, 20, np.pi/2, 1])
79
- processor.fitDampedSineWave ()
80
+ fittedInstance = filteredInstance.fitDampedSineWave ()
81
+
82
+ # Or with custom parameters:
83
+ fittedInstance.setDampedSineWaveParameters(3.0, 12.0, np.pi / 6, 0.3)
84
+ fittedInstance.setDampedSineWaveBounds([0, 0, -n p.pi/2, 0], [10, 20, np.pi/2, 1])
85
+ fittedInstance.fitDampedSineWave ()
80
86
```
81
87
82
88
Perform a t-test between the filtered signal and the fitted damped sine wave
83
89
84
90
``` shell
85
- processor.performTTest ()
91
+ from src.statistical_analyzer import StatisticalAnalyzer
92
+
93
+ analyzedInstance = fittedInstance.analyzeFit ()
94
+ tTestResults = analyzedInstance.getTTestResults ()
95
+ print(f" T-test result: statistic={tTestResults[0]}, p-value={tTestResults[1]}" )
86
96
```
87
97
88
98
Plot and save the results (will be saved under ` plots ` directory)
89
99
90
100
``` shell
91
- processor.plotResults ()
92
- ```
93
-
94
- Print the fitting and statistical results
95
- ``` shell
96
- processor.printResults ()
101
+ from src.signal_visualizer import SignalVisualizer
102
+
103
+ visualizer = SignalVisualizer(timeVector, generator.getNoisySignal (),
104
+ filteredInstance.getFilteredSignal (),
105
+ fittedInstance.getFittedSignal ()
106
+ )
107
+ visualizer.plotResults ()
108
+ visualizer.plotInteractiveResults ()
97
109
```
0 commit comments