clc;
clear all;
close all;
%SignalNo=menu('选择信号类型','QPSK','OQPSK');
% switch SignalNo
% case 1
%全局变量
%N=2^12 %宽度,或称为点数
Ts=0.01; %时间分辨率(时间间隔),抽样时间间隔
t=0:Ts:5; %时间坐标s
N=length(t);
fs=1/Ts;
df=fs/(N-1); %df为频率分辨率(频率间隔)
n=-(N-1)/2:(N-1)/2;
f=n*df; %频率坐标
%基带信号
figure
p=[1 0 1 1 0 1 0 0 1 1]; %待传送的编码串,可用randint(1,n)产生信源;若用rand(1,n,M),则范围是1~M-1
d1=[0:0.5:t(end)-0.5]; %每个编码的发送延迟时间
p1=[p,zeros(length(d1)-length(p))]; %在发送串后补零
d=[d1;p1]'; %产生d矩阵
m=pulstran(t-0.25,d,'rectpuls',0.5);
subplot(4,1,1);
plot(t,m)
axis([t(1) t(end) -0.5 1.5])
grid on
title('基带信号p')
%抽取IQ信号 BPSK只映射一路I。OQPSK两个基带符号为一组,映射到一对IQ
pQI=reshape(p,2,5);
pQ=pQI(1,:);
pI=pQI(2,:);
d2=[0:1:t(end)-1];
dQ=[d2;pQ]';
dI=[d2;pI]';
mI=pulstran(t-0.5,dI,'rectpuls',1);
mQ=pulstran(t-0.5,dQ,'rectpuls',1); %有修改
%IQ值映射 “0”映射成-1,“1”映射成1(修改)
I(pI==1)=-1/sqrt(2);
I(pI==0)=1/sqrt(2);
Q(pQ==1)=-1/sqrt(2);
Q(pQ==0)=1/sqrt(2);
dImap=[d2;I]';
dQmap=[d2;Q]';
mImap=pulstran(t-0.5,dImap,'rectpuls',1);
mQmap=pulstran(t-0.5,dQmap,'rectpuls',1); %有修改
subplot(4,1,2)
plot(t,mImap)
axis([t(1) t(end) -1.5 1.5])
grid on
title('QPSK映射后的I路信号')
subplot(4,1,3)
plot(t,mQmap)
axis([t(1) t(end) -1.5 1.5])
grid on
title('QPSK映射后的Q路信号')
%载波信号
fc=10 %载波频率
c1=cos(2*pi*fc*t);
c2=sin(2*pi*fc*t);
%已调信号
s1=mImap.*c1;
s2=mQmap.*c2;
s=s1-s2;
subplot(4,1,4)
plot(t,s)
axis([t(1) t(end) -1.5 1.5])
title('QPSK进入信道的信号s=s1-s2')
text(0.5,1.2,'7*π/4')
text(1.5,1.2,'5*π/4')
text(2.5,1.2,'3*π/4')
text(3.5,1.2,'1*π/4')
text(4.5,1.2,'5*π/4')
grid on
figure
S=fft(s);
S=fftshift(S);
plot(f,abs(S)/N);
title('qpsk频谱');
figure
N1=128;
W=[9.5/50 10.5/50];
bd=FIR1(N1,W,kaiser(N1+1,4));
[h,f1]=freqz(bd,1,N1); %求数字带通滤波器的频率响应
subplot(411);
plot(f1*50/pi,abs(h)); %绘制带通滤波器的幅频响应图
title('带通滤波器的幅频响应图');
xlabel('f/HZ');
ylabel('amplitude');
subplot(412);
sf=filter(bd,1,s);
plot(t,sf); %绘制叠加函数S经过带通滤波器以后的时域图形
title('QPSK经过带通滤波器以后的时域图形');
xlabel('t/s');
ylabel('amplitude');
subplot(413);
extrmaxvalue=sf(find(diff(sign(diff(sf)))==-2)+1);
extrmaxindex=find(diff(sign(diff(sf)))==-2)+1;
extrminvalue=sf(find(diff(sign(diff(sf)))==+2)+1);
extrminindex=find(diff(sign(diff(sf)))==+2)+1;
plot(extrmaxindex/100,extrmaxvalue,extrminindex/100,extrminvalue) ;
title('QPSK经过带通滤波器以后的包络');
axis([0 5 -1 1]);
xlabel('t/s');
ylabel('envelope');
SF=fft(sf);
SF=fftshift(SF);
subplot(414);
plot(f,abs(SF)/N);
title('QPSK经过带通滤波器以后的频域图形');
xlabel('f/HZ');
ylabel('amplitude');
figure
sf_amplifer=sf.*1.5.*tanh(2*t);
SF_amplifer=fft(sf_amplifer);
SF_amplifer=fftshift(SF_amplifer);
plot(f,SF_amplifer);
title('QPSK经过非线性放大后频谱');
% case 2
%全局变量
%N=2^12 %宽度,或称为点数
Ts=0.01; %时间分辨率(时间间隔),抽样时间间隔
t=0:Ts:5; %时间坐标s
N=length(t);
fs=1/Ts;
df=fs/(N-1); %df为频率分辨率(频率间隔)
n=-(N-1)/2:(N-1)/2;
f=n*df; %频率坐标
%基带信号
figure
p=[1 0 1 1 0 1 0 0 1 1]; %待传送的编码串,可用randint(1,n)产生信源;若用rand(1,n,M),则范围是1~M-1
d1=[0:0.5:t(end)-0.5]; %每个编码的发送延迟时间
p1=[p,zeros(length(d1)-length(p))]; %在发送串后补零
d=[d1;p1]'; %产生d矩阵
m=pulstran(t-0.25,d,'rectpuls',0.5);
subplot(4,1,1);
plot(t,m)
axis([t(1) t(end) -0.5 1.5])
grid on
title('基带信号p')
%抽取IQ信号 BPSK只映射一路I。OQPSK两个基带符号为一组,映射到一对IQ
pQI=reshape(p,2,5);
pQ=pQI(1,:);
pI=pQI(2,:);
d2=[0:1:t(end)-1];
dQ=[d2;pQ]';
dI=[d2;pI]';
mI=pulstran(t,dI,'rectpuls',1);
mQ=pulstran(t-0.5,dQ,'rectpuls',1); %有修改
%IQ值映射 “0”映射成-1,“1”映射成1(修改)
I(pI==1)=-1/sqrt(2);
I(pI==0)=1/sqrt(2);
Q(pQ==1)=-1/sqrt(2);
Q(pQ==0)=1/sqrt(2);
dImap=[d2;I]';
dQmap=[d2;Q]';
mImap=pulstran(t,dImap,'rectpuls',1);
mQmap=pulstran(t-0.5,dQmap,'rectpuls',1); %有修改
subplot(4,1,2)
plot(t,mImap)
axis([t(1) t(end) -1.5 1.5])
grid on
title('OQPSK映射后的I路信号')
subplot(4,1,3)
plot(t,mQmap)
axis([t(1) t(end) -1.5 1.5])
grid on
title('OQPSK映射后的Q路信号')
%载波信号
fc=10 %载波频率
c1=cos(2*pi*fc*t);
c2=sin(2*pi*fc*t);
%已调信号
s1=mImap.*c1;
s2=mQmap.*c2;
s=s1-s2;
subplot(4,1,4)
plot(t,s)
axis([t(1) t(end) -1.5 1.5])
title('OQPSK进入信道的信号s=s1-s2')
text(0.25,1.2,'7*π/4')
text(1.25,1.2,'5*π/4')
text(2.25,1.2,'3*π/4')
text(3.25,1.2,'1*π/4')
text(4.25,1.2,'5*π/4')
grid on
figure
S=fft(s);
S=fftshift(S);
plot(f,abs(S)/N);
title('oqpsk频谱');
figure
N1=128;
W=[9/50 11/50];
bd=FIR1(N1,W,kaiser(N1+1,4));
[h,f1]=freqz(bd,1,N1); %求数字带通滤波器的频率响应
subplot(411);
plot(f1*50/pi,abs(h)); %绘制带通滤波器的幅频响应图
title('带通滤波器的幅频响应图');
xlabel('f/HZ');
ylabel('amplitude');
subplot(412);
sf=filter(bd,1,s);
plot(t,sf); %绘制叠加函数S经过带通滤波器以后的时域图形
title('OQPSK经过带通滤