马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
function = qpsk(d,fb,fc,Ac,fstart,fend);
%文件名: qpsk.m
%绘制QPSK的波形图和频谱图.
%d是产生的随机信号,例如 [1 1 0 0 1 0 0 1 1 1].
%fb 为数据传输速率.
%fc 为载波频率.
%Ac 为载波振幅.
%fstart 频谱图的初始频率.
%fend = 频谱图的最终频率.
fb=500;
fc=1000;
Ac=1;
fstart=0;
fend=4000;
d=randint(1,10,2); %随机信号 1行10列
y = awgn(d,1000) ;
N=size(y,2); %N为输入数据比特的数目.
if rem(N,2) == 1 %若余数为1
N=N+1
d(N)=0
end
N2=N/2;
B=32; %M为每比特持续数目.
tb=1/fb;tc=1/fc;
Nc=floor(B*tc/tb); %Nc为每个载波周期的抽样数目.
step=tb/B; %step为抽样间隔 .
%****************************创建二进制波形和调制图形*****************************
for j = 1:N
if d(j) == 1
for i = 1:B
m((j-1)*B+i)=1;
end
else
for i = 1:B
m((j-1)*B+i)=-1;
end
end
end
for j = 1:N2 %N2=N/2
if d(j*2-1) == 1
for i = 1:2*B
mi((j-1)*2*B+i)=1; %二进制i信道
si((j-1)*2*B+i)=Ac*cos(2*pi*(i-1)/Nc);%调制i信道
end
else
for i = 1:2*B
mi((j-1)*2*B+i)=-1; %二进制i信道
si((j-1)*2*B+i)=Ac*cos(2*pi*(i-1)/Nc+pi);%调制i信道
end
end
if d(j*2) == 1
for i = 1:2*B
mq((j-1)*2*B+i)=1; %二进制q信道
sq((j-1)*2*B+i)=Ac*sin(2*pi*(i-1)/Nc);%调制q信道
end
else
for i = 1:2*B
mq((j-1)*2*B+i)=-1; %二进制q信道
sq((j-1)*2*B+i)=Ac*sin(2*pi*(i-1)/Nc+pi);%调制q信道
end
end
end
for k=1:B*N %M为每比特持续数目,N为输入数据比特的数目.k为持续时间
t(k)=(k-1)*step;%step为抽样间隔,t为总时间
s(k)=si(k)+sq(k);%s为调制信号
end
figure
%二进制波形
subplot(3,1,1)
plot(t,m)
axis([0,0.02,-0.2,1.2])
xlabel('Time')
ylabel('Amplitude')
title('Input Waveform')
%二进制I信道波形
subplot(3,1,2)
plot(t,mi)
axis([0,0.02,-0.2,1.2])
xlabel('Time')
ylabel('Amplitude')
title('I Channel Waveform')
%二进制Q信道波形
subplot(3,1,3)
plot(t,mq)
axis([0,0.02,-0.2,1.2])
xlabel('Time')
ylabel('Amplitude')
title('Q Channel Waveform')
figure
%I信道调制波形
subplot(3,1,1)
plot(t,si)
xlabel('Time')
ylabel('Amplitude')
title('I Channel Modulated Waveform')
%Q信道调制波形
subplot(3,1,2)
plot(t,sq)
xlabel('Time')
ylabel('Amplitude')
title('Q Channel Modulated Waveform')
%调制波形
subplot(3,1,3)
plot(t,s)
xlabel('Time')
ylabel('Amplitude')
title('QPSK Waveform')
%*****************************Spectrum of QPSK 输出频谱图 线性和分贝********************************
M1=64; %M1每个主瓣的点的数目 = number of points per lobe.
fstep=fb/M1; %fstep为抽样间隔 = freq. step.
Nf=floor((fend-fstart)/fstep); %Nf为计算之后的频率点的总数目= total number of freq. points computed.
for i = 1:Nf
f(i)=(i-1)*fstep+fstart;
if f(i) == fc
S(i)=Ac^2*tb;
else
S(i)=(Ac^2*tb)*(sin(pi*(f(i)-fc)*2*tb)/(pi*(f(i)-fc)*2*tb))^2;
end
end
for i = 1:Nf
dBS(i) = 10*log(S(i));
if dBS(i) < -200 dBS(i)=-200; end
end
figure
subplot(2,1,1)
plot(f,S)
xlabel('Frequency')
ylabel('Magnitude')
title('QPSK Spectrum (Linear)')
subplot(2,1,2)
plot(f,dBS)
xlabel('Frequency')
ylabel('Magnitude')
title('QPSK Spectrum (dB)')%分贝(dB)是表示相对功率或幅度电平的标准单位,换句话说,就是我们用来表示两个
%能量之间的差别的一种表示单位,它不是一个绝对单位。
%例如,电子系统中将电压、电流、功率等物理量的强弱通称为电平,电平的单位通常
%就以分贝表示,即事先取一个电压或电流作为参考值(0dB),用待表示的量与参考值之比
%取对数,再乘以20作为电平的分贝数(功率的电平值改乘10)。
end |