程煜钧 10211004 北京交通大学 无线通信 调制解调作业
时间:2026-01-22
时间:2026-01-22
实验名称: 调制解调实验仿真 姓名学号: 程煜钧(10211004) 班级: 通信1001
调制解调实验仿真报告
Project1:现给出bpsk、qpsk及“书上习题”的调制解调程序,理解各程序,完成以下习题。将程序运行结果及各题目的解答写入word中。
1.用matlab运行书上习题中的“bpskqpsk125.m”
(a)
答:由该m文件可得,其中的判决设置为:
BPSK:if a (zero mean)noise sample is larger than sqrt(Eb) a wrong decsion is made. 如果一个噪声的样值比平均比特能量大的话,那么就会产生错误的判决。
QPSK:if the constellation point angle is within pi/4 ang -pi/4 a corerect decision is made.
如果星座点上的角偏差在pi/4和-pi/4之间的话,判决就正确了。
说明bpsk、qpsk解调判决方法:
(b)
误比特率为1e-2、1e-3及1e-4时的Eb/N0分别是多少?
答:运行该程序,可以得出如下的图像:
由图可知,
当误比特率在1e-2时其Eb/N0=4.3dB 当误比特率在1e-3时其Eb/N0=6.8dB 当误比特率在1e-4时其Eb/N0=8.3dB
(c)从物理意义上说明为什么bpsk、qpsk误比特率曲线是重叠的:
答:QPSK为四元相位调制,而BPSK为二元相位调制。因此,从判决的区域来看BPSK的误码率(误符号率)是必然大于QPSK的。但是从另一个角度看,每一个QPSK的符号相当于是由两个BPSK的符号组合而成(如11是由二进制的两个1组成),最基本的比特的差错性能都是一样的,因此BPSK和QPSK的误比特率是相同的。
(d)当samples减少为100000,10000,1000时观察误比特率曲线的变化,你得出什么结论。
答:当samples=100000,10000,1000时,图像分别为:
(samples=100000时,误差较小)
(samples=10000时,误差已比较明显) (samples=1000时,误差较大)
2.用matlab运行“bpsk.m”、“qpsk.m”
(a)在各程序中标注“注释”处加上注释(英文或中文)
BPSK:
%******************** Data generation ********************************
data1=rand(1,nd)>0.5; % 注释:返回一组行向量,nd个码元
%****************** Attenuation Calculation *****************
code_rate=1; E=1;
sigma=E/sqrt(2*SNR*code_rate); %注释:计算编码后高斯分布随机变量标准差
for i=1:nd
if (data1(i)==0),
data4(i)=-E+Gngauss(sigma); 声干扰,双极性码 else
data4(i)=E+Gngauss(sigma); 声干扰,双极性码
end; end;
%******************** BPSK Demodulation *********************
demodata1=data4 > 0; % 注释: data4中每个元素和0比较比较结果为真(1)和假(0),然后再将这些0,1赋值给demodata1
%******************** Bit Error Rate (BER) ******************
noe2=sum(abs(data1-demodata1)); % 注释:计算误码个数 end
%********************** Output result ***************************
ber(snr_num) = noe/nod %注释:计算误码率,误码除以总传递码数
nod2=length(data1); % 注释:计算总码数 noe=noe+noe2; nod=nod+nod2;
% 注释:传1码时加入高斯分布白噪% 注释:传0码时加入高斯分布白噪
end;
%******************** end of file *************************** QPSK:
ber=zeros(1,length(snr_in_dB)); for snr_num=1:length(snr_in_dB)
SNR=exp(snr_in_dB(snr_num)*log(10)/10); % 注释:计算信噪比
%******************** START CALCULATION ************************************* nloop=100; % Number of simulation loops noe = 0; % Number of error data nod = 0; % Number of transmitted data
for iii=1:nloop
%*************************** Data generation ******************************** data=rand(1,nd*ml)>0.5; % 注释:生成同相分量 data1=2*data-1 % 注释:此为正交分量
%*************************** QPSK Modulation ********************************
[tout]=qpskmod(data1,1,nd,ml);
%**************************** Attenuation Calculation *********************** %**************************** gngauss channel***********************
code_rate=1; E=1/sqrt(2);
sigma=E/sqrt(2*SNR*code_rate); % 注释:计算编码后高斯分布随机变量标准差
for i=1:nd,
[gsrv1,gsrv2]=Gngauss(sigma); tout(i)=tout(i)+gsrv1+j*gsrv2;
%sigma=E/sqrt(2*SNR*code_rate); %n = 1/sqrt(2)*[randn(1,nd) + j*randn(1,nd)]; %sigma.*n %注释:另一种高斯白噪声产生方法 end;
%**************************** QPSK Demodulation *****************************
[demodata]=qpskdemod(tout,1,nd,ml);
demodata1=demodata > 0; %注释:与原始码元对比判决,得到正确的码元数 demodata=demodata1;
%************************** Bit Error Rate (BER) ****************************
noe2=sum(abs(data-demodata)); % 注释:计算错误码元数 end
%********************** Output result *************************** ber(snr_num) = noe/nod; % 注释:计算误码率
nod2=length(data1); % 注释:总码元数 noe=noe+noe2; nod=nod+nod2;
(b)说明加性高斯白噪声的产生方法,请再给出一种加性高斯白噪声的产生方法,并验证其正确性。
原始方法为Gngauss.m
if nargin == 0,
m=0; sgma=1; elseif nargin == 1, sgma=m; m=0; end;
u=rand; % a uniform random variable in (0,1) z=sgma*(sqrt(2*log(1/(1-u)))); % a Rayleigh distributed random variable u=rand; % another uniform random variable in (0,1) gsrv1=m+z*cos(2*pi*u); gsrv2=m+z*sin(2*pi*u);