频率的工程测量01 - Rif算法的构造

devtools/2024/9/22 15:45:22/

1.原始文档

《用于正弦波频率估计的修正I-Rife算法》,王哲文,2024
DOI: 10. 16337/j. 1004‑9037. 2024. 02. 019

1.1 这篇论文所属的自科基金U21A20500:近5年所承担的重要科研项目表-智能感知系统与安全教育部重点实验室(湖北大学)

2.问题速记

2.1 摘要部分

  1. 量化频点的因素
    1. 为啥接近量化频谱点处会有更大的误差?他不应该更小吗?
    2. 文章的中心是Rif算法的性能和误差分析以及针对性改进
    3. 0.5 pt???how?
    4. 论文复杂度与I-Rif相当
  2. I-Rif算法
    1. 移频因子
    2. Rif算法区别
    3. 修正的基本逻辑
  3. 克拉美-罗下界
    1. 均方根误差 
    2. Cramer-Rao lower Bound
  4. 关键词:
    1. 频率估计Freq estimation
    2. 细化谱 spectrum subdivision
    3. CRLB
  5. 中国分类TN957.51
  6. 文献标志码:A
  7. Sinusoid Wave

2.2 引言部分

  1. 调频连续波Frequency modulation continuous waveFMCW)雷达
    1. 混频
    2. 中频信号
    3. 距离速度

3.频率估计的途径

  1. Abatzoglou 最大似然估计最大似然估计(Maximum likelihood ML)算法
  2. FFT 频谱泄露、栅栏效应
    1. 信噪比较低时误差很大
    2. 基于FFT的插值算法
      1. 三谱线插值法
      2. 迭代差值法
      3. 抛物线内插
      4. 双线性对称频率内插
      5. Rif算法
  3. 异频相位处理
  4. 全相位时移相位差频率估计
  5. 能量重心矫正法
  6. 相位差分算法
  7. 频谱细化方法的Zoom‑FFT算法
  8. 线性调频变换CZT算法

ML慢而精确。RIf快,Zoom-FFT, CZT性能很好但无法满足实时解析场景。

3.1 Rif算法

  • Rife1970年提出,利用幅度最高谱线与相邻谱线,差值,确定真实频率。
  • 当信噪比过低或其真实频率接近量化频率时,易出现插值方向的错误从而引起较大的
    误差。
  • Quinn提出用最大谱线,次大谱线的之比的实部来替代幅值之比
  • 邓帧淼M-Rif,引入移频原理,将估计的频率移到两个量化频率中心,再差值,移频量固定1/3
    • 有时需要二次移频
  • 王宏位I-Rif,频谱细化,移频
  • 孙宏君P-Rif,相角
    • A-P-Rif幅值相角判据的改进频移门限值来确定是否使用相角判据,得到了精度更高的估计性能
  • 叶茂Z-Rif
    • 在A-P-Rif上,幅值相角规律
  • NianA-Rif
    • 基于估计

3.2 Rif算法的实际性能与误差

4.Python重现Rif算法和上述现象

4.1 准备信号源

我的基本信号处理对象是振动信号,这里生成了一个冲击性振动信号,很简单:

叠加了幅度为信号-20db的高斯噪声。生成代码参见附录B 冲击信号模拟源

4.2 使用不同的采样率去采集信号源,生成多组采样数据

附录A 一些可用的三方库

1. specutils

这是一个用于天文观测雷达信号的解析库,作为一个完整领域的信号分析库,可以用来对信号处理的可能问题和算法有一个大致的第一印象。

download from: specutils · PyPId

doc:​​​​Specutils Documentation — specutils v1.15.1.dev0+gce3f43c.d20240501

附录B 源码

