⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lfm_psk_distinguish.m

📁 LFM信号与BPSK信号相区别分析识别的程序
💻 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 + -