GPS抗干扰算法MATLAB实现

GPS抗干扰算法工具箱,包含多种先进的抗干扰技术:

%% ==============================================
% GPS抗干扰算法综合工具箱
% 功能:包含多种GPS抗干扰算法
%% ==============================================

clear all; close all; clc;
warning off;

%% 1. 初始化参数设置
disp('初始化GPS抗干扰系统参数...');

% 系统参数
fs = 10e6;           % 采样频率 10MHz
fc = 1.57542e9;      % GPS L1频率 1575.42MHz
Ts = 1/fs;           % 采样间隔
T = 0.001;           % 处理时长 1ms
t = 0:Ts:T-Ts;       % 时间向量
N = length(t);       % 采样点数
f = (-N/2:N/2-1)*fs/N; % 频率向量

% 天线阵列参数
M = 4;               % 阵元数量
d = 0.5 * 3e8/fc;    % 阵元间距(半波长)
antenna_pos = (0:M-1)*d; % 天线位置

% 信号参数
PRN = 1;             % 卫星PRN号
code_rate = 1.023e6; % C/A码速率
chip_duration = 1/code_rate; % 码片持续时间
samples_per_chip = fs/code_rate; % 每码片采样数

% 干扰参数
num_interferers = 3; % 干扰源数量
SNR = -20;           % 信噪比(dB)
JNR = [40, 35, 30];  % 干扰噪声比(dB)
interf_freqs = [fc+1e6, fc+2e6, fc-1.5e6]; % 干扰频率
interf_angles = [30, -45, 60]; % 干扰角度(度)

%% 2. 生成GPS信号
disp('生成GPS C/A码信号...');
gps_signal = generateGPSSignal(PRN, fs, T, fc);

% 生成多天线GPS信号(考虑阵列响应)
gps_signals_array = generateArrayGPS(gps_signal, antenna_pos, fc, 0);

%% 3. 生成干扰信号
disp('生成多种干扰信号...');
[interference, interference_types] = generateInterferenceSignals(fs, T, fc, ...
    num_interferers, JNR, interf_freqs, interf_angles);

%% 4. 生成多天线阵列接收信号
disp('生成阵列接收信号...');
received_signals = generateReceivedSignals(gps_signals_array, interference, ...
    antenna_pos, fc, SNR, M);

% 显示原始信号频谱
figure('Name', '原始接收信号分析', 'Position', [100, 100, 1400, 800]);
plotReceivedSignals(received_signals, fs, fc, interference_types);

%% 5. 多种抗干扰算法处理
disp('开始抗干扰处理...');

% 5.1 空域滤波 - 波束形成
disp('1. 空域滤波(波束形成)...');
beamformed_signals = spatialFiltering(received_signals, fc, antenna_pos, 'MVDR');

% 5.2 时域滤波 - LMS自适应滤波
disp('2. 时域滤波(LMS自适应)...');
lms_filtered = adaptiveFiltering(received_signals(1,:), 'LMS', 32);

% 5.3 频域滤波 - 陷波滤波
disp('3. 频域滤波(陷波滤波)...');
notch_filtered = frequencyFiltering(received_signals(1,:), fs, fc, interf_freqs);

% 5.4 空时自适应处理(STAP)
disp('4. 空时自适应处理(STAP)...');
stap_filtered = stapProcessing(received_signals, fc, fs, antenna_pos);

% 5.5 基于子空间的方法
disp('5. 子空间投影方法...');
subspace_filtered = subspaceProcessing(received_signals, fc, fs, antenna_pos, num_interferers);

% 5.6 盲源分离(ICA)
disp('6. 盲源分离(独立成分分析)...');
ica_separated = blindSeparation(received_signals, M);

% 5.7 脉冲干扰抑制
disp('7. 脉冲干扰抑制...');
impulse_suppressed = impulseSuppression(received_signals(1,:));

% 5.8 多级级联抗干扰
disp('8. 多级级联抗干扰处理...');
cascade_filtered = cascadeAntiJamming(received_signals, fs, fc, antenna_pos);

%% 6. 性能评估与比较
disp('评估各种抗干扰算法性能...');

