m分别通过matlab和FPGA实现基于高阶循环谱的信号载波调制识别(四阶循环累量)仿真

本文涉及的产品
函数计算FC,每月15万CU 3个月
简介: m分别通过matlab和FPGA实现基于高阶循环谱的信号载波调制识别(四阶循环累量)仿真

1.算法描述

   通信信号调制方式自动识别在军事和民用领域的信号检测、威胁干扰分析、频谱监测管理等方面有着广泛应用,是非合作通信的关键技术。其主要任务是对截获信号进行处理,比如变频、去载波、参数估计等,从中提取特征参数,然后利用适当的算法对调制信号的调制方式做出判决,为后续信号解调等处理提供依据。  

   由于数字调制信号越来越多地应用于通信信号处理领域,因此对数字信号调制识别的研究也越来越多。传统的调制识别的判决方法有:决策判决法、高阶累积量算法和人工神经网络算法等。但是决策判决法在低信噪比环境中识别率不高,而基于人工神经网络的识别方法计算复杂度较高。信号的高阶累积量算法具有很好的抗噪性能,故对基于高阶累积量的通信信号调制识别算法的研究受到了广泛重视。文献利用高阶累积量实现了对 2ASK/BPSK,4ASK,4PSK,2FSK,4FSK信号的分类。文献利用四阶和六阶累积量实现了对 2ASK,4ASK,8ASK,QPSK,8P-SK,16QAM信号的分类。文献利用二、四、六阶累积量实现了对 2ASK/BPSK,4ASK,QPSK,2FSK,4FSK,8FSK,16QAM信号的分类。文献对高阶累积量的四阶、五阶累积量进行了优化和仿真,但是在低信噪比的环境下,对信号的识别率都不高。

   所谓高阶统计量,通常是指信号的高阶矩,高阶累积量等信号统计信息的统称。在这些高阶统计量中,高阶累积量具有十分重要的重用,不同阶数的累积量可以反映出信号的不同特征,因此高阶累积量往往应用在信号分类,信号调制方式识别等领域。高阶累积量中的二阶累积量和四阶累积量可以有效抑制高斯白噪声的干扰,且对相位偏移具有一定的容错能力,其数学表达式为:

1.png

下面摘取调制方式在高阶累积量上的差异,
2.png

2.仿真效果预览
Quartus II 12.1 (64-Bit),

ModelSim-Altera 6.6d (Quartus II 11.0) Starter Edition

3.png
4.png
5.png
6.png
7.png

3.verilog核心程序
matlab部分:

close all;
clear all;
addpath 'func\'
rng('default')
SEL     = 3;
%假定接收端已经实现载波同步
seldata = randi([0 1],1,1000);
fs      = 10000;
R       = 250;
fc      = 1900;
if SEL == 1
   y_2psk1 = func_BPSK(seldata,fs,fc,R,1);
   y_2psk2 = func_BPSK(seldata,fs,fc,R,1.05); 
   com     = y_2psk1+y_2psk2;
end
if SEL == 2
   y_4psk1 = func_QPSK(seldata,fs,fc,R,1);
   y_4psk2 = func_QPSK(seldata,fs,fc,R,1.05);     
   com     = y_4psk1+y_4psk2;
end
if SEL == 3
   y_8psk1 = func_8PSK(seldata,fs,fc,R,1);
   y_8psk2 = func_8PSK(seldata,fs,fc,R,1.05);       
   com     = y_8psk1+y_8psk2;
end
 
