BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / matlab / #9392同步于 2012/10/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Matlab机器人发帖

[问题]QPSK过瑞利信道,最后求出来的误码率曲线有点不对,大神

Lordshang
2012/10/27镜像同步4 回复
附件(3.6KB) qpsk_raise_cosine.m clc; clear all; N=2^10; sigL=2^3; %每个码元采样点数 sigNum=N/sigL; % 码元个数 sigR=1; %signal transmit rate sigTs=1/sigR; %码元时间间隔 fs=sigL*sigR; %采样速率 dt=sigTs/sigL; %时域采样间隔 df=1/(N*dt); %频域采样间隔 T=sigNum*sigTs; %截短时间 Bs=N*df/2; %带宽 t=linspace(-T/2,T/2,N/2); f=linspace(-Bs,Bs,N/2)+eps; sig=randi([0,1],1,sigNum); %产生随机信号 arg=zeros(1,sigNum/2); transformbit=[0,0]; %-----------------------格雷码映射--------------------- for ii=1:(sigNum/2) transformbit=sig(2*ii-1:2*ii); if all(transformbit==[0 0]); arg(ii)=pi/4; elseif all(transformbit==[1 0]); arg(ii)=3*pi/4; elseif all(transformbit==[1 1]); arg(ii)=5*pi/4; else arg(ii)=7*pi/4; end end %-------------------串并变换------------------ Isig=sqrt(2)*cos(arg); Qsig=sqrt(2)*sin(arg); Isig_spr=zeros(1,N/2); Qsig_spr=zeros(1,N/2); Isig_spr(1:sigL:N/2)=Isig/dt; Qsig_spr(1:sigL:N/2)=Qsig/dt; Isig_fre=fft(Isig_spr); Qsig_fre=fft(Qsig_spr); %-------------- 升余弦滤波器----------------- alpha=0.1; Hcos=zeros(1,N/2); m=find(abs(f)>(1-alpha)/(2*sigTs)&abs(f)<=(1+alpha)/(2*sigTs)); Hcos(m)=sigTs/2*(1+cos(pi*sigTs/alpha*(abs(f(m))-(1-alpha)/(2*sigTs)))); m=find(abs(f)<=(1-alpha)/(2*sigTs)); Hcos(m)=sigTs; Hrcos=sqrt(Hcos); %根升余弦 %------------------冲击成型--------------- Isig_rcos_fre=Isig_fre.*Hrcos; Qsig_rcos_fre=Qsig_fre.*Hrcos; Isig_rcos=ifft(Isig_rcos_fre); Qsig_rcos=ifft(Qsig_rcos_fre); %-----------------QPSK调制---------------- fc=10; a=zeros(1,length(t)); b=zeros(1,length(t)); for j=1:length(t) %N=length(t)为样本数目 a(j)=1/sqrt(2/T)*cos(2*pi*fc*t(j)); b(j)=1/sqrt(2/T)*sin(2*pi*fc*t(j)); end ich=real(Isig_rcos).*a; % I信道调制 qch=real(Qsig_rcos).*b; % Q-信道调制 QPSK_data=ich+qch; % QPSK调制信号 SigNoiR=-2:30; %信噪比单位dB err_bit_rate=zeros(1,length(SigNoiR));%误码率 %------------through rayleighchan function----------- for m=1:length(SigNoiR) chan=rayleighchan(dt,0); %QPSK_data_fre=fft(QPSK_data); %H_Gain=fft(chan.PathGains,length(QPSK_data_fre)); %y=QPSK_data_fre.*H_Gain; %y_chan=ifft(y); y=filter(chan,QPSK_data); QPSK_data_ch=awgn(y,SigNoiR(m)); %QPSK_data_ch=QPSK_data_ch./ifft(H_Gain); I1=QPSK_data_ch.*a; Q1=QPSK_data_ch.*b; I1_rcos=real(ifft(fft(I1).*Hrcos)); Q1_rcos=real(ifft(fft(Q1).*Hrcos)); % I2=zeros(1,sigNum/2); % Q2=zeros(1,sigNum/2); % for k=1:sigNum/2 % I2(k)=sum(I1_rcos((k-1)*sigL+1:k*sigL-1))/sigL; % Q2(k)=sum(Q1_rcos((k-1)*sigL+1:k*sigL-1))/sigL; % end I2=I1_rcos(1:sigL:N/2); Q2=Q1_rcos(1:sigL:N/2); for n=1:sigNum/2 if I2(n)>=0 I2(n)=1; else I2(n)=0; end if Q2(n)>=0 Q2(n)=1; else Q2(n)=0; end end eq=lineareq(8,lms(0.0001)); eq.SigConst=pskmod(0:1,2); I2=equalize(eq,I2,Isig(1:10)); Q2=equalize(eq,Q2,Qsig(1:10)); demo_data=zeros(1,sigNum); demo_data(1:2:(sigNum-1))=I2; demo_data(2:2:sigNum)=Q2; err_bit_rate(m)=sum(abs(demo_data-sig))/sigNum; end figure(1); semilogy(SigNoiR,err_bit_rate,'cd-'); theory_BER=1./(2*(1+10.^(SigNoiR/10))); hold on; semilogy(SigNoiR,theory_BER,'mx-'); grid on; legend('simulation rayleigh','theory rayleigh'); xlabel('SNR(dB)'),ylabel('BER')
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
Lordshang机器人#1 · 2012/10/27
d,
lixiaoyao机器人#2 · 2012/11/22
【 在 Lordshang 的大作中提到: 】 : [upload=1][/upload] : clc; : clear all; : ................... 我对你做的东西很感兴趣,能聊一下么
Lordshang机器人#3 · 2012/11/22
【 在 lixiaoyao 的大作中提到: 】 : 我对你做的东西很感兴趣,能聊一下么 en ,可以
lixiaoyao机器人#4 · 2012/11/22
【 在 Lordshang 的大作中提到: 】 : en ,可以 加我 qq 543124013