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

📄 costas.m

📁 一个关于科斯塔斯环的MATLAB仿真程序
💻 M
字号:
function [out,Fre,Alt_phase,Alter_frequency,phase_discri] = Costas(fs,T,fc,Signal);
% [out,Alter_frequency,phase_discri]
% fs 信号采样率
% T 处理数据的时间(单位:毫秒)
% Signal 去除P码后的纯载波信号
% 使用方法:[out,Fre,Alt_phase,Alter_frequency,phase_discri] = Costas(81.84e+6,50,15.345e+6+100,data);
% Costas(81.84e+6,50,15.345e+6+100,data);
f = 10.23e+6; % 基准频率
ts = 1/fs;    % time delay
Crate = fs/f; % Crate倍的采样率
num = T * 10230 * Crate;   % 总共要处理的点数
Point_Num = floor(fs/1000);% 每次积累处理的点数  floor 
LocalUsed_n = [0:Point_Num-1];
MaxCount = floor(length(Signal)/Point_Num); % 循环处理的次数
Pifc = 2*pi*fc; 
temp = 0;
phase = 0;
[c1,c2] = GetC1C2(0.707,30);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
load PCodes_U PCodes_U;                       %%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=1:MaxCount 
    exp_Local = exp(j*(Pifc*ts*LocalUsed_n+phase)); % 本地信号的复数形式
    sin_Signal = imag(exp_Local); % 本地信号
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    sin_Signal = PCodes_U((1:Point_Num)+((i-1)*Point_Num)) .*sin_Signal; %%%%%
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    cos_Signal = real(exp_Local); % 本地信号的pi/2相移
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    cos_Signal = PCodes_U((1:Point_Num)+((i-1)*Point_Num)) .*cos_Signal;%%%%%
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    Used_Signal = Signal((1:Point_Num)+((i-1)*Point_Num));% 本次处理使用的信号
    Q_Sin = Used_Signal .* sin_Signal;
    I_Cos = Used_Signal .* cos_Signal;
   
    Q = sum(Q_Sin);
    I = sum(I_Cos);
    if(i==1 && Q<0 && I<0)
        phase = phase + pi;
    end;
    out(i) = I;
    phase_discri(i) = atan(Q/I);
    % phase_discri(i) = atan(I/Q);
    % out((1:Point_Num)+((i-1)*Point_Num)) = Used_Signal.*sin(Pifc*ts*LocalUsed_n +phase_discri(i));
    Frequency_dis = c1*phase_discri(i)+temp;
    temp = temp+c2*phase_discri(i);
    Pifc = Pifc-Frequency_dis*2*pi; 
    Alter_frequency(i) = Pifc; 
    phase = Pifc*ts*Point_Num+phase;
    Alt_phase(i) = mean(phase);
end
figure;
plot(phase_discri);
figure;
plot(Alter_frequency/(2*pi));
Fre = Alter_frequency/(2*pi);
% b_c1=fir1(3300,1/(2.0460e+007)); 
% out = fftfilt(b_c1, out);
figure ;
plot(out);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -