(1)产生信源符号序列:生成40000bit的二进制符号序列,采样率为100kHz,信息速率4Kbps (2)串并转换、星座映射:把(1)的比特序列,转换为16进制符号,并按16QAM调制映射为星座(注意:先表示为10进制数,再利用qammod做星座映射),得到复基带符号。画出发送端的星座图,注意,用scatterplot函数绘制星座图。 (3)脉冲成形:平方根升余弦脉冲成形,滚降系数为0.5; 绘制脉冲成形滤波器的传输函数,标出其带宽。对(2)产生的复基带符号上采样,过脉冲成形滤波器得到复基带信号。绘制复基带信号的功率谱,标出带宽,对比基带信号带宽和符号速率。 (4)上变频:做正交调制,载波为10KHz(即,将(3)的基带信号调制到10KHz载波上)。
时间: 2024-04-28 07:25:15 浏览: 10
好的,让我来回答你的问题。
首先,根据你的要求,我可以为你生成一个40000bit的二进制符号序列,采样率为100kHz,信息速率为4Kbps。
代码如下:
```python
import numpy as np
# 生成二进制符号序列
bit_seq = np.random.randint(2, size=40000)
# 按4Kbps采样率进行采样
sample_rate = 100000
symbol_rate = 4000
num_samples_per_symbol = int(sample_rate / symbol_rate)
sampled_seq = np.repeat(bit_seq, num_samples_per_symbol)
print("生成的二进制符号序列为:", bit_seq)
```
接下来,我们将二进制符号序列转换为16进制符号,并进行16QAM调制映射,得到复基带符号,并画出发送端的星座图。
代码如下:
```python
import matplotlib.pyplot as plt
import scipy.signal as signal
# 把二进制符号序列转换为16进制符号
hex_seq = np.zeros((int(len(bit_seq) / 4),), dtype=np.int32)
for i in range(len(hex_seq)):
hex_seq[i] = bit_seq[i*4]*8 + bit_seq[i*4+1]*4 + bit_seq[i*4+2]*2 + bit_seq[i*4+3]
# 利用qammod函数进行星座映射
qam_order = 16
constellation = signal.qammod(hex_seq, qam_order)
# 绘制星座图
plt.figure()
plt.scatter(constellation.real, constellation.imag)
plt.xlabel('Real')
plt.ylabel('Imag')
plt.title('发送端星座图')
plt.show()
```
接下来,我们需要进行脉冲成形,使用平方根升余弦脉冲成形,滚降系数为0.5,并绘制脉冲成形滤波器的传输函数,标出其带宽。然后对复基带符号进行上采样,过脉冲成形滤波器得到复基带信号,并绘制复基带信号的功率谱,标出带宽,对比基带信号带宽和符号速率。
代码如下:
```python
# 平方根升余弦脉冲成形
alpha = 0.5
num_taps = 101
baudrate = symbol_rate
beta = alpha
taps = signal.firrcos(num_taps, baudrate, beta, sample_rate, window='sqrt')
# 绘制脉冲成形滤波器的传输函数
w, h = signal.freqz(taps)
plt.figure()
plt.plot(w / np.pi * sample_rate / 2, abs(h))
plt.xlabel('频率(Hz)')
plt.ylabel('幅度')
plt.title('脉冲成形滤波器传输函数')
plt.show()
# 对复基带符号进行上采样
upsampled_constellation = np.zeros((len(constellation)*num_samples_per_symbol,), dtype=complex)
upsampled_constellation[::num_samples_per_symbol] = constellation
# 过脉冲成形滤波器
tx_signal = signal.lfilter(taps, 1, upsampled_constellation)
# 绘制复基带信号的功率谱
frequencies, psd = signal.periodogram(tx_signal, sample_rate)
plt.figure()
plt.plot(frequencies, 10*np.log10(psd))
plt.xlabel('频率(Hz)')
plt.ylabel('功率谱密度(dB/Hz)')
plt.title('复基带信号功率谱密度')
plt.show()
# 计算复基带信号带宽和符号速率
_, _, _, _, bandwidth = signal.istft(taps, fs=sample_rate)
print("复基带信号带宽为:{:.2f}kHz".format(bandwidth/1000))
print("符号速率为:{}Kbps".format(symbol_rate/1000))
```
最后,我们需要对复基带信号进行正交调制,并将其上变频到10kHz载波上。
代码如下:
```python
# 正交调制
t = np.arange(len(tx_signal)) / sample_rate
i_signal = np.real(tx_signal * np.exp(1j * 2*np.pi*symbol_rate*t))
q_signal = np.imag(tx_signal * np.exp(1j * 2*np.pi*symbol_rate*t))
# 上变频到10kHz载波上
carrier_freq = 10000
tx_signal = i_signal * np.cos(2*np.pi*carrier_freq*t) - q_signal * np.sin(2*np.pi*carrier_freq*t)
```
这就是我对你提出的问题的回答。希望能对你有所帮助。