##// END OF EJS Templates
Buttons "Import", "Export, "Read" and "Write" added to Configuration View...
Buttons "Import", "Export, "Read" and "Write" added to Configuration View git-svn-id: http://jro-dev.igp.gob.pe/svn/jro_hard/radarsys/trunk/webapp@50 aa17d016-51d5-4e8b-934c-7b2bbb1bbe71

File last commit:

r30:64b312519049
r30:64b312519049
Show More
models.py
75 lines | 3.4 KiB | text/x-python | PythonLexer
from django.db import models
from apps.main.models import Configuration
# Create your models here.
from django.core.validators import MinValueValidator, MaxValueValidator
from django.core.exceptions import ValidationError
MOD_TYPES = (
(0, 'Single Tone'),
(1, 'FSK'),
(2, 'Ramped FSK'),
(3, 'Chirp'),
(4, 'BPSK'),
)
class DDSConfiguration(Configuration):
DDS_NBITS = 48
clock = models.FloatField(verbose_name='Clock Master (MHz)',validators=[MinValueValidator(5), MaxValueValidator(75)], null=True)
multiplier = models.PositiveIntegerField(verbose_name='Multiplier',validators=[MinValueValidator(1), MaxValueValidator(20)], default=4)
frequency = models.DecimalField(verbose_name='Frequency (MHz)', validators=[MinValueValidator(0), MaxValueValidator(150)], max_digits=18, decimal_places=16)
frequency_bin = models.BigIntegerField(verbose_name='Frequency (Binary)',validators=[MinValueValidator(0), MaxValueValidator(2**DDS_NBITS-1)])
phase = models.FloatField(verbose_name='Phase (Degrees)', validators=[MinValueValidator(0), MaxValueValidator(360)], default=0)
# phase_binary = models.PositiveIntegerField(verbose_name='Phase (Binary)',validators=[MinValueValidator(0), MaxValueValidator(2**14-1)])
amplitude_ch_A = models.PositiveIntegerField(verbose_name='Amplitude CH A',validators=[MinValueValidator(0), MaxValueValidator(2**10-1)], blank=True, null=True)
amplitude_ch_B = models.PositiveIntegerField(verbose_name='Amplitude CH B',validators=[MinValueValidator(0), MaxValueValidator(2**10-1)], blank=True, null=True)
modulation = models.PositiveIntegerField(verbose_name='Modulation Type', choices = MOD_TYPES, default = 0)
frequency_mod = models.DecimalField(verbose_name='Mod: Frequency (MHz)', validators=[MinValueValidator(0), MaxValueValidator(150)], max_digits=18, decimal_places=16, blank=True, null=True)
frequency_mod_bin = models.BigIntegerField(verbose_name='Mod: Frequency (Binary)',validators=[MinValueValidator(0), MaxValueValidator(2**DDS_NBITS-1)], blank=True, null=True)
phase_mod = models.FloatField(verbose_name='Mod: Phase (Degrees)', validators=[MinValueValidator(0), MaxValueValidator(360)], blank=True, null=True)
# phase_binary_mod = models.PositiveIntegerField(verbose_name='Phase Mod (Binary)',validators=[MinValueValidator(0), MaxValueValidator(2**14-1)], blank=True, null=True)
def get_nbits(self):
return self.DDS_NBITS
def clean(self):
if self.modulation in [1,2,3]:
if self.frequency_mod is None or self.frequency_mod_bin is None:
raise ValidationError({
'frequency_mod': 'Frequency modulation has to be defined when FSK or Chirp modulation is selected'
})
if self.modulation in [4,]:
if self.phase_mod is None:
raise ValidationError({
'phase_mod': 'Phase modulation has to be defined when BPSK modulation is selected'
})
def verify_frequencies(self):
return True
def freq2binary(self, freq, mclock):
binary = (float(freq)/mclock)*(2**self.DDS_NBITS)
return binary
def binary2freq(self, binary, mclock):
freq = (float(binary)/(2**self.DDS_NBITS))*mclock
return freq
class Meta:
db_table = 'dds_configurations'