认知无线电中基于能量检测的双门限频谱感知的 MATLAB 仿真

该方案解决了传统单门限对噪声不确定性敏感的问题。


一、算法原理

1、信号模型

  • H0H_0H0(频谱空闲) :y(n)=w(n)y(n) = w(n)y(n)=w(n)
  • H1H_1H1(频谱占用) :y(n)=h⋅s(n)+w(n)y(n) = h \cdot s(n) + w(n)y(n)=h⋅s(n)+w(n)

2、能量统计量

T(y)=∑n=1N∣y(n)∣2 T(y) = \sum_{n=1}^{N} |y(n)|^2 T(y)=n=1∑N∣y(n)∣2

3、双门限判决规则

能量 T(y)T(y)T(y) 判决结果
T<λ1T < \lambda_1T<λ1 空闲 (H0H_0H0)
λ1≤T≤λ2\lambda_1 \le T \le \lambda_2λ1≤T≤λ2 不确定区
T>λ2T > \lambda_2T>λ2 占用 (H1H_1H1)

二、MATLAB 核心仿真代码

double_threshold_ed.m

matlab 复制代码
clc; clear; close all;

%% 1. 仿真参数
N = 1024;              % 采样点数(感知周期)
SNR_dB = -20:2:10;   % 信噪比范围 (dB)
Mc = 5000;              % 蒙特卡洛次数

% 双门限设置(基于噪声功率归一化)
lambda_low  = 0.8;    % 低门限
lambda_high = 1.5;    % 高门限

Pd = zeros(size(SNR_dB)); % 检测概率
Pf = zeros(size(SNR_dB)); % 虚警概率

%% 2. 主循环
for i = 1:length(SNR_dB)
    count_pd = 0;
    count_pf = 0;

    for m = 1:Mc
        % --- H0: 仅噪声 ---
        noise_h0 = randn(N,1) + 1j*randn(N,1);
        energy_h0 = sum(abs(noise_h0).^2) / N;

        % --- H1: 信号+噪声 ---
        signal = sqrt(1/2) * randn(N,1); % BPSK信号
        rx = awgn(signal, SNR_dB(i), 'measured');
        energy_h1 = sum(abs(rx).^2) / N;

        % --- 虚警概率 (H0下判为1) ---
        if energy_h0 > lambda_high
            count_pf = count_pf + 1;
        end

        % --- 检测概率 (H1下判为1) ---
        if energy_h1 > lambda_high
            count_pd = count_pd + 1;
        end
    end

    Pd(i) = count_pd / Mc;
    Pf(i) = count_pf / Mc;
end

%% 3. 绘图
figure('Color','white','Position',[100 100 600 400]);
plot(SNR_dB, Pd, 'b-o', 'LineWidth', 2); hold on;
plot(SNR_dB, Pf, 'r--s', 'LineWidth', 2);
grid on;

xlabel('SNR (dB)');
ylabel('Probability');
legend('P_d (Detection)', 'P_f (False Alarm)');
title('双门限能量检测性能');
set(gca, 'FontSize', 12);

三、噪声不确定性的自适应门限

在实际硬件(如 STM32 + ADC)中,噪声功率会波动,建议使用自适应门限:

matlab 复制代码
% 假设噪声功率估计为 sigma_w2
sigma_w2 = 1.0;   
delta = 0.1;      % 噪声不确定性因子 (±10%)

lambda_low  = sigma_w2 * (1 - delta);
lambda_high = sigma_w2 * (1 + delta);

四、三种判决输出

matlab 复制代码
function decision = spectrum_decision(T, lambda_low, lambda_high)
    if T < lambda_low
        decision = 0;   % 空闲
    elseif T > lambda_high
        decision = 1;   % 占用
    else
        decision = -1;  % 不确定(请求协作感知)
    end
end

参考代码 认知无线电中基于能量检测的双门限频谱检测研究 www.youwenfan.com/contentcsu/63582.html

五、性能对比(单门限 vs 双门限)

指标 单门限 双门限
抗噪声波动 差 强
虚警率 高 低
实现复杂度 低 中
适用场景 实验室 实际 CR 网络

六、扩展功能

协作频谱感知 (多用户融合)
ROC 曲线 (PdP_dPd vs PfP_fPf)
AWGN / Rayleigh / Rician 信道
FPGA/STM32 定点化实现

相关推荐
小小小小钰儿14 分钟前
1.5-Python网络编程
开发语言·网络·python·web安全·计算机·网络安全
hiahiahia12315 分钟前
实现完整 Tool Dispatcher
开发语言·前端
AC赳赳老秦1 小时前
公开音频转写信息提取:OpenClaw 处理发布会与听证会文本并提取核心决策信息
大数据·开发语言·汇编·数据库·人工智能·deepseek·openclaw
@yanyu6661 小时前
C编译器安装与第一个C程序
c语言·开发语言
落魄实习生1 小时前
Agent Scope Java 2.x 系列【2】 ReActAgent
java·开发语言
智鸟科技GemeOpen开发者智能设备1 小时前
智能插座二次开发如何接入Home Assistant,从零开始完整工程实现(Python+React)
开发语言·python·物联网·react.js·智能家居
疯狂成瘾者1 小时前
海康 Artemis 接口对接
开发语言·lua
2601_962218612 小时前
C++中decltype关键字的实现
开发语言·c++
hqyjzsb2 小时前
法律 Prompt 干货:搭建合同审查提示词要包含哪些要素
开发语言·人工智能·python·职场和发展·数据分析·prompt·业界资讯