我是初学者。我尝试使用 Python 模拟模拟信号转换为数字(包括按时间采样和按电平量化)。这是我的代码:
import numpy as np
import matplotlib.pyplot as plt
time_of_view = 1.; # s.
analog_time = np.linspace (0, time_of_view, 10e5); # s.
sampling_rate = 20.; # Hz
sampling_period = 1. / sampling_rate; # s
sample_number = time_of_view / sampling_period;
sampling_time = np.linspace (0, time_of_view, sample_number);
carrier_frequency = 9.;
amplitude = 1;
phase = 0;
quantizing_bits = 4;
quantizing_levels = 2 ** quantizing_bits / 2;
quantizing_step = 1. / quantizing_levels;
def analog_signal (time_point):
return amplitude * np.cos (2 * np.pi * carrier_frequency * time_point + phase);
sampling_signal = analog_signal (sampling_time);
quantizing_signal = np.round (sampling_signal / quantizing_step) * quantizing_step;
fig = plt.figure ()
plt.plot (analog_time, analog_signal (analog_time) );
#plt.stem (sampling_time, sampling_signal);
plt.stem (sampling_time, quantizing_signal, linefmt='r-', markerfmt='rs', basefmt='r-');
plt.title("Analog to digital signal conversion")
plt.xlabel("Time")
plt.ylabel("Amplitude")
plt.show()
总的来说,我对此感到满意:如果我使用变量,那么结果对我来说是预期的。除了一件事:根据清单sampling_rate = 20,carrier_frequency = 9因为sampling_rate / carrier_frequency > 2我希望转换成功,但我得到了失真的信号(看图片:输出信号的包络已经清楚地表达了幅度调制)。我的错误在哪里?我的实现是否正确?

如您所见,只有第 9 个 bin 处于活动状态,所有其他 bin 均为零,因此采样中不会发生混叠。FFT 计算的代码(MATLAB)为: