【精品资源】基于协作认知无线电通信系统的信道估计算法matlab仿真,对比LS和MMSE

目录

1. 关键组成部分

1.1 主用户(Primary Users, PUs)

1.2 次用户(Secondary Users, SUs)

1.3 谱感知(Spectrum Sensing)

2. 信道估计

2.1 最小二乘(LS)估计

2.2 最小均方误差(MMSE)估计

3.MATLAB程序

4.仿真结果

5.完整程序下载


       协作认知无线电通信系统(Collaborative Cognitive Radio Communication Systems)是一种先进的无线通信技术,旨在提高频谱利用率和提升通信效率。这种系统允许未授权的“次用户”(Secondary Users, SUs)在不干扰授权的“主用户”(Primary Users, PUs)的前提下,动态地访问频谱资源。

1. 关键组成部分

1.1 主用户(Primary Users, PUs)

       主用户是指那些拥有特定频谱使用权的实体,如广播电台、政府机构等。PUs在特定的频率范围内拥有排他性的使用权。

1.2 次用户(Secondary Users, SUs)

      次用户是没有固定频谱分配权的实体,但可以在PUs不使用频谱资源时,通过检测空闲频段来临时使用这些频谱资源。

1.3 谱感知(Spectrum Sensing)

       谱感知是SU用来检测PUs是否正在使用某个频段的过程。常见的谱感知技术包括能量检测、匹配滤波、循环前缀检测等。

        随着5G和未来6G技术的发展,协作认知无线电通信系统将进一步融入物联网、自动驾驶、工业自动化等领域,带来更高的频谱效率和更低的延迟。同时,人工智能和机器学习技术的应用将使系统能够更好地应对复杂的动态环境。

       在协作认知无线电通信系统中,信道估计是一项关键的技术,它直接影响着系统性能,如数据传输速率、误码率以及频谱利用率等。信道估计的主要目的是通过已知的训练序列来估计无线信道的特性,进而用于数据检测、干扰抑制和其他处理任务。

2. 信道估计

2.1 最小二乘(LS)估计

       假设我们有一个单输入单输出(SISO)的通信链路,信道响应可以由一个复数表示。在实际应用中,信道通常是多径的,因此可以用一个向量表示,该向量包含了不同路径的增益和延迟。在简单的场景下,我们考虑一个平坦衰落信道模型,在这种情况下,信道可以用一个复数ℎh来描述。假设发送端发送了一个已知的训练序列x,接收端接收到的信号可以表示为:

其中,n表示加性高斯白噪声(AWGN),其统计特性通常假设为零均值和方差σn2​的复正态分布。

       最小二乘估计的目标是寻找一个估计值h^LS​,使得y与h^LS​x之间的差异最小。这个差异可以通过平方误差来度量,即最小化下面的目标函数:

2.2 最小均方误差(MMSE)估计

       最小均方误差估计不仅考虑了观测数据和信道估计之间的差异,还考虑了先验知识(如果有的话)。目标是最小化估计误差的均方值,即:

       MMSE估计通常是在知道信道先验概率密度函数(PDF)的情况下使用的。对于平坦衰落信道,如果我们假设信道系数ℎh服从复正态分布CN(0,σh2​),则MMSE估计可以表示为:

       当ℎh服从复正态分布且噪声也是复正态分布时,我们可以利用Bayes'定理来计算这个条件均值。由于y是ℎh和噪声的线性组合,其后验分布也是一个复正态分布,通过计算这个后验分布的均值,我们得到了MMSE估计。

       在设计协作认知无线电通信系统时,选择合适的信道估计算法对于提高系统性能至关重要。LS估计因其简单性和计算效率而广泛使用,但在需要更高精度的情况下,MMSE估计提供了更好的解决方案。未来的趋势可能会结合多种估计方法的优势,以适应更加复杂的通信环境。

3.MATLAB程序

..............................................................

for jj=1:Miter
        %获取多数逻辑组合的Pmd和Pfa
        [Tmp1_real,Tmp2_real]   = func_misdetect(user_state1,X0_cwreal,Nsamp,Num_cw);
        [Tmp1_Mreal,Tmp2_Mreal] = func_cov_MAP(user_state1,Hch_real); 

        [Tmp1_ls,Tmp2_ls]       = func_misdetect(user_state1,X0_cwls,Nsamp,Num_cw);
        [Tmp1_Mls,Tmp2_Mls]     = func_cov_MAP(user_state1,Hch_ls);

        [Tmp1_mmse,Tmp2_mmse]   = func_misdetect(user_state1,X0_cwmmse,Nsamp,Num_cw);
        [Tmp1_Mmmse,Tmp2_Mmmse] = func_cov_MAP(user_state1,Hch_mmse);
        
 
        P1_real     = [P1_real Tmp1_real];
        P2_real     = [P2_real Tmp2_real];
        P1_MAP_real = [P1_MAP_real Tmp1_Mreal];
        P2_MAP_real = [P2_MAP_real Tmp2_Mreal];


        P1_ls       = [P1_ls Tmp1_ls];
        P2_ls       = [P2_ls Tmp2_ls];
        P1_MAP_ls   = [P1_MAP_ls Tmp1_Mls];
        P2_MAP_ls   = [P2_MAP_ls Tmp2_Mls];

        P1_mmse     = [P1_mmse Tmp1_mmse];
        P2_mmse     = [P2_mmse Tmp2_mmse];
        P1_MAP_mmse = [P1_MAP_mmse Tmp1_Mmmse];
        P2_MAP_mmse = [P2_MAP_mmse Tmp2_Mmmse];
end
 

 
figure
subplot(121);
plot(Pw_db,(1-(mean(P1s_MAP_ls,1))),'-bs',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.0,0.0]);
hold on
plot(Pw_db,(1-(mean(P1s_MAP_mmse,1))),'-r>',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.3,0.9,0.0]);
hold on
plot(Pw_db,(1-(mean(P1s_MAP_real,1))),'-k<',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.3,0.3,0.9]);
xlabel('P/N_0 (dB)')
ylabel('检测率')
legend('LS MAP', 'MMSE MAP','Ideal MAP');
grid on 


subplot(122);
grid on
plot(Pw_db,((mean(P2s_MAP_ls,1))),'-bs',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.0,0.0]);
hold on
plot(Pw_db,((mean(P2s_MAP_mmse,1))),'-r>',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.3,0.9,0.0]);
hold on
plot(Pw_db,((mean(P2s_MAP_real,1))),'-k<',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.3,0.3,0.9]);
xlabel('P/N_0 (dB)')
ylabel('虚警率')
legend('LS MAP', 'MMSE MAP','Ideal MAP');
grid on 


 

figure
subplot(131);
plot(Pw_db,(1-(mean(P1s_MAP_real,1))),'-bs',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.0,0.0]);
hold on
plot(Pw_db,(1-(mean(P1s_real,1))),'-r>',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.3,0.9,0.0]);
hold on
xlabel('P/N_0 (dB)')
ylabel('检测率')
legend('Ideal MAP', 'Ideal Majority');
grid on 


subplot(132);
plot(Pw_db,(1-(mean(P1s_MAP_ls,1))),'-bs',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.0,0.0]);
hold on
plot(Pw_db,(1-(mean(P1s_ls,1))),'-r>',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.3,0.9,0.0]);
hold on
xlabel('P/N_0 (dB)')
ylabel('检测率')
legend('LS MAP', 'LS Majority');
grid on 



subplot(133);
plot(Pw_db,(1-(mean(P1s_MAP_mmse,1))),'-bs',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.0,0.0]);
hold on
plot(Pw_db,(1-(mean(P1s_mmse,1))),'-r>',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.3,0.9,0.0]);
hold on
xlabel('P/N_0 (dB)')
ylabel('检测率')
legend('MMSE MAP', 'MMSE Majority');
grid on 

 

figure
subplot(131);
plot(Pw_db,(1-(mean(P2s_MAP_real,1))),'-bs',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.0,0.0]);
hold on
plot(Pw_db,(1-(mean(P2s_real,1))),'-r>',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.3,0.9,0.0]);
hold on
xlabel('P/N_0 (dB)')
ylabel('虚警率')
legend('Ideal MAP', 'Ideal Majority');
grid on 


subplot(132);
plot(Pw_db,(1-(mean(P2s_MAP_ls,1))),'-bs',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.0,0.0]);
hold on
plot(Pw_db,(1-(mean(P2s_ls,1))),'-r>',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.3,0.9,0.0]);
hold on
xlabel('P/N_0 (dB)')
ylabel('虚警率')
legend('LS MAP', 'LS Majority');
grid on 



subplot(133);
plot(Pw_db,(1-(mean(P2s_MAP_mmse,1))),'-bs',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.0,0.0]);
hold on
plot(Pw_db,(1-(mean(P2s_mmse,1))),'-r>',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.3,0.9,0.0]);
hold on
xlabel('P/N_0 (dB)')
ylabel('虚警率')
legend('MMSE MAP', 'MMSE Majority');
grid on 
006

4.仿真结果

5.完整程序下载

完整可运行代码,博主已上传至CSDN,使用版本为matlab2022a:

https://download.csdn.net/download/ccsss22/89702354

  • 8
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fpga和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值