1. 冲击信号模拟源

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 获取当前脚本文件所在目录的父目录,并构建相对路径
import os
import sys
current_dir = os.path.dirname(os.path.abspath(__file__))
project_path = os.path.join(current_dir, '..')
sys.path.append(project_path)
sys.path.append(current_dir)
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rcParams
from scipy.signal import get_window# 设置中文字体
rcParams['font.sans-serif'] = ['SimHei']  # 指定中文字体
rcParams['axes.unicode_minus'] = False  # 解决负号问题# 参数设置
fs = 10000  # 采样频率 (Hz)
f_signal = 181.5  # 信号频率 (Hz)
rms_signal = 5e-3  # 信号 RMS (m/s)
duration = 1  # 信号持续时间 (秒)
pulse_duration = 1 / (100 * f_signal)  # 脉冲持续时间 (秒)# 生成时间序列
t = np.arange(0, duration, 1/fs)# 生成冲击性振动信号(脉冲信号)
pulse_start = int(fs * (duration / 2 - pulse_duration / 2))
pulse_end = int(fs * (duration / 2 + pulse_duration / 2))
signal = np.zeros_like(t)
signal[pulse_start:pulse_end] = rms_signal * np.sqrt(2)# 生成高斯噪声
rms_noise = rms_signal * 0.1
noise = rms_noise * np.random.randn(len(t))# 将信号和噪声相加
signal_with_noise = signal + noise# 绘图
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.plot(t, signal, label='冲击性振动信号')
plt.title('冲击性振动信号')
plt.xlabel('时间 (秒)')
plt.ylabel('幅值')
plt.legend()plt.subplot(1, 2, 2)
plt.plot(t, signal_with_noise, label='含噪声信号', color='red')
plt.title('含噪声的冲击性振动信号')
plt.xlabel('时间 (秒)')
plt.ylabel('幅值')
plt.legend()plt.tight_layout()
plt.show()


http://www.ppmy.cn/devtools/88357.html

相关文章

vue3+vite全局引入less变量和函数

需要在vite配置 plugins: [css: {preprocessorOptions: {less: {additionalData: import "./src/styles/variables.module.less"; import "./src/views/Visualization/component/ViewportCom/px2viewport.less";,javascriptEnabled: true}}}, ]多个文件按…

校园水电费管理小程序的设计

管理员账户功能包括:系统首页,个人中心,学生管理,教师管理,宿舍信息管理,学生缴费管理,教师缴费管理,系统管理 微信端账号功能包括:系统首页,我的 开发系统…

主动学习实现领域自适应语义分割

领域自适应语义分割是指在一个领域上训练的语义分割模型能够有效地应用到另一个不同但相关的领域。主动学习是通过智能选择最有价值的数据进行标注,以提高模型的性能和效率。将这两者结合起来,可以实现高效的领域自适应语义分割。 以下是实现主动学习和…

Go语言中获取tls中的KeyLogFile,用于dubug

文章目录 获取KeyLogFile示例代码:1. client2. client3. 效果 获取KeyLogFile tls.config自带了接口,所以配置的时候只需要打开就行,以客户端为例 keylogfile 是一个 io.Writer 开了这个就自动使用了 keyLogFile, _ : os.OpenFile(keyLogFi…

Java 面试常见问题之——抽象类和接口的区别

Java 面试常见问题之——抽象类和接口的区别 Java 中抽象类和接口有以下一些区别: 1. 定义方式: 抽象类使用 abstract 关键字修饰。接口使用 interface 关键字定义。 2. 继承/实现: 类只能继承一个抽象类(单继承)…

Django函数视图和类视图

函数视图 1.全局环境的urls.py引入映入应用的urls,避免后期开发路由过多而导致杂乱 from django.contrib import admin from django.urls import path, includeurlpatterns [path(account/, include(account.urls)),#使用include函数引入,表示account…

鸿蒙系统开发【加解密】安全

加解密 介绍 本示例使用cryptoFramework接口的Cipher对象相关方法实现了字符串加解密算法,包括RSA加密算法与AES加密算法。 RSA加密算法:RSA公开密钥密码体制是一种使用不同的加密密钥与解密密钥,由已知加密密钥推导出解密密钥在计算上是不…

设计模式 策略模式(Strategy Pattern) C++表达

设计模式 策略模式(Strategy Pattern) C表达 flyfish 策略模式(Strategy Pattern)是一种行为设计模式,它的核心思想是将一系列相关的算法或行为封装到独立的策略类中,并使得这些策略可以相互替换。主要用…