我有一个说“你好”的人的4秒音频样本,我设法加载wav文件并在时间振幅谱中显示它,我的下一步是计算这个声音的am(振幅调制),我设法在我创建的正弦波上做,但在实际声音上做显然是不同的。
我得到了意想不到的结果,我期待着一个cos形状的振幅随声音的变化而变化,但我得到的是大致相同的声音!
这是我的全部代码:
def generateSignalAM(t,data):
TWO_PI = 2 * np.pi
fc = 100
ac = 0.5
carrier_wave = np.cos(t * fc * TWO_PI)
am = carrier_wave * (1 + data/ac)
plt.plot(t,am)
plt.plot(time,data)
plt.xlabel("Time(s)")
plt.ylabel("Amplitude")
plt.legend(['AM Signal', 'Original Signal'])
plt.show()
return am
samplerate, data = scipy.io.wavfile.read("hello.wav")
duration = len(data)/samplerate
time = np.arange(0,duration,1/samplerate) #time vector
generateSignalAM(time,data)
以下是输出:
在@the photon之后,我将代码更改为:
def generateSignalAM(t,data):
#sample rate is 44100 Hz
TWO_PI = 2 * np.pi
fc = 10000
ac = 0.00005
carrier_wave = np.cos(t * fc * TWO_PI)
am = carrier_wave * (1 + data/ac)
plt.plot(t,am)
#plt.plot(time,data)
plt.xlabel("Time(s)")
plt.ylabel("Amplitude")
#plt.legend(['AM Signal', 'Original Signal'])
plt.show()
return am
并得到如下结果:
2条答案
按热度按时间n9vozmp41#
你严重地过度调制了你的信号。如果你想在调幅信号上看到一个好的包络,你需要一个小于1的调制深度。有关过调制的解释,请参阅电气工程stackexchange上的这个答案。
简单地说,如果你的调幅信号是
(1 - m(t)) cos( fc t )
哪里m(t)
信息是否为信号,以及cos( fc t )
是载体,你想要的是m(t)
在每个时间点少于一个。在您的示例中
m(t)
达到近5000(输入信号接近-10000,按0.5缩放)。您可以调整的值
ac
在代码中,将消息信号缩放为小于1的振幅。(需要小于0.0001左右的值)作为第二个问题,人声的频率范围通常在10-8000 hz的范围内(对于可理解的语音,需要更有限的范围),并且您正在将该信号调制到100 hz的载波上。当调幅信号的正负频率图像重叠时,这将导致混叠。尝试将载波频率增加到至少10 khz。
使用更高的载波频率,您可能还必须增加采样率,以使绘图看起来更逼真。您还需要在消息信号的几个周期内放大绘图,以使am信号按预期显示。
zynd9foi2#
据我所知,am需要将信号编码为位(0和1)。。。。如果你所说的调幅在广播中是调幅/调频。将信号转换为位后,使用振幅调制将位传输到另一个电台,例如,位1的振幅为100,位0的振幅为50。