% 收集所有处理结果
processed_signals = {
    received_signals(1,:), '原始信号';
    beamformed_signals, '波束形成';
    lms_filtered, 'LMS自适应滤波';
    notch_filtered, '陷波滤波';
    stap_filtered, 'STAP处理';
    subspace_filtered, '子空间投影';
    ica_separated(1,:), 'ICA分离';
    impulse_suppressed, '脉冲抑制';
    cascade_filtered, '级联处理'
};

% 评估性能
performance_metrics = evaluatePerformance(processed_signals, gps_signal, fs, fc);

% 显示性能对比
figure('Name', '抗干扰算法性能对比', 'Position', [100, 100, 1400, 600]);
plotPerformanceComparison(performance_metrics);

%% 7. 信号质量分析
disp('分析处理后的信号质量...');
figure('Name', '信号质量分析', 'Position', [100, 100, 1400, 800]);
analyzeSignalQuality(processed_signals, gps_signal, fs, fc);

%% 8. 实时处理模拟
disp('模拟实时抗干扰处理...');
realTimeSimulation(gps_signal, interference, fs, fc, antenna_pos, SNR);

%% 9. 生成抗干扰系统报告
generateAntiJammingReport(performance_metrics, interference_types);

disp('GPS抗干扰算法处理完成!');

%% ==============================================
% 核心函数定义
%% ==============================================

% 生成GPS信号函数
function gps_signal = generateGPSSignal(PRN, fs, T, fc)
    % 生成GPS C/A码
    code_length = 1023;  % C/A码长度
    t_code = 0:1/fs:T-1/fs;
    code_samples = round(fs * T / code_length);
    
    % 生成Gold码(简化版)
    g1 = ones(1, 10);  % G1寄存器初始状态
    g2 = ones(1, 10);  % G2寄存器初始状态
    ca_code = generateCACode(g1, g2, PRN, code_length);
    
    % 扩展C/A码到采样率
    ca_code_expanded = repmat(ca_code, 1, ceil(length(t_code)/length(ca_code)));
    ca_code_expanded = ca_code_expanded(1:length(t_code));
    
    % 生成载波
    carrier = exp(1j*2*pi*fc*t_code);
    
    % BPSK调制
    gps_signal = ca_code_expanded .* carrier;
    
    % 归一化
    gps_signal = gps_signal / sqrt(mean(abs(gps_signal).^2));
end

% 生成阵列GPS信号
function array_signals = generateArrayGPS(gps_signal, antenna_pos, fc, arrival_angle)
    M = length(antenna_pos);
    array_signals = zeros(M, length(gps_signal));
    
    % 计算阵列响应
    angle_rad = deg2rad(arrival_angle);
    steering_vector = exp(-1j*2*pi*fc/c*antenna_pos*sin(angle_rad));
    
    for m = 1:M
        array_signals(m,:) = gps_signal * steering_vector(m);
    end
end

% 生成干扰信号
function [interference, types] = generateInterferenceSignals(fs, T, fc, ...
    num_interferers, JNR, interf_freqs, interf_angles)
    
    t = 0:1/fs:T-1/fs;
    interference = zeros(num_interferers, length(t));
    types = cell(num_interferers, 1);
    
    % 不同类型干扰
    for i = 1:num_interferers
        switch mod(i,4)
            case 0
                % 单音干扰
                interference(i,:) = sqrt(10^(JNR(i)/10)) * ...
                    exp(1j*2*pi*interf_freqs(i)*t);
                types{i} = '单音干扰';
                
            case 1
                % 扫频干扰
                sweep_rate = 1e9;  % 扫频速率
                interference(i,:) = sqrt(10^(JNR(i)/10)) * ...
                    exp(1j*2*pi*(fc*t + sweep_rate*t.^2));
                types{i} = '扫频干扰';
                
            case 2
                % 宽带噪声干扰
                interference(i,:) = sqrt(10^(JNR(i)/10)) * ...
                    (randn(1,length(t)) + 1j*randn(1,length(t))) / sqrt(2);
                types{i} = '宽带噪声干扰';
                
            case 3
                % 脉冲干扰
                pulse_width = 0.1e-6;  % 脉冲宽度
                pulse_period = 10e-6;  % 脉冲周期
                interference(i,:) = sqrt(10^(JNR(i)/10)) * ...
                    generatePulseInterference(t, pulse_width, pulse_period, fc);
                types{i} = '脉冲干扰';
        end
    end
    
    % 合并所有干扰
    interference = sum(interference, 1);
end

% 生成脉冲干扰
function pulse_signal = generatePulseInterference(t, pulse_width, pulse_period, fc)
    pulse_signal = zeros(size(t));
    num_pulses = floor(t(end)/pulse_period);
    
    for k = 0:num_pulses
        pulse_start = k * pulse_period;
        pulse_end = pulse_start + pulse_width;
        
        pulse_idx = (t >= pulse_start) & (t < pulse_end);
        pulse_signal(pulse_idx) = exp(1j*2*pi*fc*t(pulse_idx));
    end
end

% 生成接收信号
function rx_signals = generateReceivedSignals(gps_signals_array, interference, ...
    antenna_pos, fc, SNR, M)
    
    [~, N] = size(gps_signals_array);
    rx_signals = zeros(M, N);
    
    % 添加GPS信号、干扰和噪声
    for m = 1:M
        % GPS信号
        signal_power = mean(abs(gps_signals_array(m,:)).^2);
        
        % 添加干扰
        interf_power = mean(abs(interference).^2);
        scale_factor = sqrt(signal_power * 10^(SNR/10) / interf_power);
        scaled_interference = interference * scale_factor;
        
        % 添加高斯白噪声
        noise_power = signal_power / (10^(SNR/10));
        noise = sqrt(noise_power/2) * (randn(1,N) + 1j*randn(1,N));
        
        % 合并信号
        rx_signals(m,:) = gps_signals_array(m,:) + scaled_interference + noise;
    end
end

