基于分数阶傅里叶变换的chirp信号检测与参数估计(原理附代码)

article/2025/10/4 0:15:40

线性调频信号(chirp信号)

顾名思义,该信号的频率随着时间线性变换,其复数表达形式如下:
s ( t ) = e 2 j π ( f 0 t + 0.5 μ t 2 ) s(t)=e^{2j\pi(f_0 t+ 0.5\mu t^2)} s(t)=e2(f0t+0.5μt2)
根据欧拉公式,其相位项为 2 π ( f 0 t + 0.5 μ t 2 ) ) 2\pi(f_0 t+ 0.5\mu t^2)) 2π(f0t+0.5μt2))。信号的角频率是相位对时间的导数。对相位求导后有 2 π ( f 0 + μ t ) 2\pi(f_0+\mu t) 2π(f0+μt),显然, f 0 f_0 f0表示线性调频起始频率, μ \mu μ表示调频斜率。

下面设一个线性调频信号,起始频率 f 0 = 24 G H z f_0=24GHz f0=24GHz,调频带宽 B = 10 G H z B=10GHz B=10GHz,采样频率为 f s = 240 G H z f_s=240GHz fs=240GHz,采样时宽 T = 100 n s T=100ns T=100ns,据此可以计算调频斜率为 μ = B / T = 1 0 17 H z / s \mu=B/T=10^{17} Hz/s μ=B/T=1017Hz/s(注:参数仅供参考,并未考虑实际可行性)

对该信号添加一个信噪比为 5 5 5dB的高斯白噪声,可以得到其时域图如下所示:
在这里插入图片描述
上方的图是前1e-9秒的信号,下放的图是最后1e-9秒的信号,可以看出信号变得“紧密”了一些,这是因为频率从 24 G H z 24GHz 24GHz线性上升到了 34 G H z 34GHz 34GHz

利用fft观察双边频谱如下图
在这里插入图片描述
虽然噪声很大,但是也可以大致看出,在 24 G H z 24GHz 24GHz 34 G H z 34GHz 34GHz的频带上幅度较高。
这张图还可以说明,一般的傅里叶变换对chirp信号的检测能力不足,噪声稍大一些就会淹没信号。下面利用分数阶傅里叶变换处理chirp信号。

分数阶傅里叶变换检测chirp信号

线性调频信号作为一种典型的非平稳信号,具有大时宽带宽积的特殊优势,广泛应用于雷达、通信、地质探测和声呐信号处理等研究领域。因此,研究线性调频信号具有十分重要的意义。分数阶傅里叶变换实质上是一种线性变换,它不仅可以理解为chirp基分解,还没有交叉干扰的问题。所以,分数阶傅里叶变换特别适合用来处理chirp类信号。[1]

我的理解:就像平面任意一个矢量可以分解为x,y两个基向量一样,任意一个线性调频信号也可以分解成两个chirp基。只要选择对了合适的阶数,分数阶傅里叶变换就可以在把这个chirp信号的能量集中在这个方向上的基向量上,形成一个冲激脉冲(易于检测),而一般的傅里叶变换通常并不在这个“最优方向”上,所以能量散开,具有了一定的带宽,不利于检测。
(以上想法仅供参考,不保证正确性)

分数阶傅里叶变换的原理及其快速算法(Ozakats算法)的MATLAB实现在我的另一篇博客中:分数阶傅里叶变换(FrFT)详细原理与matlab代码实现

下面从最基础的分数阶傅里叶变换公式入手[2]:
在这里插入图片描述
式中的 B a ( x , x ′ ) B_a(x,x') Ba(x,x)表示卷积核, f ( x ) f(x) f(x)表示信号, x ′ x' x表示与 x x x不同的变量而不是导数。
将上述线性调频信号的公式代入,合并指数项,可以得到积分号里面的表达式为:
B a ( x , x ′ ) f ( x ′ ) = A ϕ exp ⁡ ( i π ( x 2 cot ⁡ ϕ ) − 2 x x ′ csc ⁡ ϕ + x ′ 2 cot ⁡ ϕ ) ⋅ exp ⁡ ( i π μ x ′ 2 + 2 i π f 0 x ′ ) = A ϕ exp ⁡ ( i π ( x 2 cot ⁡ ϕ ) + 2 x ′ ( f 0 − x csc ⁡ ϕ ) + x ′ 2 ( μ + cot ⁡ ϕ ) ) B_a(x,x')f(x')=A_\phi \exp(i\pi(x^2\cot\phi)-2xx'\csc\phi+x'^2\cot\phi)\cdot\exp(i\pi\mu x'^2+2i\pi f_0x')\\=A_\phi \exp(i\pi(x^2\cot\phi)+2x'(f_0-x\csc\phi)+x'^2(\mu+\cot\phi)) Ba(x,x)f(x)=Aϕexp((x2cotϕ)2xxcscϕ+x′2cotϕ)exp(μx′2+2f0x)=Aϕexp((x2cotϕ)+2x(f0xcscϕ)+x′2(μ+cotϕ))
该积分是对 x ′ x' x变量积分,于是着重观察含 x ′ x' x的项,包括一次项 2 x ′ ( f 0 − x csc ⁡ ϕ ) 2x'(f_0-x\csc\phi) 2x(f0xcscϕ)和二次项 x ′ 2 ( μ + cot ⁡ ϕ ) x'^2(\mu+\cot\phi) x′2(μ+cotϕ).

调整阶数 a a a,使得 μ = − cot ⁡ ϕ \mu=-\cot\phi μ=cotϕ,消去二次项。

在没有二次项的条件下,再假设 x = f 0 / csc ⁡ ϕ x=f_0/\csc\phi x=f0/cscϕ,消去一次项,于是积分内部没有 x ′ x' x,可以去掉积分号,变换结果为 A ϕ exp ⁡ ( i π x 2 cot ⁡ ϕ ) A_\phi\exp(i\pi x^2\cot\phi) Aϕexp(x2cotϕ),代入 x = f 0 / csc ⁡ ϕ x=f_0/\csc\phi x=f0/cscϕ,显然这是一个非零项。
如果 x ≠ f 0 / csc ⁡ ϕ x\neq f_0/\csc\phi x=f0/cscϕ,就会出现一个一次项的积分。由于 sin ⁡ t \sin t sint cos ⁡ t \cos t cost的周期性,其无穷积分等于零,再根据欧拉公式,有下式成立:
∫ − ∞ ∞ e i t d t = 0 \int^\infty_{-\infty} e^{it}dt=0 eitdt=0
因此一次项的存在会使整个积分为0,换句话说,该积分只有在 x = f 0 / csc ⁡ ϕ x=f_0/\csc\phi x=f0/cscϕ处有值,而在其它地方为0,类似于冲激函数。
在二次项存在的情况下,该积分就没有上述性质,能量散开,不易检测。

参考文献[1]总结了利用分数阶傅里叶变换检测chirp信号的步骤以及参数估计的公式:
在这里插入图片描述
其中 α 0 \alpha_0 α0在上文中指 ϕ \phi ϕ。整个问题变成了一个二维最优化问题,优化目标是最大化分数阶傅里叶变换函数的值,参数为阶数 a a a和频率 x x x

注意,在实际操作中发现上述参数估计方程并不正确。进一步查阅文献并参考了他人代码后发现,上述参数估计方程是适用于连续函数的,在实际的计算机中都是离散信号,因此 μ 0 \mu_0 μ0需要使用归一化调频斜率 k = B f s k=\frac{B}{f_s} k=fsB,且 x csc ⁡ ϕ x\csc\phi xcscϕ实际是中心频率而不是起始频率。


2022.10.3学习更新:
此处得出的确实是中心频率,原因是本文的信号是[0,T]范围内的,而上述推导过程包括参数归一化是在[-T/2,T/2]范围内的,当信号时间处于这个范围内,估计出来的频率确实是初始频率。
有前辈也有这个疑惑,参见matlab论坛https://www.ilovematlab.cn/thread-277599-1-1.html


仿真

在例如汽车防撞雷达等一些场景中,我们提前知道要检测的chirp信号参数,可以直接根据参数估计分数阶傅里叶分解的阶数,进而直接检测目标信号。
假设我们使用上文中的chirp参数,首先求解归一化调频斜率 k = B f s = 0.0417 k=\frac{B}{f_s}=0.0417 k=fsB=0.0417
代入参数估计公式中,计算旋转角度 ϕ = a r c c o t ( − k ) = − 1.5292 \phi=arccot(-k)=-1.5292 ϕ=arccot(k)=1.5292,然后计算阶次 a = ϕ / π 2 = − 0.9735 a=\phi/\frac{\pi}{2}=-0.9735 a=ϕ/2π=0.9735
负数不影响结果,实际上分数阶傅里叶变换周期为4,而对于chirp信号检测来说, cot ⁡ ( ϕ ) = cot ⁡ ( ϕ + π ) , \cot(\phi)=\cot(\phi+\pi), cot(ϕ)=cot(ϕ+π)周期进一步缩小为2。

对chirp信号做阶数为-0.9735的分数阶傅里叶变换,得到如下时频域图:
在这里插入图片描述
由图可以看出,信号在2.8976e10的位置出现了一个非常大的峰值,相比于fft的频域图像,显然这个峰值更容易检测到。因此使用分数阶傅里叶变换比一般的傅里叶变换更抗噪声干扰。

x = 2.8976 e 10 x=2.8976e10 x=2.8976e10,估计信号的中心频率为 x csc ⁡ ϕ = 29 G h z x\csc\phi=29Ghz xcscϕ=29Ghz,因此可以推算出起始频率为24Ghz,与预设相符。

代码

close all
fs=24e10;%采样频率
T=1e-7;%时宽
B=10e9;%带宽
mu=B/T;%调频率
n=round(T*fs);%采样点个数
t=linspace(0,T,n);
f0=24e9;%起始频率
s=exp(2j*pi*(f0*t+0.5*mu*t.^2));
SNR=5;%信噪比
s=awgn(s,SNR);%添加一定信噪比的高斯白噪声figure
subplot(211)
plot(t,real(s))%时域图
title("调频信号时域")
xlabel("t/s")
xlim([0,1e-9])
grid onsubplot(212)
plot(t,real(s))%时域图
title("调频信号时域")
xlabel("t/s")
xlim([T-1e-9,T])
grid onfigure
S=fftshift(fft(real(s))./n);
f=linspace(-fs/2,fs/2-1,n);%频域横坐标,注意奈奎斯特采样定理,最大原信号最大频率不超过采样频率的一半
plot(f,abs(S))%频域图
title("发射信号频域")
xlim([-50e9,50e9])
grid onk=B/fs;%归一化调频斜率
a=acot(-k)/(pi/2);%以归一化调频斜率估计阶次
% a=pi/2+atan(n-1)*mu/fs^2;
% for a=0.9:0.01:1
figure
S=myfrft(real(s),a);
f=linspace(-fs/2,fs/2-1,n);%频域横坐标,注意奈奎斯特采样定理,最大原信号最大频率不超过采样频率的一半
plot(f,abs(S))%频域图
title("发射信号时频域")
% xlim([0,fs/2-1])
title("a="+num2str(a))
grid on
% endfh_=abs(f(abs(S)==max(abs(S)))*csc(a*pi/2));%估计的中心频率
f0_=fh-B/2;%估计的起始频率

参考文献

[1] 渠莹,杨俊. 基于分数阶傅里叶变换的LFM信号参数估计[J]. 物联网技术,2017,7(11):30-32. DOI:10.16667/j.issn.2095-1302.2017.11.006.
[2] OZAKTAS H.M., ARIKAN O… Digital computation of the fractional Fourier transform[J]. IEEE Transactions on Signal Processing: A publication of the IEEE Signal Processing Society,1996,44(9):2141-2150.


注:本人系初学者,以上仅为个人学习笔记,可能存在错误,有任何问题欢迎在评论区讨论。本文将会随着学习理解的加深而继续修改。


http://chatgpt.dhexx.cn/article/W9Z3WgT7.shtml

相关文章

Chirp信号及其生成

Chirp信号是一个典型的非平稳信号,在通信、声纳、雷达等领域具有广泛的应用。 简介 Chirp译名:啁啾(读音:“周纠”),是通信技术有关编码脉冲技术中的一种术语,是指对脉冲进行编码时,其载频在脉冲…

什么是chirp信号

什么是chirp信号?(翻译自维基百科) 维基百科是这样说的: A chirp is a signal in which the frequency increases (up-chirp) or decreases (down-chirp) with time。 也就是说:是频率随着时间增加或减小的信号。 …

Chirp信号简单介绍

1.定义:chirp指的是频率随时间增加或减少的信号。它通常应用于声纳、雷达和激光系统,以及其他应用,如扩频通信。(大多数情况也可称为线性chirp信号,但其实chirp信号未必是线性的) 2.公式推导理解&#xff…

Chirp信号基础知识及matlab实现

Chirp信号的表达式如下: x ( t ) e x p ( j 2 π ( f 0 t 1 2 k t 2 ) ) x(t)exp(j2\pi (f_0t\frac{1}{2} kt^2)) x(t)exp(j2π(f0​t21​kt2)) 其中, f 0 f_0 f0​ 称作起始频率,k为调频率 对相位进行求导,得到角频率以及频率随时间的线…

项目通信之RPC调用——java简单实现

微服务项目通信方法很多,有像springcloud解决方案的http通信,还有像阿里Dubbo的RPC通信,这里简单实现RPC调用。一共2个端,客户端server和客户端client.项目demo很简单,就不多讲了,看代码好了。 下面是服务…

RabbitMQ消息队列之RPC调用

我们知道现在市面上的RPC框架很多,但是如何用我们的RabbitMQ去实现一个RPC调用呢?这就是我们这篇文章所要讲解的内容。 如果有阅读过我写的博客的大兄弟们,可能会知道,我有个习惯就是学习技术喜欢去看官方文档,同样对于…

rpc调用过程原理分析以及Dubbo、Feign调用过程

RPC简介 RPC是远程过程调用(Remote Procedure Call)的缩写形式。 RPC调用流程图 客户端方法:服务调用方所调用的接口 客户端代理:将接口封装成代理对象,并序列化请求参数、反序列化响应结果,使用远程传输…

SpringBoot+RabbitMQ 实现 RPC 调用

说到 RPC(Remote Procedure Call Protocol 远程过程调用协议),小伙伴们脑海里蹦出的估计都是 RESTful API、Dubbo、WebService、Java RMI、CORBA 等。 其实,RabbitMQ 也给我们提供了 RPC 功能,并且使用起来很简单。 …

消息中间件RabbitMQ(五)——实现RPC调用

文章目录 1. RPC2. 实现原理3. 代码实现3.1 客户端实现3.2 服务端实现3.3 测试 4. 小结 1. RPC 对于微服务开发者,对于 RPC(Remote Procedure Call Protocol 远程过程调用协议)并不会陌生吧, RESTful API、Dubbo、WebService等都…

springcloud 远程rpc调用接口

springcloud 如果想要从注册中心中调用已经注册的接口,需要用如下方法。 我们现在已经将一个微服务注册到了注册中心。端口是8083的那个 并且里面有个member的RequestMapping 首先,创建一个微服务,将需要的依赖放入pom.xml和配置好apppli…

浅谈RPC调用过程

RPC(Remote Procedure Call) - 远程过程调用,是一个计算机通信协议,它允许运行于一台计算机的程序调用另一台计算机的子程序,而无需额外地为这个交互作用编程。RPC主要应用在分布式系统架构中不同的系统之间的远程通信和相互调用。 举个例子…

远程RPC调用用于js逆向

这里只是记录于学习,资源来自于大佬的github,有十分详细的介绍,我仅仅拿来一用。https://github.com/jxhczhl/JsRpc。(注RPC在某些网站会被检测到) 在右侧下载适合自己系统的exe文件,双击打开 练习对象是某…

使用 webservice 实现 RPC 调用

WebService 介绍 Web service 是一个平台独立的,低耦合的 web 的应用程序用于开发分布式的互操作的应用程序。Web Service 技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。 SO…

RPC调用链通信方法

RPC调用链可以将远程过程调用变成一个有效的堆栈。 当我们编写应用程序时,我们中的许多人认为REST是服务间通信的一个通用标准。然而,还有许多其他形式的通信,RPC就是其中之一。值得注意的是,通信方式的选择取决于许多因素&#…

使用Dubbo实现简单的RPC调用(Spring配置文件版)

更多文章和资源欢迎访问:SuperCoder Blog 文章目录 更多文章和资源欢迎访问:[SuperCoder Blog](https://supercoder.com.cn)前言一、Dubbo架构二、安装zookeeper三、代码实战1. 创建服务提供方2. 创建服务消费方 四、服务调用 前言 Dubbo是阿里巴巴公司…

用一个简单的函数来理一下RPC调用过程

1.什么是RPC RPC(Remote Procedure Call)远程过程调度,简单的理解就是一个节点请求另一个节点的提供的服务。 2.远程调用要面临的三个问题。 (1)Call ID映射。本地调用中,函数体是直接通过函数指针来指定…

Dubbo的RPC调用流程

首先在客户端启动时会从注册中心拉去和订阅对应的服务列表,Cluster会把拉取到的服务列表聚合成一个cluster,每次RPC调用前会通过Directory#list获取providers地址(已经生成好的invoker列表),获取这些服务列表给后续路由和负载均衡使用,框架内…

RPC 调用原理

RPC调用原理 RPC原理 RPC(Remote Procedure Call)即远程过程调用,允许一台计算机调用另一台计算机上的程序得到结果,而代码中不需要做额外的编程,就像在本地调用一样。分布式的应用可以借助RPC来完成服务之间的调用。 RPC框架原理 在RPC框架…

RPC调用完整流程

RPC调用完整流程:   调用方持续把请求参数对象序列化成二进制数据,经过 TCP 传输到服务提供方;服务提供方从 TCP 通道里面接收到二进制数据;根据 RPC 协议,服务提供方将二进制数据分割出不同的请求数据,经…

RPC调用

1.RPC调用、本地调用和HTTP调用 网络调用一般是基于HTTP协议进行调用,RPC是使用TCP或者UDP协议进行调用,效率上回更好; 常用的RPC框架有Thrift、GRPC等; 2.RPC的调用时序图 1)调用方调用Proxy请求服务,并…