Parcourir la source

update decoder

Vyacheslav Vinokurov il y a 3 jours
Parent
commit
4b682a7bb4

+ 43 - 6
spectrometer_service/SpectometerDecodeLib.py

@@ -1,6 +1,8 @@
 import json
 import base64
 import numpy as np
+import scipy.fft as fft
+import matplotlib.pyplot as plt
 
 class DataDecoder:
     def __init__(self, filename):
@@ -26,13 +28,48 @@ class DataDecoder:
     def getDataScaled(self, averaging_num=0, data_num=0, channel_num=0, points=10, range=5.0):
         decodedData = self.getDataDecoded(averaging_num, data_num, channel_num, points)
         return range * decodedData / 32768
+    
+    def getDataRate(self, averaging_num=0, data_num=0):
+        for items in self.structed_data:
+            if(items['averaging_num'] == averaging_num and items['data_num'] == data_num):
+                return items['measurement_rate']
+
+    def getDataSpectrum(self, averaging_num=0, data_num=0, channel_num=0, points=10, range=5.0, zero_fill=0):
+        scaledData = self.getDataScaled(averaging_num, data_num, channel_num, points, range)
+        zerofilledData = np.append(scaledData, np.zeros(zero_fill))
+        rate = self.getDataRate()
+        transferedData = fft.rfft(zerofilledData) * 2 / points
+        freqs = fft.rfftfreq(points+zero_fill, 1/rate)
+        spectrum = np.abs(transferedData)
+        phases = np.angle(transferedData)
+        spect_dict = {'freqs': freqs,
+                     'phases': phases,
+                     'spectrum': spectrum}
+        return spect_dict
+        
+    def getDataPoints(self, averaging_num=0, data_num=0, channel_num=0):
+        for items in self.structed_data:
+            if(items['averaging_num'] == averaging_num and items['data_num'] == data_num):
+                return items['measurement_points'][channel_num]
+
+
+#dec = DataDecoder('saved_new.json')
 
+#print('getRawData(0, 0, 1):')
+#print(dec.getRawData(0, 0, 1)) # ::getRawData(averagingIndex, dataTriggerIndex, channelIndex)
+#print('\n')
 
-#dec = DataDecoder('saved229.json')
-# print(dec.getRawData(0, 0, 1)) # ::getRawData(averagingIndex, dataTriggerIndex, channelIndex)
+#print('getDataDecoded(0, 0, 0, 100):')
+#a = dec.getDataDecoded(0, 0, 0, 100)
+#print(a[0:100]) # ::getDataDecoded(averagingIndex, dataTriggerIndex, channelIndex, count)
+#print('\n')
 
-# a = dec.getDataDecoded(0, 0, 0, 500)
-# print(a[0:100]) # ::getDataDecoded(averagingIndex, dataTriggerIndex, channelIndex, count)
+#print('getDataScaled(0, 1, 1, 100, 5.0):')
+#a = dec.getDataScaled(0, 1, 1, 100, 5.0)
+#print(a[0:100])
+#print('\n')
 
-#a = dec.getDataScaled(0, 1, 1, 500, 5.0)
-#print(a[0:100])
+#print('getDataSpectrum(0, 1, 1, max_points, 5.0, max_points):')
+#points = dec.getDataPoints(0, 1, 1)
+#spect_dict = dec.getDataSpectrum(0, 1, 1, points, 5.0, 10000)
+#print('\n')

BIN
spectrometer_service/mserv00/db.sqlite3


BIN
spectrometer_service/mserv00/spectrometer/__pycache__/serializers.cpython-313.pyc


+ 3 - 1
spectrometer_service/mserv00/spectrometer/serializers.py

@@ -134,10 +134,12 @@ class measurement_data_Serializer(WritableNestedModelSerializer, serializers.Hyp
     #id = serializers.IntegerField()
     channel_data = channel_data_Serializer(read_only=True, many=True)
     measurement_id = serializers.IntegerField(read_only=True, source="measurement.id")
+    measurement_rate = serializers.IntegerField(read_only=True, source="measurement.info.iadc.srate")
+    measurement_points = serializers.JSONField(read_only=True, source="measurement.info.iadc.points")
     #channel_data.id = id_data
     class Meta:
         model = models.measurement_data
-        fields = ['measurement_id', 'data_num', 'averaging_num', 'channel_data']
+        fields = ['measurement_id', 'data_num', 'averaging_num', 'channel_data', 'measurement_rate', 'measurement_points']
 
 class measurement_post_Serializer(WritableNestedModelSerializer, serializers.HyperlinkedModelSerializer):
     #id = serializers.IntegerField()

Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
spectrometer_service/saved_new.json


+ 52 - 0
spectrometer_service/template_post.json

@@ -0,0 +1,52 @@
+{
+    "info": {
+        "infostr": "",
+        "engine": "",
+        "time": null,
+        "iadc": {
+            "device_model": "",
+            "srate": null,
+            "points": null,
+            "n_channels": null,
+            "channel_ranges": null,
+            "n_triggers": null,
+            "averaging": null,
+            "trigger_channel": null,
+            "trig_direction": null,
+            "threshold": null,
+            "auto_measure_time": null,
+            "enabled": false
+        },
+        "isync": {
+            "device_model": "",
+            "file": "",
+            "port": null
+        },
+        "isdr": {
+            "device_model": "",
+            "srate": null,
+            "freq": null,
+            "ampl": false,
+            "gain": null,
+            "file": ""
+        },
+        "igrax": {
+            "device_model": "",
+            "ip": "",
+            "file": "",
+            "enabled": false
+        },
+        "igray": {
+            "device_model": "",
+            "ip": "",
+            "file": "",
+            "enabled": false
+        },
+        "igraz": {
+            "device_model": "",
+            "ip": "",
+            "file": "",
+            "enabled": false
+        }
+    }
+}

Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff