% 生成随机的QPSK信号和DQPSK信号 M = 4; % QPSK调制 k = log2(M); n = 10000; % 信号长度 data_qpsk = randi([0 M-1],n,k); data_dqpsk =DifferentialEncoder(data_qpsk); % DQPSK调制 % 添加Rayleigh衰落信道 EbNo = 10; % 信噪比 snr = EbNo + 10*log10(k) - 10*log10(2); % 计算SNR h = 1/sqrt(2)*(randn(n,1)+1i*randn(n,1)); % Rayleigh衰落信道 rx_qpsk = h.*qammod(data_qpsk,M).*10^(-snr/20); rx_dqpsk = h.*dpskmod(data_dqpsk,M).*10^(-snr/20); % 计算误码率 [~,ber_qpsk] = biterr(data_qpsk,qamdemod(rx_qpsk,M)); [~,ber_dqpsk] = biterr(data_qpsk,dpskdemod(rx_dqpsk,M)); % 绘制误码率曲线 EbN0Vec = (0:10)'; berTheory = berawgn(EbN0Vec,'psk',M,'nondiff'); semilogy(EbN0Vec,[ber_qpsk ber_dqpsk berTheory]) xlabel('Eb/No (dB)') ylabel('BER') legend('QPSK','DQPSK','理论值')改正上述代码
时间: 2024-03-12 11:44:48 浏览: 112
在第6行,DifferentialEncoder函数应改为dpskmod函数,因为dpskmod函数实现了DQPSK调制;在第13和14行,qammod和dpskmod函数后面应该是data_dqpsk,因为我们要把DQPSK信号传输;在第15和16行,qamdemod和dpskdemod函数后面应该是rx_dqpsk,因为我们要解调DQPSK信号。更改后的代码如下:
```matlab
% 生成随机的QPSK信号和DQPSK信号
M = 4; % QPSK调制
k = log2(M);
n = 10000; % 信号长度
data_qpsk = randi([0 M-1],n,k);
data_dqpsk = dpskmod(data_qpsk,M); % DQPSK调制
% 添加Rayleigh衰落信道
EbNo = 10; % 信噪比
snr = EbNo + 10*log10(k) - 10*log10(2); % 计算SNR
h = 1/sqrt(2)*(randn(n,1)+1i*randn(n,1)); % Rayleigh衰落信道
rx_qpsk = h.*qammod(data_qpsk,M).*10^(-snr/20);
rx_dqpsk = h.*data_dqpsk.*10^(-snr/20);
% 计算误码率
[~,ber_qpsk] = biterr(data_qpsk,qamdemod(rx_qpsk,M));
[~,ber_dqpsk] = biterr(data_dqpsk,dpskdemod(rx_dqpsk,M));
% 绘制误码率曲线
EbN0Vec = (0:10)';
berTheory = berawgn(EbN0Vec,'psk',M,'nondiff');
semilogy(EbN0Vec,[ber_qpsk ber_dqpsk berTheory])
xlabel('Eb/No (dB)')
ylabel('BER')
legend('QPSK','DQPSK','理论值')
```
阅读全文