
Добавил:
deadpigeon
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лаба 3 / lab3
.pyimport matplotlib.pyplot as plt
import numpy as np
class DDS:
def __init__(self, phase_acc_width, freq_word_width, phase_width, amp_width):
self.phase_acc_width = phase_acc_width
self.freq_word_width = freq_word_width
self.phase_width = phase_width
self.amp_width = amp_width
self.cur_phase = 0
self.amp = 1
self.phase_offset = 0
self.amp_offset = 0
def generate(self, count):
gen_sin = np.zeros(count)
for i in range(count):
rad_phase = ((self.cur_phase + self.phase_offset) * 2 * np.pi / (1 << self.phase_width))
self.cur_phase = (self.cur_phase + self.freq_word_width) % (1 << self.phase_acc_width)
gen_sin[i] = np.fmod(((np.sin(rad_phase) + self.amp_offset) * self.amp), (1 << self.amp_width))
#gen_sin[i] = ((np.sin(rad_phase) + self.amp_offset) * self.amp)% (1 << self.amp_width)
return gen_sin
def encode(sig,bin_seq,periods_per_bit):
dig_sig = np.repeat(bin_seq, periods_per_bit)
encoded_sig = dig_sig * sig
plt.figure(figsize=(10, 5))
plt.subplot(211)
plt.plot(dig_sig)
plt.subplot(212)
plt.plot(encoded_sig)
plt.show()
return encoded_sig
def decode(encoded_sig,periods_per_bit):
bit_count = len(encoded_sig) // periods_per_bit
decoded_signal = []
for i in range(bit_count):
if np.sum(np.abs(encoded_sig[i * periods_per_bit:i * periods_per_bit + periods_per_bit])) == 0:
decoded_signal.append(0)
else:
decoded_signal.append(1)
return decoded_signal
periods_per_bit = 700
binary_seq = [1,0,1,1,1,1,1,1,0,0,0,1]
count = len(binary_seq) * periods_per_bit
my_dds = DDS(48,2000, 19, 16)
my_sin = my_dds.generate(count)
encoded_signal = encode(my_sin,binary_seq,periods_per_bit)
decoded_signal = decode(encoded_signal,periods_per_bit)
print("Original sequence: ",binary_seq)
print("Decoded sequence: ",decoded_signal)
print(decoded_signal == binary_seq)