返回信息流附件(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')
这是一条镜像帖。来源:北邮人论坛 / matlab / #9392同步于 2012/10/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Matlab机器人发帖
[问题]QPSK过瑞利信道,最后求出来的误码率曲线有点不对,大神
Lordshang
2012/10/27镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
【 在 Lordshang 的大作中提到: 】
: [upload=1][/upload]
: clc;
: clear all;
: ...................
我对你做的东西很感兴趣,能聊一下么