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

本文涉及的产品
简介: 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
相关文章
|
23天前
OFDM深入学习及MATLAB仿真(二)
OFDM深入学习及MATLAB仿真
22 1
|
4天前
|
机器学习/深度学习 人工智能 算法
基于DCT和扩频的音频水印嵌入提取算法matlab仿真
本文介绍了结合DCT和扩频技术的音频水印算法,用于在不降低音质的情况下嵌入版权信息。在matlab2022a中实现,算法利用DCT进行频域处理,通过扩频增强水印的隐蔽性和抗攻击性。核心程序展示了水印的嵌入与提取过程,包括DCT变换、水印扩频及反变换步骤。该方法有效且专业,未来研究将侧重于提高实用性和安全性。
|
19小时前
|
算法 计算机视觉 异构计算
基于FPGA的图像累积直方图verilog实现,包含tb测试文件和MATLAB辅助验证
该内容展示了FPGA实现图像累积直方图的算法。使用Vivado2019.2和matlab2022a,通过FPGA的并行处理能力优化图像处理。算法基于像素值累加分布,计算图像中像素值小于等于特定值的像素个数。核心代码为`test_image`模块,读取二进制图像文件并传递给`im_hist`单元,生成直方图和累积直方图。
|
2天前
|
机器学习/深度学习 算法 数据挖掘
基于PSO优化的CNN-LSTM-Attention的时间序列回归预测matlab仿真
该文档介绍了使用MATLAB2022A中PSO优化算法提升时间序列预测模型性能的过程。PSO优化前后对比显示了优化效果。算法基于CNN、LSTM和Attention机制构建CNN-LSTM-Attention模型,利用PSO调整模型超参数。代码示例展示了PSO的迭代优化过程及训练、预测和误差分析环节。最终,模型的预测结果以图形形式展示,并保存了相关数据。
|
9天前
matlab使用移动平均滤波器、重采样和Hampel过滤器进行信号平滑处理
matlab使用移动平均滤波器、重采样和Hampel过滤器进行信号平滑处理
16 0
|
9天前
|
传感器 存储 数据库
matlab测量计算信号的相似度
matlab测量计算信号的相似度
13 0
|
23天前
雷达模糊函数及MATLAB仿真(三)
雷达模糊函数及MATLAB仿真
15 0
|
23天前
雷达模糊函数及MATLAB仿真(一)
雷达模糊函数及MATLAB仿真
25 0
|
23天前
雷达检测及MATLAB仿真(三)
雷达检测及MATLAB仿真
21 0
|
3月前
|
Perl
【MFAC】基于全格式动态线性化的无模型自适应控制(Matlab代码)
【MFAC】基于全格式动态线性化的无模型自适应控制(Matlab代码)

热门文章

最新文章