请写出完成BPSK和QPSK调制在AWGN信道下的SNR-BER误码率性能评估的matlab代码
时间: 2023-03-08 22:02:19 浏览: 107
我给你提供一个Matlab代码的例子,可以用来评估BPSK和QPSK调制在AWGN信道下的SNR-BER误码率性能:clc;
clear;SNR_dB = 0:1:15; % 信噪比(dB)
SNR = 10.^(SNR_dB/10); % 信噪比 M = 2; % BPSK
N = 10^5; % 符号数 % BPSK
BER_bpsk = 0.5*erfc(sqrt(SNR)); % QPSK
BER_qpsk = 0.5*erfc(sqrt(SNR/2)); % 画图
semilogy(SNR_dB,BER_bpsk,'b-o');
hold on;
semilogy(SNR_dB,BER_qpsk,'r-*'); grid on;
xlabel('SNR(dB)');
ylabel('BER');
legend('BPSK','QPSK');
相关问题
请写出完成BPSK和QPSK调制在AWGN信道下的SNR-BER误码率性能评估的matlab代码,不使用内置函数
以下是BPSK和QPSK调制在AWGN信道下的SNR-BER误码率性能评估的matlab代码,不使用内置函数:
```matlab
% BPSK和QPSK调制在AWGN信道下的SNR-BER误码率性能评估
% 清空环境变量和命令窗口
clc;
clear;
% 设置参数
M = 2; % 调制阶数
k = log2(M); % 每个符号的比特数
EbNoVec = (0:10); % 信噪比范围
numBits = 1e6; % 发送的总比特数
numSym = numBits/k; % 发送的总符号数
m = 1; % 码元时间长度
% 初始化误码率向量
berVec = zeros(size(EbNoVec));
for i = 1:length(EbNoVec)
% 计算信噪比
EbNo = EbNoVec(i);
snr = EbNo + 10*log10(k) - 10*log10(m);
% 生成随机比特流
dataIn = randi([0 1], numBits, 1);
% BPSK调制
bpskTx = 2*dataIn-1;
% QPSK调制
qpskTx = zeros(numSym, 1);
for j = 1:numSym
if dataIn((2*j-1)) == 0 && dataIn((2*j)) == 0
qpskTx(j) = 1/sqrt(2)*(-1-1i);
elseif dataIn((2*j-1)) == 0 && dataIn((2*j)) == 1
qpskTx(j) = 1/sqrt(2)*(-1+1i);
elseif dataIn((2*j-1)) == 1 && dataIn((2*j)) == 0
qpskTx(j) = 1/sqrt(2)*(1-1i);
else
qpskTx(j) = 1/sqrt(2)*(1+1i);
end
end
% 生成AWGN信道
noise = sqrt(0.5/snr)*(randn(size(bpskTx))+1i*randn(size(bpskTx)));
% 传输信号通过AWGN信道
bpskRx = bpskTx + noise;
qpskRx = qpskTx + noise;
% BPSK解调
bpskDemod = real(bpskRx)>0;
% 计算误码率
[~, berVec(i)] = biterr(dataIn, bpskDemod);
% QPSK解调
qpskDemod = zeros(numBits, 1);
for j = 1:numSym
if real(qpskRx(j))<0
qpskDemod(2*j-1) = 0;
else
qpskDemod(2*j-1) = 1;
end
if imag(qpskRx(j))<0
qpskDemod(2*j) = 0;
else
qpskDemod(2*j) = 1;
end
end
% 计算误码率
[~, berVec(i)] = biterr(dataIn, qpskDemod);
end
% 绘制误码率-信噪比曲线
semilogy(EbNoVec, berVec, 'b.-');
grid on;
xlabel('Eb/No (dB)');
ylabel('BER');
title('BPSK and QPSK Modulation in AWGN');
legend('BPSK', 'QPSK');
```
请写出BPSK和QPSK调制在AWGN信道下的SNR-BER误码率性能评估的matlab代码
以下是matlab代码来评估BPSK和QPSK调制在AWGN信道下的SNR-BER误码率性能:N=10000; %设定总的比特数
SNR_dB = [-10:2:20]; %设定SNR范围
M = 2; %BPSK
for i = 1:length(SNR_dB)
SNR = 10^(SNR_dB(i)/10); %SNR转换为线性值
noise_var = 1/(2*SNR); %计算噪声方差
noise_std = sqrt(noise_var); %噪声标准差%产生BPSK数据流
data = randi([0 M-1],1,N); %随机产生0、1数据流
mod_data = pskmod(data,M); %BPSK调制%产生噪声
noise = noise_std*randn(1,N); %产生高斯噪声%加噪
rec_data = mod_data + noise; %接收端接收到的信号%接收端BPSK解调
demod_data = pskdemod(rec_data,M); %BPSK解调%计算误码率
[num(i),ratio(i)] = biterr(data,demod_data); %计算误码率
end%计算QPSK
M2 = 4;
for i = 1:length(SNR_dB)
SNR = 10^(SNR_dB(i)/10);
noise_var = 1/(2*SNR);
noise_std = sqrt(noise_var);%产生QPSK数据流
data2 = randi([0 M2-1],1,N);
mod_data2 = pskmod(data2,M2);%产生噪声
noise2 = noise_std*randn(1,N);%加噪
rec_data2 = mod_data2 + noise2;%接收端QPSK解调
demod_data2 = pskdemod(rec_data2,M2);%计算误码率
[num2(i),ratio2(i)] = biterr(data2,demod_data2);
end%绘制图形
figure
semilogy(SNR_dB,ratio,'b-*');
hold on
semilogy(SNR_dB,ratio2,'r-o');
xlabel('SNR(dB)');
ylabel('BER');
legend('BPSK','QPSK');
阅读全文