clear all nsymbol=100000; %每种信噪比下的发送符号数 M=16; %16-QAM graycode=[0 1 3 2 4 5 7 6 12 13 15 14 8 9 11 10]; %Gray编码规则 EsN0=5:20; %信噪比,Es/N0 snr1=10.^(EsN0/10); %信噪比转换为线性值 msg=randi([0,1],1,nsymbol); %消息数据 msg1=graycode(msg+1); %Gray映射 msgmod=qammod(msg1,M); %基带16-QAM调制 spow=norm(msgmod).^2/nsymbol; %求每个符号的平均功率 for indx=1:length(EsN0) sigma=sqrt(spow/(2*snr1(indx))); %根据符号功率求噪声功率 rx=msgmod+sigma*(randn(1,length(msgmod))+j*randn(1,length(msgmod))); y=qamdemod(rx,M); decmsg=graycode(y+1); [err,ber(indx)]=biterr(msg,decmsg,log2(M)); %误比特率 [err,ser(indx)]=symerr(msg,decmsg); %误符号率 end P4=2*(1-1/sqrt(M))*qfunc(sqrt(3*snr1/(M-1))); ser1=1-(1-P4).^2; %理论误符号率 ber1=1/log2(M)*ser1; %理论误比特率 semilogy(EsN0,ber,'-ko',EsN0,ser,'-k*',EsN0,ser1,EsN0,ber1,'-k.'); title('16-QAM载波调制信号在AWGN信道下的性能') xlabel('Es/N0');ylabel('误比特率和误符号率') legend('误比特率','误符号率','理论误符号率','理论误比特率')将上述程序16QAM改为8QAM,并说明计算理论误符号率和误比特率的公式
时间: 2024-04-27 19:24:35 浏览: 66
将上述程序16QAM改为8QAM,只需要将M=16改为M=8即可,同时修改graycode为8QAM的Gray编码规则。
计算8QAM的理论误符号率和误比特率的公式如下:
- 理论误符号率:$P_s=3/2Q(\sqrt{4E_s/(3(N-1))})-9/8Q^2(\sqrt{4E_s/(3(N-1))})$
- 理论误比特率:$P_b=P_s/log_2(N)$
其中,$Q(x)$为高斯Q函数,$E_s$为每个符号的平均能量,$N$为调制的符号数。
相关问题
将下列代码中的基带8-PSK更换为4-PSK:clear all nsymbol=10000; %每种信噪比下的发送符号数 T=1; %符号周期 fs=100; %每个符号的采样点数 ts=1/fs; %采样时间间隔 t=0:ts:T-ts; %时间向量 fc=10; %载波频率 c=sqrt(2/T)*exp(j*2*pi*fc*t); %载波信号 c1=sqrt(2/T)*cos(2*pi*fc*t); %同相载波 c2=-sqrt(2/T)*sin(2*pi*fc*t); %正交载波 M=8; %8-PSK graycode=[0 1 2 3 6 7 4 5]; %Gray编码规则 EsN0=0:15; %信噪比,Es/N0 snr1=10.^(EsN0/10); %信噪比转换为线性值 msg=randint(1,nsymbol,M); %消息数据 msg1=graycode(msg+1); %Gray映射 msgmod=pskmod(msg1,M).'; %基带8-PSK调制 tx=real(msgmod*c); %载波调制 tx1=reshape(tx.',1,length(msgmod)*length(c)); spow=norm(tx1).^2/nsymbol; %求每个符号的平均功率 for indx=1:length(EsN0) sigma=sqrt(spow/(2*snr1(indx))); %根据符号功率求噪声功率 rx=tx1+sigma*randn(1,length(tx1)); %加入高斯白噪声 rx1=reshape(rx,length(c),length(msgmod)); r1=(c1*rx1)/length(c1); %相关运算 r2=(c2*rx1)/length(c2); r=r1+j*r2; y=pskdemod(r,M); %PSK解调 decmsg=graycode(y+1); [err,ber(indx)]=biterr(msg,decmsg,log2(M)); %误比特率 [err,ser(indx)]=symerr(msg,decmsg); %误符号率 end ser1=2*qfunc(sqrt(2*snr1)*sin(pi/M)); %理论误符号率 ber1=1/log2(M)*ser1; %理论误比特率 semilogy(EsN0,ber,'-ko',EsN0,ser,'-k*',EsN0,ser1,EsN0,ber1,'-k.'); title('8-PSK载波调制信号在AWGN信道下的性能') xlabel('Es/N0');ylabel('误比特率和误符号率') legend('误比特率','误符号率','理论误符号率','理论误比特率')
将基带8-PSK更换为4-PSK,可以按照以下步骤修改代码:
1. 将变量M的值从8改为4,表示4-PSK调制。
2. 将graycode变量的值从[0 1 2 3 6 7 4 5]改为[0 1 3 2],表示4-PSK的Gray编码规则。
3. 将msgmod变量的值从pskmod(msg1,M).'改为pskmod(msg1,M,'gray').'
4. 将相关运算r1和r2的计算方式从c1*rx1和c2*rx1改为c*conj(rx1)和c*imag(rx1),分别表示对载波信号c进行共轭和虚部运算。
修改后的代码如下:
```
clear all
nsymbol=10000; %每种信噪比下的发送符号数
T=1; %符号周期
fs=100; %每个符号的采样点数
ts=1/fs; %采样时间间隔
t=0:ts:T-ts; %时间向量
fc=10; %载波频率
c=sqrt(2/T)*exp(j*2*pi*fc*t); %载波信号
c1=sqrt(2/T)*cos(2*pi*fc*t); %同相载波
c2=-sqrt(2/T)*sin(2*pi*fc*t); %正交载波
M=4; %4-PSK
graycode=[0 1 3 2]; %4-PSK Gray编码规则
EsN0=0:15; %信噪比,Es/N0
snr1=10.^(EsN0/10); %信噪比转换为线性值
msg=randint(1,nsymbol,M); %消息数据
msg1=graycode(msg+1); %Gray映射
msgmod=pskmod(msg1,M,'gray').'; %基带4-PSK调制
tx=real(msgmod*c); %载波调制
tx1=reshape(tx.',1,length(msgmod)*length(c));
spow=norm(tx1).^2/nsymbol; %求每个符号的平均功率
for indx=1:length(EsN0)
sigma=sqrt(spow/(2*snr1(indx))); %根据符号功率求噪声功率
rx=tx1+sigma*randn(1,length(tx1)); %加入高斯白噪声
rx1=reshape(rx,length(c),length(msgmod));
r=c*conj(rx1); %相关运算
y=pskdemod(r,M,'gray'); %PSK解调
decmsg=graycode(y+1);
[err,ber(indx)]=biterr(msg,decmsg,log2(M)); %误比特率
[err,ser(indx)]=symerr(msg,decmsg); %误符号率
end
ser1=qfunc(sqrt(2*snr1)*sin(pi/M)); %理论误符号率
ber1=ser1/log2(M); %理论误比特率
semilogy(EsN0,ber,'-ko',EsN0,ser,'-k*',EsN0,ser1,'-k',EsN0,ber1,'-k.');
title('4-PSK载波调制信号在AWGN信道下的性能')
xlabel('Es/N0');ylabel('误比特率和误符号率')
legend('误比特率','误符号率','理论误符号率','理论误比特率')
```
clear all nsymbol=100000; T=1; fs=100; ts=1/fs; t=0:ts:T-ts; %时间向量 fc=10; %载波频率 c=sqrt(2/T)*cos(2*pi*fc*t); %载波信号 M=4; %8-PAM graycode=[0 1 3 2]; %Gray编码规则 EsN0=0:15; %信噪比,Es/N0 snr1=10.^(EsN0/10); %信噪比转换为线性值 msg=randi(2,1,nsymbol); %消息数据 msg1=graycode(msg+1); %Gray映射 msgmod=pammod(msg1,M).'; %基带4-PAM调制 tx=msgmod*c; %载波调制 tx1=reshape(tx.',1,length(msgmod)*length(c)); spow=norm(tx1).^2/nsymbol; %求每个符号的平均功率 for indx=1:length(EsN0) sigma=sqrt(spow/(2*snr1(indx))); %根据符号功率求噪声功率 ll=length(tx1); rx=tx1+sigma*randn(1,ll); %加入高斯白噪声 rx1=reshape(rx,length(c),length(msgmod)); y=(c*rx1)/length(c); %相关运算 y1=pamdemod(y,M); %PAM解调 decmsg=graycode(y1+1); [err,ber(indx)]=biterr(msg,decmsg,log2(M)); %误比特率 [err,ser(indx)]=symerr(msg,decmsg); %误符号率 end semilogy(EsN0,ber,'-ko',EsN0,ser,'-k*',EsN0,1.5*qfunc(sqrt(0.4*snr1))); title('4-PAM载波调制信号在AWGN信道下的性能') xlabel('Es/N0');ylabel('误比特率和误符号率') legend('误比特率','误符号率','理论误符号率')上述程序怎么改为8PAM,请列出程序和理论误符号率公式
以下是修改后的程序和理论误符号率公式:
```matlab
clear all
nsymbol=100000;
T=1;
fs=100;
ts=1/fs;
t=0:ts:T-ts; %时间向量
fc=10; %载波频率
c=sqrt(2/T)*cos(2*pi*fc*t); %载波信号
M=8; %8-PAM
graycode=[0 1 3 2 6 7 5 4]; %Gray编码规则
EsN0=0:15; %信噪比,Es/N0
snr1=10.^(EsN0/10); %信噪比转换为线性值
msg=randi(2,1,nsymbol); %消息数据
msg1=graycode(msg+1); %Gray映射
msgmod=pammod(msg1,M).'; %基带8-PAM调制
tx=msgmod*c; %载波调制
tx1=reshape(tx.',1,length(msgmod)*length(c));
spow=norm(tx1).^2/nsymbol; %求每个符号的平均功率
for indx=1:length(EsN0)
sigma=sqrt(spow/(3*snr1(indx))); %根据符号功率求噪声功率
ll=length(tx1);
rx=tx1+sigma*randn(1,ll); %加入高斯白噪声
rx1=reshape(rx,length(c),length(msgmod));
y=(c*rx1)/length(c); %相关运算
y1=pamdemod(y,M); %PAM解调
decmsg=graycode(y1+1);
[err,ber(indx)]=biterr(msg,decmsg,log2(M));
%误比特率
[err,ser(indx)]=symerr(msg,decmsg); %误符号率
end
semilogy(EsN0,ber,'-ko',EsN0,ser,'-k*',EsN0,3/7*qfunc(sqrt(0.4/3*snr1)));
title('8-PAM载波调制信号在AWGN信道下的性能')
xlabel('Es/N0');
ylabel('误比特率和误符号率')
legend('误比特率','误符号率','理论误符号率')
```
其中,理论误符号率公式为:
$$P_{s}=\frac{1}{log_2(M)}\sum_{i=0}^{M-1}\sum_{j=0,j\neq i}^{M-1}Q\left(\sqrt{\frac{3}{M^2-1}\frac{d_{ij}^2}{N_0}}\right)$$
其中,$M$为调制阶数,$d_{ij}$为第 $i$ 个符号与第 $j$ 个符号之间的欧几里得距离,$N_0$为单侧带宽为 $B$ 的白噪声功率谱密度。在本程序中,$B=2/T$,因此 $N_0=0.4/3$。$Q(x)$ 为高斯 Q 函数。
阅读全文