QPSK调制与解调在MATLAB平台上的实现

QPSK调制与解调在MATLAB平台上的实现,第1张

程序没有错,不是直接运行的,你需要建立三个.m文件,分别把两个Function和最上面的程序粘贴上去。我修改了一下你只需要建立两个.m文件然后运行第一个文件就可以得到结备辩差果。

SNRindB1=0:2:10

SNRindB2=0:0.1:10

for i=1:length(SNRindB1)

[pb,ps]=cm_sm32(SNRindB1(i))

smld_bit_err_prb(i)=pb

smld_symbol_err_prb(i)=ps

end

for i=1:length(SNRindB2)

SNR=exp(SNRindB2(i)*log(10)/10)

theo_err_prb(i)=(1/2)*erfc(sqrt(2*SNR)/sqrt(2))

end

title('QPSK误码率分析灶斗')

semilogy(SNRindB1,smld_bit_err_prb,'*')

axis([0 10 10e-8 1])

hold on

% semilogy(SNRindB1,smld_symbol_err_prb,'仿皮o')

semilogy(SNRindB2,theo_err_prb)

legend('仿真比特误码率','理论比特误码率')

hold off

另一个.m文件

function [pb,ps]=cm_sm32(SNRindB)

N=10000

E=1

SNR=10^(SNRindB/10)

sgma=sqrt(E/SNR)/2

s00=[1 0]

s01=[0 1]

s11=[-1 0]

s10=[0 -1]

for i=1:N

temp=rand

if (temp<0.25)

dsource1(i)=0

dsource2(i)=0

elseif (temp<0.5)

dsource1(i)=0

dsource2(i)=1

elseif (temp<0.75)

dsource1(i)=1

dsource2(i)=0

else

dsource1(i)=1

dsource2(i)=1

end

end

numofsymbolerror=0

numofbiterror=0

for i=1:N

n=sgma*randn(size(s00))

if((dsource1(i)==0)&(dsource2(i)==0))

r=s00+n

elseif((dsource1(i)==0)&(dsource2(i)==1))

r=s01+n

elseif((dsource1(i)==1)&(dsource2(i)==0))

r=s10+n

else

r=s11+n

end

c00=dot(r,s00)

c01=dot(r,s01)

c10=dot(r,s10)

c11=dot(r,s11)

c_max=max([c00 c01 c10 c11])

if (c00==c_max)

decis1=0decis2=0

elseif(c01==c_max)

decis1=0decis2=1

elseif(c10==c_max)

decis1=1decis2=0

else

decis1=1decis2=1

end

symbolerror=0

if(decis1~=dsource1(i))

numofbiterror=numofbiterror+1

symbolerror=1

end

if(decis2~=dsource2(i))

numofbiterror=numofbiterror+1

symbolerror=1

end

if(symbolerror==1)

numofsymbolerror=numofsymbolerror+1

end

end

ps=numofsymbolerror/N

pb=numofbiterror/(2*N)

记得要保存为cm_sm32.m,然后运行前面那个.m文件就可以了。

clear

close all

Fd=1%消息序列的采样速率

Fs=3*Fd%以调信号的采样速率

M=4%4比特调制,qpsk

SNR=0:12%去信噪比从0到12

SNR1=0:0.1:12%步进为0.1

for n=1:length(SNR)%对每一snr计算一次

Eb_N0=10^(SNR(n)/10)%换算10进制

sgma=sqrt(1/(4*Eb_N0))%噪声信号的平方差开根号

x=randint(10000,1,M)%产生10000个输颂姿入符号

y=dmodce(x,Fd,Fs,'psk',M)%调制

ynoise=y+sqrt(Fs/Fd)*sgma*(randn(length(y),1)+1i*randn(length(y),1))%经过信道加噪燃樱绝声

z=ddemodce(ynoise,Fd,Fs,'psk',M)%解调

[numbers,pm(n)]=symerr(x,z)&求误符号率

end

for m=1:length(SNR1)%此循环用于画出理想的误符号率曲线

Eb_N0=10^(SNR1(m)/10)

pm1(m)=erfc(sqrt(log2(M)*Eb_N0)*sin(pi/M))

end

semilogy(SNR,pm,'-*',SNR1,pm1)%纵坐标取对数

xlabel('信噪比SNR/db')

ylabel('误码率(pe)')

legend('仿真误码率曲线','皮姿理论误码率曲线')

clc

clear

B=[]

for ii=1:5

select=nchoosek(1:5,ii)

[m,n]=size(select)

r_num=repmat([1:m]',n,1)

c_num=select(:)

index=sub2ind([m 5],r_num(:),c_num)

A=ones(m,5)

A(index)=0

B=[BA]

end

%注意上面有一禅链种全部为1的面没有包括,如果包括这一种正好冲袭肆32种

%还有该程序和适合很散轿大数据的排列

%对于几十个没有什么问题


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12558085.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存