% 空域滤波(波束形成)
function filtered_signal = spatialFiltering(rx_signals, fc, antenna_pos, method)
    [M, N] = size(rx_signals);
    
    % 计算协方差矩阵
    Rxx = (rx_signals * rx_signals') / N;
    
    % 导向矢量(假设GPS信号来自0度方向)
    theta_desired = 0;  % 期望信号方向
    steering_vector = exp(-1j*2*pi*fc/c*antenna_pos*sin(deg2rad(theta_desired)));
    
    switch method
        case 'MVDR'
            % MVDR波束形成
            Rxx_inv = inv(Rxx + eye(M)*1e-6);  % 正则化
            w_mvdr = (Rxx_inv * steering_vector') / ...
                    (steering_vector * Rxx_inv * steering_vector');
            filtered_signal = w_mvdr' * rx_signals;
            
        case 'LCMV'
            % LCMV波束形成
            constraints = steering_vector';  % 约束条件
            response = 1;  % 期望响应
            w_lcmv = inv(Rxx) * constraints * inv(constraints' * inv(Rxx) * constraints) * response;
            filtered_signal = w_lcmv' * rx_signals;
            
        case 'MPDR'
            % MPDR波束形成
            w_mpdr = inv(Rxx) * steering_vector' / (steering_vector * inv(Rxx) * steering_vector');
            filtered_signal = w_mpdr' * rx_signals;
            
        otherwise
            error('未知的波束形成方法');
    end
end

% 自适应滤波(时域)
function filtered_signal = adaptiveFiltering(rx_signal, method, filter_order)
    N = length(rx_signal);
    
    switch method
        case 'LMS'
            % LMS算法
            mu = 0.01;  % 步长
            w = zeros(filter_order, 1);
            filtered_signal = zeros(1, N);
            
            for n = filter_order:N
                x = rx_signal(n:-1:n-filter_order+1).';
                y = w' * x;
                e = rx_signal(n) - y;
                w = w + mu * conj(e) * x;
                filtered_signal(n) = y;
            end
            
        case 'NLMS'
            % 归一化LMS算法
            mu = 0.1;
            delta = 1e-6;
            w = zeros(filter_order, 1);
            filtered_signal = zeros(1, N);
            
            for n = filter_order:N
                x = rx_signal(n:-1:n-filter_order+1).';
                y = w' * x;
                e = rx_signal(n) - y;
                w = w + mu * conj(e) * x / (delta + x'*x);
                filtered_signal(n) = y;
            end
            
        case 'RLS'
            % RLS算法
            lambda = 0.99;  % 遗忘因子
            delta = 0.01;
            w = zeros(filter_order, 1);
            P = eye(filter_order) / delta;
            filtered_signal = zeros(1, N);
            
            for n = filter_order:N
                x = rx_signal(n:-1:n-filter_order+1).';
                pi_ = P * x;
                k = pi_ / (lambda + x' * pi_);
                y = w' * x;
                e = rx_signal(n) - y;
                w = w + k * conj(e);
                P = (P - k * pi_') / lambda;
                filtered_signal(n) = y;
            end
            
        otherwise
            error('未知的自适应滤波算法');
    end
end

% 频域滤波
function filtered_signal = frequencyFiltering(rx_signal, fs, fc, notch_freqs)
    % FFT变换
    N = length(rx_signal);
    X = fft(rx_signal);
    f = (-N/2:N/2-1)*fs/N;
    
    % 设计陷波滤波器
    notch_width = 10e3;  % 陷波宽度
    H = ones(1, N);
    
    for i = 1:length(notch_freqs)
        notch_center = notch_freqs(i) - fc;
        notch_idx = abs(f - notch_center) < notch_width/2;
        H(notch_idx) = 1e-6;  % 深度衰减
    end
    
    % 应用滤波器
    X_filtered = X .* ifftshift(H);
    filtered_signal = ifft(X_filtered);
end

% 空时自适应处理(STAP)
function filtered_signal = stapProcessing(rx_signals, fc, fs, antenna_pos)
    [M, N] = size(rx_signals);
    K = 3;  % 时域抽头数
    
    % 构造空时数据矩阵
    STAP_data = zeros(M*K, N-K+1);
    for k = 1:K
        STAP_data((k-1)*M+1:k*M, :) = rx_signals(:, k:end-K+k);
    end
    
    % 计算空时协方差矩阵
    R_stap = (STAP_data * STAP_data') / (N-K+1);
    
    % 构造空时导向矢量(假设期望信号来自0度,多普勒为0)
    spatial_sv = exp(-1j*2*pi*fc/c*antenna_pos*sin(0));
    temporal_sv = ones(K, 1);
    STAP_sv = kron(temporal_sv, spatial_sv');
    
    % STAP最优权重
    R_stap_inv = inv(R_stap + eye(M*K)*1e-6);
    w_stap = (R_stap_inv * STAP_sv) / (STAP_sv' * R_stap_inv * STAP_sv);
    
    % 应用STAP滤波器
    filtered_signal = w_stap' * STAP_data;
end

% 子空间投影方法
function filtered_signal = subspaceProcessing(rx_signals, fc, fs, antenna_pos, num_interferers)
    [M, N] = size(rx_signals);
    
    % 计算协方差矩阵
    Rxx = (rx_signals * rx_signals') / N;
    
    % 特征分解
    [V, D] = eig(Rxx);
    eigenvalues = diag(D);
    [~, idx] = sort(eigenvalues, 'descend');
    V = V(:, idx);
    
    % 估计干扰子空间
    interference_subspace = V(:, 1:num_interferers);
    
    % 构造投影矩阵
    P_interference = interference_subspace * interference_subspace';
    P_orthogonal = eye(M) - P_interference;
    
    % 投影到干扰正交补空间
    filtered_signal = zeros(1, N);
    for n = 1:N
        filtered_signal(n) = rx_signals(:, n)' * P_orthogonal * rx_signals(:, n);
    end
end

% 盲源分离(ICA)
function separated_signals = blindSeparation(rx_signals, M)
    % 中心化
    X_centered = rx_signals - mean(rx_signals, 2);
    
    % 白化
    [U, S, ~] = svd(X_centered * X_centered' / size(X_centered, 2));
    Z = diag(1./sqrt(diag(S) + 1e-6)) * U' * X_centered;
    
    % FastICA算法
    W = randn(M, M);
    W = W / norm(W);
    
    max_iter = 100;
    for iter = 1:max_iter
        W_old = W;
        
        % 非线性函数
        g = tanh(Z' * W);
        g_prime = 1 - g.^2;
        
        W = Z * g / size(Z, 2) - diag(mean(g_prime, 1)) * W;
        
        % 对称正交化
        W = (W * W')^(-1/2) * W;
        
        % 检查收敛
        if norm(abs(W' * W_old) - eye(M), 'fro') < 1e-6
            break;
        end
    end
    
    separated_signals = W' * Z;
end

% 脉冲干扰抑制
function filtered_signal = impulseSuppression(rx_signal)
    % 基于中值滤波的脉冲抑制
    window_size = 7;
    N = length(rx_signal);
    filtered_signal = zeros(1, N);
    
    % 对实部和虚部分别处理
    real_part = real(rx_signal);
    imag_part = imag(rx_signal);
    
    for n = 1:N
        start_idx = max(1, n - floor(window_size/2));
        end_idx = min(N, n + floor(window_size/2));
        
        real_median = median(real_part(start_idx:end_idx));
        imag_median = median(imag_part(start_idx:end_idx));
        
        % 检测是否为脉冲
        if abs(real(rx_signal(n)) - real_median) > 3 * std(real_part(start_idx:end_idx))
            real_filtered = real_median;
        else
            real_filtered = real(rx_signal(n));
        end
        
        if abs(imag(rx_signal(n)) - imag_median) > 3 * std(imag_part(start_idx:end_idx))
            imag_filtered = imag_median;
        else
            imag_filtered = imag(rx_signal(n));
        end
        
        filtered_signal(n) = real_filtered + 1j*imag_filtered;
    end
end

% 多级级联抗干扰
function filtered_signal = cascadeAntiJamming(rx_signals, fs, fc, antenna_pos)
    % 第一级:空域滤波
    spatial_filtered = spatialFiltering(rx_signals, fc, antenna_pos, 'MVDR');
    
    % 第二级:频域陷波
    notch_freqs = [fc+1e6, fc+2e6, fc-1.5e6];  % 已知干扰频率
    freq_filtered = frequencyFiltering(spatial_filtered, fs, fc, notch_freqs);
    
    % 第三级:自适应滤波
    final_filtered = adaptiveFiltering(freq_filtered, 'LMS', 16);
    
    filtered_signal = final_filtered;
end

% 性能评估
function metrics = evaluatePerformance(processed_signals, gps_ref, fs, fc)
    num_methods = size(processed_signals, 1);
    metrics = struct();
    
    for m = 1:num_methods
        signal = processed_signals{m, 1};
        method_name = processed_signals{m, 2};
        
        % 计算信干噪比改善因子
        SINR_input = calculateSINR(processed_signals{1,1}, gps_ref);
        SINR_output = calculateSINR(signal, gps_ref);
        SINR_improvement = SINR_output - SINR_input;
        
        % 计算相关峰
        correlation = abs(xcorr(signal, gps_ref, 'normalized'));
        peak_correlation = max(correlation);
        
        % 计算误码率(模拟)
        BER = calculateBER(signal, gps_ref);
        
        % 计算计算复杂度(相对)
        complexity = estimateComplexity(signal);
        
        % 存储结果
        metrics(m).method = method_name;
        metrics(m).SINR_input = SINR_input;
        metrics(m).SINR_output = SINR_output;
        metrics(m).SINR_improvement = SINR_improvement;
        metrics(m).peak_correlation = peak_correlation;
        metrics(m).BER = BER;
        metrics(m).complexity = complexity;
    end
end

% 计算SINR
function sinr = calculateSINR(signal, reference)
    % 信号功率
    signal_power = mean(abs(reference).^2);
    
    % 误差功率
    error = signal - reference;
    error_power = mean(abs(error).^2);
    
    % SINR计算
    sinr = 10 * log10(signal_power / error_power);
end

% 计算BER(模拟)
function ber = calculateBER(signal, reference)
    % 简化的BER计算
    decision_threshold = 0.5;
    
    % 解调(简化)
    signal_demod = real(signal) > decision_threshold;
    ref_demod = real(reference) > decision_threshold;
    
    % 计算误比特数
    num_bits = min(length(signal_demod), length(ref_demod));
    errors = sum(signal_demod(1:num_bits) ~= ref_demod(1:num_bits));
    
    ber = errors / num_bits;
end

% 估计复杂度
function comp = estimateComplexity(signal)
    % 基于信号长度的简单复杂度估计
    comp = length(signal) / 1000;  % 相对复杂度
end

% 生成抗干扰报告
function generateAntiJammingReport(metrics, interference_types)
    fprintf('\n========== GPS抗干扰系统报告 ==========\n');
    fprintf('生成时间: %s\n', datestr(now));
    fprintf('干扰类型: %s\n', strjoin(interference_types, ', '));
    fprintf('\n性能评估结果:\n');
    fprintf('%-20s %-12s %-12s %-12s %-12s %-12s\n', ...
        '方法', '输入SINR(dB)', '输出SINR(dB)', '改善量(dB)', '相关峰', 'BER');
    fprintf('---------------------------------------------------------------------------\n');
    
    for i = 1:length(metrics)
        fprintf('%-20s %-12.2f %-12.2f %-12.2f %-12.4f %-12.4f\n', ...
            metrics(i).method, ...
            metrics(i).SINR_input, ...
            metrics(i).SINR_output, ...
            metrics(i).SINR_improvement, ...
            metrics(i).peak_correlation, ...
            metrics(i).BER);
    end
    
    % 保存报告
    filename = sprintf('GPS_AntiJamming_Report_%s.txt', datestr(now, 'yyyymmdd_HHMMSS'));
    fid = fopen(filename, 'w');
    if fid ~= -1
        fprintf(fid, 'GPS抗干扰系统性能报告\n');
        fprintf(fid, '测试时间: %s\n\n', datestr(now));
        
        for i = 1:length(metrics)
            fprintf(fid, '%s:\n', metrics(i).method);
            fprintf(fid, '  SINR改善: %.2f dB\n', metrics(i).SINR_improvement);
            fprintf(fid, '  相关峰: %.4f\n', metrics(i).peak_correlation);
            fprintf(fid, '  误码率: %.4f\n\n', metrics(i).BER);
        end
        
        fclose(fid);
        fprintf('\n报告已保存到: %s\n', filename);
    end
    
    fprintf('=============================================\n');
end

% 绘制接收信号分析图
function plotReceivedSignals(rx_signals, fs, fc, interference_types)
    % 时域图
    subplot(2,3,1);
    plot(real(rx_signals(1,1:1000)));
    title('接收信号时域波形(实部)');
    xlabel('采样点'); ylabel('幅度');
    grid on;
    
    % 频域图
    subplot(2,3,2);
    [N, ~] = size(rx_signals);
    fft_result = fftshift(fft(rx_signals(1,:)));
    f = (-N/2:N/2-1)*fs/N/1e6;
    plot(f, 20*log10(abs(fft_result)));
    title('接收信号频谱');
    xlabel('频率(MHz)'); ylabel('功率谱密度(dB)');
    grid on;
    
    % 星座图
    subplot(2,3,3);
    scatter(real(rx_signals(1,1:1000)), imag(rx_signals(1,1:1000)), 10, 'filled');
    title('接收信号星座图');
    xlabel('同相分量'); ylabel('正交分量');
    axis equal; grid on;
    
    % 阵列响应
    subplot(2,3,4);
    angles = -90:1:90;
    array_response = zeros(size(angles));
    for i = 1:length(angles)
        sv = exp(-1j*2*pi*fc/c*(0:3)*0.5*sin(deg2rad(angles(i))));
        array_response(i) = abs(sv * rx_signals(:,1:100)').^2;
    end
    plot(angles, 10*log10(array_response/max(array_response)));
    title('阵列方向图');
    xlabel('角度(度)'); ylabel('归一化增益(dB)');
    grid on;
    
    % 干扰类型说明
    subplot(2,3,5);
    text(0.1, 0.8, '干扰类型:', 'FontSize', 12, 'FontWeight', 'bold');
    for i = 1:length(interference_types)
        text(0.1, 0.7-0.1*i, sprintf('%d. %s', i, interference_types{i}), ...
            'FontSize', 10);
    end
    axis off;
    
    % 信号统计
    subplot(2,3,6);
    histogram(abs(rx_signals(1,:)), 50);
    title('信号幅度分布');
    xlabel('幅度'); ylabel('频数');
    grid on;
end

% 绘制性能对比图
function plotPerformanceComparison(metrics)
    methods = {metrics.method};
    sinr_improvement = [metrics.SINR_improvement];
    peak_corr = [metrics.peak_correlation];
    ber = [metrics.BER];
    
    % SINR改善图
    subplot(1,3,1);
    bar(sinr_improvement);
    set(gca, 'XTickLabel', methods, 'XTickLabelRotation', 45);
    title('SINR改善量(dB)');
    ylabel('改善量(dB)');
    grid on;
    
    % 相关峰对比
    subplot(1,3,2);
    bar(peak_corr);
    set(gca, 'XTickLabel', methods, 'XTickLabelRotation', 45);
    title('相关峰值');
    ylabel('相关值');
    ylim([0 1]);
    grid on;
    
    % BER对比
    subplot(1,3,3);
    bar(ber);
    set(gca, 'XTickLabel', methods, 'XTickLabelRotation', 45);
    title('误码率(BER)');
    ylabel('BER');
    set(gca, 'YScale', 'log');
    grid on;
end

% 信号质量分析
function analyzeSignalQuality(processed_signals, gps_ref, fs, fc)
    num_methods = size(processed_signals, 1);
    
    for m = 1:num_methods
        signal = processed_signals{m, 1};
        method_name = processed_signals{m, 2};
        
        % 创建子图
        subplot(3, 3, m);
        
        % 计算互相关
        correlation = xcorr(signal, gps_ref, 'normalized');
        [~, max_idx] = max(abs(correlation));
        
        % 绘制相关峰
        plot(abs(correlation), 'LineWidth', 1.5);
        hold on;
        plot(max_idx, abs(correlation(max_idx)), 'ro', 'MarkerSize', 10, 'LineWidth', 2);
        hold off;
        
        title(sprintf('%s\n相关峰: %.4f', method_name, abs(correlation(max_idx))));
        xlabel('延迟'); ylabel('相关值');
        grid on;
        
        if m == 1
            legend('互相关', '峰值位置', 'Location', 'best');
        end
    end
end

% 实时处理模拟
function realTimeSimulation(gps_signal, interference, fs, fc, antenna_pos, SNR)
    figure('Name', '实时抗干扰处理演示', 'Position', [100, 100, 1200, 800]);
    
    % 分段处理
    segment_length = 1000;
    num_segments = floor(length(gps_signal) / segment_length);
    
    % 初始化跟踪变量
    SINR_history = zeros(num_segments, 1);
    
    for seg = 1:num_segments
        % 提取当前段
        start_idx = (seg-1)*segment_length + 1;
        end_idx = seg*segment_length;
        
        % 生成当前段信号
        current_gps = gps_signal(start_idx:end_idx);
        current_interf = interference(start_idx:end_idx);
        
        % 生成接收信号
        rx_segment = generateReceivedSignals(...
            current_gps, current_interf, antenna_pos, fc, SNR, 4);
        
        % 应用抗干扰处理
        filtered_segment = cascadeAntiJamming(rx_segment, fs, fc, antenna_pos);
        
        % 计算性能
        SINR_history(seg) = calculateSINR(filtered_segment, current_gps);
        
        % 实时显示
        if mod(seg, 10) == 0 || seg == 1 || seg == num_segments
            subplot(2,2,1);
            plot(real(rx_segment(1,:)));
            title('原始接收信号');
            xlabel('采样点'); ylabel('幅度');
            grid on;
            
            subplot(2,2,2);
            plot(real(filtered_segment));
            title('抗干扰后信号');
            xlabel('采样点'); ylabel('幅度');
            grid on;
            
            subplot(2,2,3);
            plot(SINR_history(1:seg));
            title('SINR变化趋势');
            xlabel('处理段数'); ylabel('SINR(dB)');
            grid on;
            
            subplot(2,2,4);
            spectrum_original = abs(fftshift(fft(rx_segment(1,:))));
            spectrum_filtered = abs(fftshift(fft(filtered_segment)));
            f = (-segment_length/2:segment_length/2-1)*fs/segment_length/1e6;
            plot(f, 20*log10(spectrum_original), 'b', f, 20*log10(spectrum_filtered), 'r');
            title('频谱对比');
            xlabel('频率(MHz)'); ylabel('功率谱密度(dB)');
            legend('原始', '处理后');
            grid on;
            
            drawnow;
            
            fprintf('处理段 %d/%d, 当前SINR: %.2f dB\n', seg, num_segments, SINR_history(seg));
        end
    end
end

% 生成C/A码(简化版)
function ca_code = generateCACode(g1, g2, PRN, code_length)
    % 简化的Gold码生成
    ca_code = zeros(1, code_length);
    
    for i = 1:code_length
        % G1寄存器反馈
        feedback1 = mod(g1(3) + g1(10), 2);
        g1 = [feedback1, g1(1:9)];
        
        % G2寄存器反馈
        feedback2 = mod(g2(2) + g2(3) + g2(6) + g2(8) + g2(9) + g2(10), 2);
        g2 = [feedback2, g2(1:9)];
        
        % 选择相位(根据PRN)
        phase_select = [2,6; 3,7; 4,8; 5,9; 1,9; 2,10; 1,8; 2,9; 3,10; 2,3; ...
                       3,4; 5,6; 6,7; 7,8; 8,9; 9,10; 1,4; 2,5; 3,6; 4,7; ...
                       5,8; 6,9; 1,3; 4,6; 5,7; 6,8; 7,9; 8,10; 1,6; 2,7; ...
                       3,8; 4,9];
        
        if PRN <= 32
            phase = phase_select(PRN, :);
        else
            phase = [1, 1];
        end
        
        % 生成C/A码
        ca_code(i) = mod(g1(10) + mod(g2(phase(1)) + g2(phase(2)), 2), 2);
        ca_code(i) = 1 - 2*ca_code(i);  % 转换为BPSK
    end
end

% 常数定义
c = 299792458;  % 光速(m/s)

GPS抗干扰算法说明

1. 算法分类与原理

空域抗干扰:

  • 波束形成:MVDR、LCMV、MPDR算法
  • 原理:利用天线阵列形成空间滤波器,在期望信号方向形成主瓣,在干扰方向形成零陷

时域抗干扰:

  • 自适应滤波:LMS、NLMS、RLS算法
  • 原理:利用参考信号或信号统计特性自适应调整滤波器系数,抑制干扰

频域抗干扰:

  • 陷波滤波:在干扰频率处设置阻带
  • 原理:通过FFT变换到频域,识别并抑制干扰频率成分

空时处理:

  • STAP:空时自适应处理
  • 原理:结合空间和时间维度,同时抑制空间和时间相关的干扰

子空间方法:

  • 子空间投影:将信号投影到干扰正交补空间
  • 原理:基于特征分解分离信号子空间和干扰子空间

盲源分离:

  • ICA:独立成分分析
  • 原理:假设信号源统计独立,分离混合信号

2. 主要特点

  1. 综合性强:集成8种主流抗干扰算法
  2. 模块化设计:各算法独立封装,便于测试和比较
  3. 性能评估:完整的SINR、相关峰、BER评估体系
  4. 可视化完善:丰富的时域、频域、空域分析图表
  5. 实时模拟:支持分段实时处理演示

3. 使用说明

  1. 基础运行

    % 直接运行主程序
    gps_anti_jamming_main
    
  2. 使用真实数据

    % 替换第25-26行,使用真实GPS数据
    load('real_gps_data.mat');  % 您的GPS数据
    gps_signal = your_gps_signal;
    
  3. 参数调整

    % 调整干扰参数(第20-24行)
    num_interferers = 2;      % 干扰源数量
    JNR = [30, 35];           % 干扰噪声比
    interf_freqs = [fc+1e6, fc-1e6];  % 干扰频率
    
  4. 选择算法

    % 在主程序中注释/取消注释相应算法
    

参考代码 抗干扰算法 www.youwenfan.com/contentcnp/113039.html

4. 性能评估指标

  • SINR改善量:主要性能指标,越大越好
  • 相关峰值:GPS信号恢复质量,越接近1越好
  • 误码率(BER):通信质量指标,越小越好
  • 计算复杂度:算法实时性考虑

5. 扩展建议

  1. 添加新算法

    % 在相应函数模块中添加新的抗干扰算法
    function result = newAntiJammingMethod(signal, params)
        % 实现新算法
    end
    
  2. 硬件加速

    % 使用GPU加速
    gpu_rx_signals = gpuArray(rx_signals);
    gpu_result = gather(processOnGPU(gpu_rx_signals));
    
  3. 深度学习增强

    % 结合深度学习算法
    dl_filtered = deepLearningJammingSuppression(rx_signals);
    
  4. 多系统兼容

    % 扩展支持北斗、GLONASS等系统
    bds_signal = generateBDSSignal(PRN, fs, fc_bds);
    

这个GPS抗干扰工具箱提供了从基础到先进的完整解决方案,可根据具体应用场景选择和组合不同的抗干扰算法。

posted @ 2026-01-15 16:27  chen_yig  阅读(0)  评论(0)    收藏  举报