Генерация амплитудно-импульсной модуляции с использованием синусоидального сигнала и ШИМ-сигнала с использованием Python - PullRequest
0 голосов
/ 03 декабря 2018

Я использую приведенные ниже коды для генерации сигнала импульсной амплитудной модуляции с использованием логической операции между синусоидальным сигналом и сигналом широтно-импульсной модуляции (ШИМ). Я использую метод векторизации, чтобы получить нулевые значения, где ШИМсигнал низкий (ноль или ложь) и синусоида, где значения ШИМ высокие (истина или единица).Пожалуйста, обратитесь к приведенному ниже снимку экрана для получения необходимого результата. В дополнение к этому, как вы автоматизируете генерацию PAM-волны, когда я сталкиваюсь с проблемой с интервалом значений x?

        import numpy as np
        import matplotlib.pyplot as plt
        from pylab import *

        percent=50.0
        TimePeriod=10.0 #Frozen Value Do not change
        Cycles=10 #Frozen Value Do not change
        dt=0.01 #Frozen Value Do not change

        t=np.arange(0,Cycles*TimePeriod,dt); 
        pwm= t%TimePeriod<TimePeriod*percent/100

        x=np.linspace(-10,10,10000) #Frozen Value Do not change
        y=(np.sin(x))

        y[(pwm =='False')] = 0      #Vectorisation for zero values
        y[(pwm =='True')] = (y-pwm) # #Vectorisation for sine wave
        plt.plot(t,y)

        plt.ylim([-3,3])
        plt.grid()
        plt.show() 

enter image description here

1 Ответ

0 голосов
/ 03 декабря 2018

При удалении линии y[(pwm =='True')] = (y-pwm) (которую я не понимаю) и не сравнивании со строками, вы получите следующее, что очень похоже на нужный график.

import numpy as np
import matplotlib.pyplot as plt

percent=40.0
TimePeriod=10.0
Cycles=30
dt=0.01

t=np.arange(0,Cycles*TimePeriod,dt); 
pwm= (t%TimePeriod) < (TimePeriod*percent/100)

x=np.linspace(-10,10,len(pwm))
y=(np.sin(x))

y[pwm == 0] = 0

plt.plot(t,y)

plt.ylim([-3,3])
plt.grid()
plt.show() 

enter image description here

...