close all;clear all;
%%
code1=GoldGenerator(1,2046); %%%%I路伪码
code2=GoldGenerator(2,10230); %%%%Q路伪码
fs=250e6;
fc=50e6;
fc1=2.046e6;
fc2=10.23e6;
t=0.001;
len=t*fs;
Hd = fir1(25,0.05);
% freqz(Hd,1,512);
%%
numpercode1=fs/fc1;
numpercode2=fs/fc2;
numpercar=fs/fc;
c1=code1(ceil((1:len)/numpercode1));
c2=code2(ceil((1:len)/numpercode2));
carrier1=cos(2*pi*fc*(1:len)/fs); %%%%%载波初相位为0
carrier2=sin(2*pi*fc*(1:len)/fs);
diag=c1+1j*c2; %%%%%基带信号,基带信号不应该是是I+jQ,而是减
% diag=diag*ratio;
% diag=awgn(diag,50);
diag=lp_filter2(diag); %%%%%%%为什么基带信号经过滤波器就不会产生畸变呢???
figure;plot(diag); %%%%%基带信号经过滤波器后的星座图
title('基带信号经过滤波器后的星座图');
I_sig=real(diag);
Q_sig=imag(diag);
figure;plot(I_sig);
hold on;plot(Q_sig,'r');
title('基带信号经过滤波器后的时域波形');legend('I','Q');
%%
ratio=0.2; %%%%%%%%%%控制输入信号幅度
diag_RF=real(diag.*(carrier1+1j*carrier2)); %%%%%射频信号的实数表达式
diag_RF=ratio*diag_RF;
% diag_RF=diag_RF/sqrt(2); %%%%%%%单位功率
% diag_RF=awgn(diag_RF,28); %%%%%%%%加点噪声
diag_RF=bp_filter2(diag_RF); %%%%%%带通滤波后,会给中频信号带来延时,所以后面的下变频不成功!
%% 带通信号包络怎么求得????
p=4; %%%%%%% p控制包络的平滑度
k=floor(length(diag)/numpercar)/p; %%%%每一个周期搜寻一次最大值
index=zeros(1,k);
goal=abs(diag_RF);
for l=1:k
index(l)=max(diag_RF(((l-1)*numpercar*p+1:l*numpercar*p)));
end
leng=length(goal);
time=linspace(1,k,leng);
ind=interp1(1:length(index),index,time); %%%%%%%基带信号的包络
%%%%%%%%%基带信号在码片跳变点处包络会有明显的跳变,这必须解决!
figure;plot(diag_RF);
hold on;plot(ind,'r');
title('中频信号包络');
ft=abs(fft(xcorr(diag_RF)));
ft=fftshift(ft);
figure;plot(10*log10(ft));
title('中频信号功率谱');
%% 为什么下变频后低通滤波就会出现问题,回去想想,经过带通滤波器后产生一个延时,等效于一个多普勒,所以星座图在旋转
% signal_I=diag_RF.*carrier1;
% signal_I=2*lp_filter2(signal_I); %%%%%%下变频
%
% signal_Q=diag_RF.*carrier2;
% signal_Q=2*lp_filter2(signal_Q); %%%%%%下变频
%
%
% figure;plot(signal_I+1j*signal_Q);
% % hold on;plot(signal_Q,'r');
% title('Signal after filter');
%% 中频信号通过HPA怎么求得输出信号的表达形式????
%%%%%%%%%%%% HPA参数
%%%%%%%%%%%% HPA系数特别重要
a0=2.1587;b0=1.1517;
a1=4.0033;b1=9.104;
%%
envelope=ind; %%%%%直接对基带信号求解模会不会是其包络呢?????
A=a0*envelope./(1+b0*envelope.^2);
B=a1*envelope.^2./(1+b1*envelope.^2); %%%%%%%%%% HPA造成的相位失真单位是弧度,得转化为角度
B=B/2/pi*360; %%%%弧度转化为角度
s=0:0.05:2;
A1=a0*s./(1+b0*s.^2);
B1=a1*s.^2./(1+b1*s.^2);
B1=B1/2/pi*360;
xla=s;
figure;plotyy(xla,A1,xla,B1);legend('AM/AM','AM/PM');
title('HPA幅度与相位特性');
grid on;
figure;plot(A);title('AM/AM');
figure;plot(B);title('AM/PM');
%% 中频信号通过HPA后怎么将相位失真融入到中频信号中
signal_I=real(diag);
signal_Q=imag(diag);
Angle=atan2(signal_Q,signal_I); %%%%%%%下变频信号的角度,怎么求中频信号的角度?????
Angle=Angle/pi/2*360; %%%%%%弧度转化为角度
obj=find(Angle<0);
Angle(obj)=Angle(obj)+360; %%%%%% atan2函数范围为-pi~pi
angel=Angle+B; %%%%%%%%%angel为基带信号通过HPA后的角度失真+原来的相位
sigI=A.*cosd(angel);
sigQ=A.*sind(angel);
co=xcorr(sigI);
spc=abs(fft(co));spc=fftshift(spc);spc=10*log10(spc);
co2=xcorr(c1); %%%%%%理想I路信号
spec=abs(fft(co2));spec=fftshift(spec);spec=10*log10(spec);
figure;plot(spc);
hold on;plot(spec-8,'black');
title('经过HPA后I路信号功率谱和理想功率谱的对比');
basesignal=sigI+1j*sigQ;
figure;plot(basesignal);
title('基带信号经过HPA后的星座图');
grid on;
%%%%%%%%%%%%
% 问题一:经过HPA后的基带信号I路码片波形会出现尖峰,这是为什么????而且出现在Q路码片跳变的时候,猜测是此时刻基带信号包络剧烈变化,引起AM/AM
% 和PM/PM失真,从而导致此时刻I路码片出现尖峰。
%
%
%
%%%%%%%%%%%%
%% 先考察基带信号经过滤波器后再经过HPA后的非线性失真情况
I=real(basesignal);
Q=imag(basesignal);
figure;plot(I);hold on;plot(Q,'r');legend('I','Q');
title('I/Q时域波形');
%%
%% 对经过HPA后的信号进行下变频,画出星座图
s_I=s1.*carrier1;
S_I=2*lp_filter2(s_I); %%%%%%%%下变频,低通滤波
s_Q=s1.*carrier2;
S_Q=2*lp_filter2(s_Q); %%%%%%%%下变频,低通滤波
figure;
plot(S_I+1j*S_Q);
%% 经过HPA后的中频信号的功率谱
co=xcorr(s1);
spc=abs(fft(co));
spc=10*log10(fftshift(spc));
len=1:length(spc);
f_w=fs/max(len);
center=(1+max(len))/2;
xlab=(len-center)*f_w/1e6;
figure;plot(xlab,spc);