代码编织梦想

目录

1.源码获取方式

2.算法描述

3.部分程序

3.1matlab部分

3.2FPGA部分

4.部分仿真图预览


1.源码获取方式

使用版本matlab2022a,

Quartus II 12.1 (64-Bit),

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

获取方式1:

点击下载链接(解压密码C+123456):

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

获取方式2:

如果下载链接失效,加博主微信联系,或私信联系。

2.算法描述

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

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

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

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

3.部分程序

3.1matlab部分

clc;
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



3.2FPGA部分

所有文件如下:

顶层代码如下:

`timescale 1ns / 1ps
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 				  

4.部分仿真图预览

 

 

 

 

 01_107m

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hlayumi1234567/article/details/127116707

锁相环原理及数字化,用FPGA实现全数字高阶锁相环-爱代码爱编程

FPGA实现全数字高阶锁相环 本人通信专业大三学生,非常感谢杜勇老师的《数字通信同步技术》和《锁相环技术原理》,带领小白的我从零开始一点点了解数字同步技术。 第一次写文章,记录一下用FPGA实现二阶、三阶锁相环解调PSK信号 原理推导较多,设计过程也很详细,记录的时候也顺便重新梳理了一遍设计流程,码字不易。 锁相环原理及FPGA实现 FPGA实现全

高阶累积量四阶矩_高阶累积量-爱代码爱编程

摘要:基于高阶累积量的数字调制信号识别算法在低信噪比环境下识别率较低。针对这一问题,提出了高阶累积量的改进算法,通过调整特征参数的判别顺序先识别出MASK信号的方式,取得了较好的效果。讨论了该算法的FPGA设计,并利用Virtex-4开发板对该设计进行硬件协同仿真测试。测试结果表明,该算法在低信噪比环境下对2ASK,4ASK,4PSK,16QAM信号的

定时同步 matlab仿真,高阶QAM定时同步算法的MATLAB仿真及FPGA实现-爱代码爱编程

目前,基于软件无线电的数字接收机,其定时同步主要采用异步采样恢复,即采样时钟独立工作,通过估算定时误差,控制内插滤波器内插出最佳采样时刻的值。常用的定时误差估计算法主要有:迟早门算法、米勒-穆雷算法、Gardner算法。其中迟早门算法和米勒-穆雷算法都对载波相位敏感。Gardner算法[1]每个符号需要两个采样点,虽然计算量比米勒-穆雷算法稍大,但对载

matlab不同调制方式下性能比较,用不同调制方式实现跳/扩频混合通信的抗干扰性能...-爱代码爱编程

论文写作指导:请加QQ229366758 摘要:介绍了BPSK,QPSK,16PSK,FSK,MSK及GMSK 6种数字调制方式的特点,采用Matlab中的Simulink建立了各种调制方式实现DS/FH混合扩频系统的仿真模型。重点研究了跳/扩频通信系统在具有扫频干扰、跟踪干扰以及两者共存的环境下,采用不同调制方式时抗干扰性能的差异,并通过仿真计算误

信号抽取中定时环matlab,高阶QAM定时同步的FPGA设计实现-爱代码爱编程

摘 要: 在基于软件无线电数字接收机技术的研究中,定时同步是一项关键技术。文中设计的定时同步结构采用了基于Farrow结构的内插滤波器,同时以改进的Gardner定时误差计算方法提取采样相位误差,该方法对载波相位不敏感,可先独立于载波同步单独使用,适用于高阶QAM信号的定时同步。以128 QAM为例,对整个系统进行了仿真验证,并且在FPGA平台上实现了

matlab 双边沿滤波,一种基于数字PWM发生器的左增长双边沿UPWM信号频谱估计方法与流程...-爱代码爱编程

本发明涉及数字D类音频功放领域,尤其涉及一种由数字音频信号调制得到的左增长双边沿均匀采样脉冲宽度调制信号的频谱估计方法。 背景技术: 数字D类音频功放的电源效率相比A类、B类和AB类等线性音频功放较高,并且数字D类音频功放还具有能够直接与数字音源接口的优点,因此成为功放领域的研究热点。数字D类音频功放的结构示意图如图1所示,其通常由数字插值滤波

c语言16qam,基于FPGA的高阶QAM调制器的实现-爱代码爱编程

1 引 言 多电平正交幅度调制MQAM(Multilevel QuadratureAmplitude Modulation)是一种振幅和相位相结合的高阶调制方式,具有较高的频带利用率和较好的功率利用率。因为单独使甩振幅和相位携带信息时,不能最充分利用信号平面,这可由调制信号星座图中信号矢量端点的分布直观观察到。多进制振幅键控(MASK)调制时,矢量端

【高阶累积量】基于高阶累积量的信噪比盲估计法的matlab仿真_fpga和matlab的博客-爱代码爱编程

1.软件版本 matlab2013b 2.系统描述 所谓高阶统计量,通常是指信号的高阶矩,高阶累积量等信号统计信息的统称。在这些高阶统计量中,高阶累积量具有十分重要的重用,不同阶数的累积量可以反映出信号的不同特征,因此高阶累积量往往应用在信号分类,信号调制方式识别等领域。高阶累积量中的二阶累积量和四阶累积量可以有效抑制高斯白噪声的干扰,且对相位偏移具

自适应mser波束形成辅助接收机的matlab仿真_fpga和matlab的博客-爱代码爱编程

目录 一、理论基础 二、MATLAB程序 三、仿真结论 一、理论基础        运用波束形成技术,利用麦克风阵列估计指定方向上的混有噪声和干扰的期望信号。这些麦克风阵元位于不同的空间位置,对声波进行空间采样,然后对采样信号进行处理以衰减干扰信号并提取期望信号。这样就得到一个特定的阵列空间响应,其主瓣指向期望信号而对干扰进行陷波。  

关于ddr4的绕等长,您想知道的这本书上都有_edadoc2013的博客-爱代码爱编程

作者:一博科技高速先生成员 肖勇超 对于DDR4的设计,相信攻城狮们经历过万千项目的历练,肯定是很得心应手,应该已经有自己的独门技巧了。比如选择合适的拓扑结构,信号同组同层,容性负载补偿,加上拉电阻等等。但是对于时序方面的控制,理论上只有一个办法——绕等长,速率越高的DDR4,等长控制越严格,从±100mil,到±50mil,甚至±5mil…… 一个平平

matlab各个产品概述-爱代码爱编程

MATLAB产品概述 文章目录 1 MATLAB2 Simulink3 5G Toolbox(5G工具箱)4 Aerospace Blockset(航空区块集)5 Aerospace Toolbo

【gps载波同步】基于matlab的gps载波同步仿真-爱代码爱编程

目录 1.软件版本 2.核心代码 3.操作步骤与仿真结论 4.参考文献 5.完整源码获得方式 1.软件版本 MATLAB2021a 2.核心代码 %载波跟踪算法仿真 clc clear clf %输入信号参数定义 fd=2.45e+3; f_ref=4.092e+6; fi=(4.092e+6)+fd; fs=16.368e

【高阶循环谱】基于fpga的高阶循环谱的调制识别算法开发_fpga调制识别-爱代码爱编程

1.软件版本 matlab2013b,quartusii12.1 2.本算法理论知识 参考文献《基于高阶循环累积量的 OFDM 子载波盲估计》 3.部分源码 `timescale 1ns / 1ps module C4012_cal( i_clk, i_rst, i_din, o_C40