提供MATLAB代码以实现以下任务(1)产生信源符号序列:生成40000bit的二进制符号序列,采样率为100kHz,信息速率4Kbps (2)串并转换、星座映射:把(1)的比特序列,转换为16进制符号,并按16QAM调制映射为星座(注意:先表示为10进制数,再利用qammod做星座映射),得到复基带符号。画出发送端的星座图,注意,用scatterplot函数绘制星座图。 (3)脉冲成形:平方根升余弦脉冲成形,滚降系数为0.5; 绘制脉冲成形滤波器的传输函数,标出其带宽。对(2)产生的复基带符号上采样,过脉冲成形滤波器得到复基带信号。绘制复基带信号的功率谱,标出带宽,对比基带信号带宽和符号速率。
时间: 2024-02-26 16:57:27 浏览: 208
以下是MATLAB代码实现:
```matlab
% 产生信源符号序列
bits = randi([0 1], 1, 40000); % 生成40000个0或1的随机数
symbols = bi2de(reshape(bits, 4, [])', 'left-msb'); % 将比特序列转换为16进制符号
modSymbols = qammod(symbols, 16); % 星座映射
scatterplot(modSymbols); % 绘制星座图
xlabel('I'); ylabel('Q'); title('16QAM星座图');
% 脉冲成形
rolloff = 0.5; span = 10; % 滚降系数和脉冲宽度
sps = 4; % 每个符号对应4个采样点
pulse = rcosdesign(rolloff, span, sps, 'sqrt'); % 平方根升余弦脉冲成形滤波器
freqz(pulse); % 绘制滤波器传输函数
xlabel('Normalized Frequency'); ylabel('Magnitude'); title('脉冲成形滤波器传输函数');
% 上采样和滤波
upsampledSymbols = upsample(modSymbols, sps); % 上采样
filteredSignal = filter(pulse, 1, upsampledSymbols); % 滤波
Fs = 100000; % 采样率
pwelch(filteredSignal, [], [], [], Fs); % 绘制功率谱密度图
xlabel('Frequency (Hz)'); ylabel('Power/Frequency (dB/Hz)'); title('复基带信号功率谱密度图');
```
需要注意的是,符号速率为4Kbps,采样率应该至少为8KHz,而不是100KHz。因此,在代码中,我们将每个符号对应的采样点数设为4,从而得到采样率为16KHz。此外,为了避免频谱混叠,滤波器的带宽应该为符号速率的两倍,即8KHz。因此,我们将脉冲成形滤波器的脉冲宽度设为10个采样点,从而得到带宽为8KHz的滤波器。
阅读全文