%%%%%%%%四阶循环累积量%%%%%%%%%%%%
NOI = max(abs(com))/100;
y   = NOI + awgn(com,30,'measured');    
yft = abs(fft(y,4096)); 
figure;
plot(fs*(0:2047)/4096,yft(1:2048)) 
title('频谱');
fc    = fc;   
alpha =(fc-R):1:(fc+R);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
S4 = y.^4; 
S2 = y.^2; 
m  = size(y); 
k  =(1:m(2))'; 
n  = 0; 
for i=1:(2*R+1)
    i
    e1(:,i)  = exp(-j*8*pi*alpha(i)*k./fs); 
    su1(:,i) = S4'.*e1(:,i); 
    C1(i)    = mean(su1(:,i)); 
    e2(:,i)  = exp(-j*4*pi*alpha(i)*k./fs); 
    su2(:,i) = S2'.*e2(:,i); 
    C2(i)    = mean(su2(:,i)); 
    n        = n+1; 
end 
C=C1-3*C2.^2; 
figure
plot(alpha,abs(C)); 
if SEL == 1
   title('BPSK');
end
if SEL == 2
   title('QPSK');
end
if SEL == 3
   title('8PSK');
end
C40 = C;
 
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
S4  = (y.^3).*conj(y); 
S21 = y.^2; 
S22 = y.*conj(y);
m  = size(y); 
k  =(1:m(2))'; 
n  = 0; 
for i=1:(2*R+1)
    i
    e1(:,i)  = exp(-j*8*pi*alpha(i)*k./fs); 
    su1(:,i) = S4'.*e1(:,i); 
    C1(i)    = mean(su1(:,i)); 
    
    e2(:,i)  = exp(-j*4*pi*alpha(i)*k./fs); 
    su2(:,i) = (S21'.*e2(:,i)); 
    C2(i)    = mean(su2(:,i));
    
    e3(:,i)  = exp(-j*4*pi*alpha(i)*k./fs); 
    su3(:,i) = (S22'.*e3(:,i)); 
    C3(i)    = mean(su3(:,i));    
    
    n        = n+1; 
end 
C=C1-3*C2.*C3; 
figure
plot(alpha,abs(C)); 
if SEL == 1
   title('BPSK');
end
if SEL == 2
   title('QPSK');
end
if SEL == 3
   title('8PSK');
end
C41 = C;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
S4  = (y.^2).*(conj(y).^2); 
S21 = y.^2; 
S22 = conj(y).^2;
S3  = y.*conj(y);
m   = size(y); 
k   =(1:m(2))'; 
n   = 0; 
for i=1:(2*R+1)
    i
    e1(:,i)  = exp(-j*8*pi*alpha(i)*k./fs); 
    su1(:,i) = S4'.*e1(:,i); 
    C1(i)    = mean(su1(:,i)); 
    
    e2(:,i)  = exp(-j*4*pi*alpha(i)*k./fs); 
    su2(:,i) = (S3'.*e2(:,i)); 
    C2(i)    = mean(su2(:,i));
       
    e4(:,i)  = exp(-j*4*pi*alpha(i)*k./fs); 
    su4(:,i) = (S22'.*e4(:,i)).*(S22'.*e3(:,i)); 
    C4(i)    = mean(su4(:,i));      
    n        = n+1; 
end 
C=C1 - 2*C2.^2 - C4; 
figure
plot(alpha,abs(C)); 
if SEL == 1
   title('BPSK');
end
if SEL == 2
   title('QPSK');
end
if SEL == 3
   title('8PSK');
end
C42 = C;
FM = round([abs(C41/C40);abs(C41/C42)]);
FM

8.png

module C4012_cal(
               i_clk,
                    i_rst,
                    i_din,
                    o_C40,
                    o_FM
              );
                  
input i_clk;
input i_rst;
input signed[15:0]i_din;
output signed[15:0]o_C40;                  
output[1:0]   o_FM;
                  
reg signed[31:0]S2s;
reg signed[63:0]S4s;    
always @(posedge i_clk or posedge i_rst)
begin
     if(i_rst)
      begin
      S2s <= 32'd0;
      S4s <= 64'd0;
      end
else begin
      S2s <= i_din * i_din;
      S4s <= i_din * i_din * i_din * i_din;
     end
end
 
 
wire signed[15:0]S2;
wire signed[15:0]S4;
 
assign S2 = S2s[31:16];
assign S4 = S4s[63:48];
 
 
reg[11:0]cnt;
always @(posedge i_clk or posedge i_rst)
begin
     if(i_rst)
      begin
      cnt <= 12'd0;
      end
else begin
          if(cnt == 12'd2000)
             cnt <= 12'd2000;
      else
           cnt <= cnt + 12'd1;  
     end
end
 
reg start;
always @(posedge i_clk or posedge i_rst)
begin
     if(i_rst)
      begin
      start <= 1'd0;
      end
else begin
          if(cnt == 12'd406)
             start <= 1'd1;
      else
           start <= 1'd0;  
     end
end    
    
    
wire signed[15:0]DOUT;    
C4012 C4012_u( 
              .CLK  (i_clk),
                  .RST  (i_rst),
                  .START(start),
                  .DIN  (i_din[15:6]),
                  .DOUT (DOUT),
                  .FM   (o_FM)
                  );    
                  
 
 
 
reg       [15:0] CNT;
reg signed[15:0]o_C40;
reg             flag;
always @(posedge i_clk or posedge i_rst)
begin
     if(i_rst)
      begin
      flag <= 1'b0;
      end
else begin    
          if(DOUT >= 1000)
             flag <= 1'b1;
      else
          flag <= flag;      
     end
end
 
always @(posedge i_clk or posedge i_rst)
begin
     if(i_rst)
      begin
      CNT <= 16'd0;
      end
else begin    
          if(flag == 1'b1)
             begin
                 CNT <= CNT + 16'd1;
                 if(CNT >= 16'd10000)
                 CNT <= 16'd10000;
             end
     end
end
 
always @(posedge i_clk or posedge i_rst)
begin
     if(i_rst)
      begin
      o_C40 <= 16'd0;
      end
else begin    
         if(CNT <= 100)
           o_C40 <= DOUT;
      else
          o_C40 <= 16'd0; 
     end
end
    
endmodule                   
 01_107m
相关文章
|
4天前
|
算法 数据安全/隐私保护 计算机视觉
基于FPGA的图像双线性插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
本项目展示了256×256图像通过双线性插值放大至512×512的效果,无水印展示。使用Matlab 2022a和Vivado 2019.2开发,提供完整代码及详细中文注释、操作视频。核心程序实现图像缩放,并在Matlab中验证效果。双线性插值算法通过FPGA高效实现图像缩放,确保质量。
|
5天前
|
算法 数据安全/隐私保护
基于AutoEncode自编码器的端到端无线通信系统matlab误码率仿真
本项目基于MATLAB 2022a实现自编码器在无线通信系统中的应用,仿真结果无水印。自编码器由编码器和解码器组成,通过最小化重构误差(如MSE)进行训练,采用Adam等优化算法。核心程序包括训练、编码、解码及误码率计算,并通过端到端训练提升系统性能,适应复杂无线环境。
102 65
|
1月前
|
算法 数据安全/隐私保护
基于DVB-T的COFDM+16QAM+LDPC图传通信系统matlab仿真,包括载波同步,定时同步,信道估计
### 简介 本项目基于DVB-T标准,实现COFDM+16QAM+LDPC码通信链路的MATLAB仿真。通过COFDM技术将数据分成多个子载波并行传输,结合16QAM调制和LDPC编码提高传输效率和可靠性。系统包括载波同步、定时同步和信道估计模块,确保信号的准确接收与解调。MATLAB 2022a仿真结果显示了良好的性能,完整代码无水印。仿真操作步骤配有视频教程,便于用户理解和使用。 核心程序涵盖导频插入、载波频率同步、信道估计及LDPC解码等关键环节。仿真结果展示了系统的误码率性能,并保存为R1.mat文件。
127 76
|
1月前
|
算法 数据安全/隐私保护 计算机视觉
基于Retinex算法的图像去雾matlab仿真
本项目展示了基于Retinex算法的图像去雾技术。完整程序运行效果无水印,使用Matlab2022a开发。核心代码包含详细中文注释和操作步骤视频。Retinex理论由Edwin Land提出,旨在分离图像的光照和反射分量,增强图像对比度、颜色和细节,尤其在雾天条件下表现优异,有效解决图像去雾问题。
|
4天前
|
算法
基于排队理论的客户结账等待时间MATLAB模拟仿真
本程序基于排队理论,使用MATLAB2022A模拟客户结账等待时间,分析平均队长、等待时长、不能结账概率、损失顾客数等关键指标。核心算法采用泊松分布和指数分布模型,研究顾客到达和服务过程对系统性能的影响,适用于银行、超市等多个领域。通过仿真,优化服务效率,减少顾客等待时间。
|
1月前
|
算法 数据可视化 安全
基于DWA优化算法的机器人路径规划matlab仿真
本项目基于DWA优化算法实现机器人路径规划的MATLAB仿真,适用于动态环境下的自主导航。使用MATLAB2022A版本运行,展示路径规划和预测结果。核心代码通过散点图和轨迹图可视化路径点及预测路径。DWA算法通过定义速度空间、采样候选动作并评估其优劣(目标方向性、障碍物距离、速度一致性),实时调整机器人运动参数,确保安全避障并接近目标。
148 68
|
2天前
|
算法
基于小波变换和峰值搜索的光谱检测matlab仿真,带GUI界面
本程序基于小波变换和峰值搜索技术,实现光谱检测的MATLAB仿真,带有GUI界面。它能够对CO2、SO2、CO和CH4四种成分的比例进行分析和提取。程序在MATLAB 2022A版本下运行,通过小波分解、特征提取和峰值检测等步骤,有效识别光谱中的关键特征点。核心代码展示了光谱数据的处理流程,包括绘制原始光谱、导数光谱及标注峰值位置,并保存结果。该方法结合了小波变换的时频分析能力和峰值检测的敏锐性,适用于复杂信号的非平稳特性分析。
|
3天前
|
算法
基于SOA海鸥优化算法的三维曲面最高点搜索matlab仿真
本程序基于海鸥优化算法(SOA)进行三维曲面最高点搜索的MATLAB仿真,输出收敛曲线和搜索结果。使用MATLAB2022A版本运行,核心代码实现种群初始化、适应度计算、交叉变异等操作。SOA模拟海鸥觅食行为,通过搜索飞行、跟随飞行和掠食飞行三种策略高效探索解空间,找到全局最优解。
|
1天前
|
传感器 算法
基于GA遗传算法的多机无源定位系统GDOP优化matlab仿真
本项目基于遗传算法(GA)优化多机无源定位系统的GDOP,使用MATLAB2022A进行仿真。通过遗传算法的选择、交叉和变异操作,迭代优化传感器配置,最小化GDOP值,提高定位精度。仿真输出包括GDOP优化结果、遗传算法收敛曲线及三维空间坐标点分布图。核心程序实现了染色体编码、适应度评估、遗传操作等关键步骤,最终展示优化后的传感器布局及其性能。
|
3天前
|
算法 数据可视化 数据安全/隐私保护
一级倒立摆平衡控制系统MATLAB仿真,可显示倒立摆平衡动画,对比极点配置,线性二次型,PID,PI及PD五种算法
本课题基于MATLAB对一级倒立摆控制系统进行升级仿真,增加了PI、PD控制器,并对比了极点配置、线性二次型、PID、PI及PD五种算法的控制效果。通过GUI界面显示倒立摆动画和控制输出曲线,展示了不同控制器在偏转角和小车位移变化上的性能差异。理论部分介绍了倒立摆系统的力学模型,包括小车和杆的动力学方程。核心程序实现了不同控制算法的选择与仿真结果的可视化。
31 15

热门文章

最新文章