📄 lfm_psk_distinguish.m
字号:
%区分调频信号和相位编码信号
%设计者:宋虎
%设计时间:2005-9-24
%参考文献:
%**********线性调频信号******************************
Fs=100e6; %采样频率100MHz
deltt=1/Fs; %采样间隔
tao=7e-6; %线性调频信号时宽 !!也可以设置成可调参数!
SNR=3; %信噪比 !!也可以设置成可选参数!
N=fix(tao/deltt); %采样点数N
n=0:N-1;
t=n*deltt; %时间序列
f0=74.5e6; %起始频率,可以设置成可调!
% f0=75e6+(rand(1)-0.5)*10e6;
Bw=20e6; %带宽10MHz
k=Bw/tao; %调频系数k=带宽(Hz)/T时宽(s);
%phase=(2*rand(1)-1)*pi; %相位-pi~pi随机
phase=1;
signal_LFM=exp(i*(2*pi*f0.*t+pi*k*(t.^2)+phase));
%*****************************************************
%***********二相编码信号**********************
%首先产生仿真用的二相编码信号 s(t)=a*exp(j*[2*pi*fc*t+pi*dt+phase0]);
%有关参数设置同参考资料p28
N=1024; %采样点数
phase0=1; %初相弧度
%fc=40e6; %载频40MHZ
fc=90e6;
Nc=16; %码的长度16
%SNR=10; %信噪比10dB
T=N*deltt;
Tc=T/Nc; %码元宽度
%numMC=20; %仿真次数20
%*************************************
mayuan=[0 0 0 0 1 0 0 1 1 0 1 0 1 1 0 0]; %调制码
n=0:N-1;
%生成二相编码信号,关键在于相位在0,pi之间变化
BPSKphase=zeros(1,N);
for ll=0:N-1
mayuan_number=fix(ll*deltt/Tc);
if (mayuan_number<0)
mayuan_number=0;
elseif (mayuan_number>Nc -1)
mayuan_number=Nc -1;
end
BPSKphase(ll+1)=mayuan(1,mayuan_number+1)*pi;
end
%*********生成二相编码信号+噪声
%for ii=1:numMC
%noise=randn(1,N)+i*randn(1,N); %I,Q支路的噪声,高斯分布,合成(复噪声)功率2
%signal_A=sqrt(2)*10^(SNR/20); %信号幅度
signal_BPSK=exp(i*(2*pi*fc*n*deltt+BPSKphase(n+1)+phase0)); %二相编码信号
%signal_BPSK_noise=signal_BPSK+noise; %信号+噪声
%计算相位突变概率
phase_LFM=angle(signal_LFM)*180/pi;
phase_BPSK=angle(signal_BPSK)*180/pi;
phase_LFM_length=length(phase_LFM);
phase_BPSK_length=length(phase_BPSK);
sum_absphase_LFM=0;
sum_absphase_BPSK=0;
for ii=1:phase_LFM_length-1
phaseLFM_cha=phase_LFM(ii+1)-phase_LFM(ii);
if (phaseLFM_cha>180)
phaseLFM_cha=phaseLFM_cha-360;
end
if (phaseLFM_cha<-180)
phaseLFM_cha=phaseLFM_cha+360;
end
if abs(phaseLFM_cha)>90
sum_absphase_LFM=sum_absphase_LFM+1;
end
end
for kk=1:phase_BPSK_length-1
phaseBPSK_cha=phase_BPSK(ii+1)-phase_BPSK(ii);
if abs(phaseBPSK_cha)>90
sum_absphase_BPSK=sum_absphase_BPSK+1;
end
end
%计算谱的平坦度,在带宽内求
%找出带宽
fft_LFM=abs(fft(signal_LFM));
figure(1)
plot(fft_LFM)
fft_BPSK=abs(fft(signal_BPSK));
figure(2)
plot(fft_BPSK)
%找到谱的最大值,并前后搜索,如果有连续三个值小于最大值的1/2,则认为搜索结束,便得到带宽
[max_fft_LFM max_location_LFM]=max(fft_LFM);%最大值
[max_fft_BPSK max_location_BPSK]=max(fft_BPSK);%最大值
gate_LFMfft=max_fft_LFM/2;
gate_BPSKfft=max_fft_BPSK/2;
for ii=1:length(fft_LFM)-3 % 前后搜索
if fft_LFM(ii)<gate_LFMfft && fft_LFM(ii+1)<gate_LFMfft && fft_LFM(ii+2)<gate_LFMfft && fft_LFM(ii+3)>gate_LFMfft
f_start_LFM=ii+3;
end
if fft_LFM(ii)>gate_LFMfft && fft_LFM(ii+1)<gate_LFMfft && fft_LFM(ii+2)<gate_LFMfft && fft_LFM(ii+3)<gate_LFMfft
f_end_LFM=ii;
end
end
for ii=1:length(fft_BPSK)-3 % 前后搜索
if fft_BPSK(ii)<gate_BPSKfft && fft_BPSK(ii+1)>gate_BPSKfft % && fft_BPSK(ii+2)>gate_BPSKfft %&& fft_BPSK(ii+3)>gate_BPSKfft
f_start_BPSK=ii+1;
end
if fft_BPSK(ii)>gate_BPSKfft && fft_BPSK(ii+1)<gate_BPSKfft %&& fft_BPSK(ii+2)<gate_BPSKfft %&& fft_BPSK(ii+3)<gate_BPSKfft
f_end_BPSK=ii;
end
end
%%%%?????????BPSK信号的带宽计算有问题? f_start_BPSK f_end_BPSK 都是同一个值
%于是就可以得到带宽内的谱值
fft_LFM_inBw=fft_LFM(f_start_LFM:f_end_LFM);
fft_LFM_inBw_dB=20*log10(fft_LFM_inBw);
fft_BPSK_inBw=fft_BPSK(f_start_BPSK:f_end_BPSK);
fft_BPSK_inBw_dB=20*log10(fft_BPSK_inBw);
fft_LFM_inBw_dB_var=var(fft_LFM_inBw_dB);
fft_BPSK_inBw_dB_var=var(fft_BPSK_inBw_dB);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -