用matlab1、 在AWGN信道下,生成长度为N的十六进制随机序列(N=100000),符号速率为10000Bd,采样率为400KHz,载波频率为100 KHz,比特信噪比为12dB,调制方式为16QAM,格雷码,根升余弦脉冲成形,滚降系数为0.5。绘制接收端星座图;若比特信噪比为0~16dB,步进为2dB,绘制误码率统计曲线和理论性能曲线。
时间: 2024-03-02 08:51:47 浏览: 16
好的,我会根据你的要求进行处理和回答。首先,我们需要生成符合要求的随机序列。可以使用Matlab中的randi函数生成0~15之间的随机整数,再转换为十六进制形式。代码如下:
```matlab
N = 100000; % 序列长度
sps = 4; % 每个符号对应的采样点数
fc = 100000; % 载波频率
Rs = 10000; % 符号速率
M = 16; % 调制阶数
SNR = 12; % 比特信噪比
rolloff = 0.5; % 滚降系数
span = 6; % 半个滤波器长度
EbN0 = 0:2:16; % 比特信噪比范围
hMod = modem.qammod('M', M, 'Gray', true); % 创建QAM调制器
hDemod = modem.qamdemod(hMod); % 创建QAM解调器
data = randi([0 15], N, 1); % 生成随机序列
data_hex = dec2hex(data); % 转换为十六进制形式
```
接下来,我们需要对随机序列进行调制。这里采用16QAM调制方式,通过qammod函数实现。同时,我们还需要进行根升余弦脉冲成形,可以使用rcosdesign函数生成滚降系数为0.5的根升余弦滤波器系数。代码如下:
```matlab
data_mod = qammod(data, M, 'Gray', true); % 16QAM调制
hRc = rcosdesign(rolloff, span, sps); % 创建根升余弦滤波器
tx_signal = upfirdn(data_mod, hRc, sps); % 过滤并进行采样
t = (0:length(tx_signal)-1)/Rs; % 生成时间序列
carrier = cos(2*pi*fc*t); % 生成载波信号
tx_signal = tx_signal .* carrier.'; % 将信号加上载波
```
接下来,我们需要在AWGN信道下进行模拟,并在接收端进行解调。可以使用awgn函数添加高斯白噪声,同时利用qamdemod函数进行解调。代码如下:
```matlab
rx_signal = awgn(tx_signal, SNR, 'measured'); % 添加高斯白噪声
rx_signal = rx_signal .* carrier.'; % 与载波信号相乘
rx_signal = conv(rx_signal, hRc); % 进行匹配滤波
rx_signal = rx_signal(span*sps+1:end-span*sps); % 去掉滤波器延迟
data_demod = qamdemod(rx_signal, M, 'Gray', true); % 进行16QAM解调
```
最后,我们可以绘制接收端星座图来观察解调效果。可以使用scatter函数绘制。代码如下:
```matlab
figure;
scatterplot(data_demod); % 绘制星座图
title('接收端星座图');
```
接下来,我们可以绘制误码率统计曲线和理论性能曲线。可以使用berawgn函数计算理论误码率,并使用berfit函数进行拟合。同时,可以使用error_rate函数计算实际误码率。代码如下:
```matlab
theory_ber = berawgn(EbN0, 'qam', M); % 计算理论误码率
[~, ~, theory_ber_fit] = berfit(EbN0, theory_ber); % 进行拟合
sim_ber = error_rate(data, data_demod); % 计算实际误码率
figure;
semilogy(EbN0, theory_ber, 'bo-', EbN0, theory_ber_fit, 'r--', EbN0, sim_ber, 'gx-');
grid on;
xlabel('比特信噪比(dB)');
ylabel('误码率');
legend('理论误码率', '理论误码率拟合', '实际误码率');
title('误码率统计曲线');
```
完整代码如下: