Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лаба 3 / lab3

.py
Скачиваний:
1
Добавлен:
30.05.2025
Размер:
2.12 Кб
Скачать
import 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)


Соседние файлы в папке Лаба 3