白噪声下真实正弦波的精确频率估计研究(Matlab代码实现)

2023-12-05

???????????????? 欢迎来到本博客 ❤️❤️????????

????博主优势: ???????????? 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️ 座右铭: 行百里者,半于九十。

???????????? 本文目录如下: ????????????

目录

????1 概述

????2 运行结果

????3 参考文献

????4 Matlab代码及数据


????1 概述

在白噪声下,真实正弦波的精确频率估计是一个重要的研究课题,因为白噪声会对信号的频率进行干扰,使得频率估计变得困难。下面是一些常用的方法来进行真实正弦波的精确频率估计研究:

1. 傅里叶变换:通过对信号进行傅里叶变换,可以得到信号的频谱信息,从而可以估计出频率。然而,在白噪声下,信号的频谱可能会被噪声掩盖,导致频率估计的不准确性。

2. 自相关函数:自相关函数可以用来评估信号中重复出现的模式,从而可以用来估计信号的频率。然而,在白噪声下,自相关函数的峰值可能会被噪声掩盖,导致频率估计的不准确性。

3. 峰值检测:通过寻找信号的峰值来进行频率估计。然而,在白噪声下,峰值可能会被噪声掩盖,导致频率估计的不准确性。

4. 希尔伯特变换:希尔伯特变换可以将信号从时域转换到频域,从而可以得到信号的频率信息。然而,在白噪声下,希尔伯特变换可能会受到噪声的影响,导致频率估计的不准确性。

综上所述,白噪声下真实正弦波的精确频率估计是一个复杂的问题,需要综合运用多种方法来进行研究和解决。在实际应用中,可以根据具体的情况选择合适的方法来进行频率估计。

???? 2 运行结果

可视化代码:

figure()
semilogy(SNRdB,CRLB/Fs*N,'--ks',SNRdB,RMSEBin(:,1),'-mo',SNRdB,RMSEBin(:,2),'-r*',...
SNRdB,RMSEBin(:,3),'-gd',SNRdB,RMSEBin(:,4),'-c.',SNRdB,RMSEBin(:,5),'-b^',...
SNRdB,RMSEBin(:,6),'-bv','LineWidth',1.2)
legend('CRLB','Proposed, second','Proposed, third','PSVD [5]','Djukanovic [9]','Ye [12],\it{T}=2','Ye [12],\it{T}=4')
xlabel('SNR(dB)')
ylabel('RMSE(in DFT bins)')
axis([-10,60,5*10^-5,20])
grid on
saveas(gcf,'..\results\Fig1.png')

%% Fig 2
Fs = 1; % Sampling frequency
N = [16 64 256 1024 4096]; % Number of samples
A = 1; % Half of Amplitude
SimTimes = 2000; % Number of simulation
SNRdB = 20; % SNR
RMSE = zeros(length(N),6); % RMSE
CRLB = sqrt(3*Fs^2./(pi^2*N.*(N.^2-1)*10.^(SNRdB/10))).'; % CRLB

for ii = 1:length(N)
ErrF = zeros(SimTimes,6); % Error of frequency estimation
for jj = 1:SimTimes
F = Fs/N(ii)*1.2; % Frequency
P = rand*2*pi; % Initial Phase
n = (0:N(ii)-1).';
s = 2*A*cos(2*pi*F/Fs*n+P); % real sinusoid
Ps = mean(s.^2); % Signal power
Pn = Ps/(10^(SNRdB/10)); % Noise Power
w = sqrt(Pn)*randn(N(ii),1);
s = w+s; % AWGN channel

EstF = ProposedInitial(s,Fs); % Initial estimate of proposed algorithm
ErrF(jj,1) = abs(EstF-F);
if ErrF(jj,1)>Fs/2
ErrF(jj,1) = Fs-ErrF(jj,1);
end

EstF = ProposedFine(s,Fs); % Fine estimate of proposed algorithm
ErrF(jj,2) = abs(EstF-F);
if ErrF(jj,2)>Fs/2
ErrF(jj,2) = Fs-ErrF(jj,2);
end

EstF = PSVD(s,Fs);
ErrF(jj,3) = abs(EstF-F);
if ErrF(jj,3)>Fs/2
ErrF(jj,3) = Fs-ErrF(jj,3);
end

EstF = Djukanovic(s,Fs);
ErrF(jj,4) = abs(EstF-F);
if ErrF(jj,4)>Fs/2
ErrF(jj,4) = Fs-ErrF(jj,4);
end

EstF = Ye(s,Fs,2); % Ye algorithm with T=2
ErrF(jj,5) = abs(EstF-F);
if ErrF(jj,5)>Fs/2
ErrF(jj,5) = Fs-ErrF(jj,5);
end

EstF = Ye(s,Fs,4); % Ye algorithm with T=4
ErrF(jj,6) = abs(EstF-F);
if ErrF(jj,6)>Fs/2
ErrF(jj,6) = Fs-ErrF(jj,6);
end


end
RMSE(ii,:) = sqrt(mean(ErrF.^2)); % RMSE in DFT bins
end
RMSEBin = RMSE/Fs.*repmat(N.',1,6); % RMSE in DFT bins
figure()
semilogy(log2(N),CRLB/Fs.*N.','--ks',log2(N),RMSEBin(:,1),'-mo',log2(N),RMSEBin(:,2),'-r*',...
log2(N),RMSEBin(:,3),'-gd',log2(N),RMSEBin(:,4),'-c.',log2(N),RMSEBin(:,5),'-b^',...
log2(N),RMSEBin(:,6),'-bv','LineWidth',1.2)
legend('CRLB','Proposed, second','Proposed, third','PSVD [5]','Djukanovic [9]','Ye [12],\it{T}=2','Ye [12],\it{T}=4')
xlabel('log_2\it{N}')
ylabel('RMSE(in DFT bins)')
grid on
saveas(gcf,'..\results\Fig2.png')

%% Fig 3
Fs = 1; % Sampling frequency
N = 1024; % Number of samples
A = 1; % Half of Amplitude
SimTimes = 1000; % Number of simulation
SNRdB = 20; % SNR
x = [0.55:0.25:2.05,3,6:N/2/9:N/2-6,N/2-3,N/2-2.05:0.25:N/2-0.55]; % Frequency in DFT bins
F = x*Fs/N; % Frequency in Hz
RMSE = zeros(length(F),6); % RMSE
CRLB = sqrt(3*Fs^2./(pi^2*N.*(N.^2-1)*10.^(SNRdB/10)))*ones(length(F),1); % CRLB

for ii = 1:length(F)
ErrF = zeros(SimTimes,6);
CRLBInst = zeros(SimTimes,1);
for jj = 1:SimTimes
P = rand*2*pi; % Initial Phase
n = (0:N-1).';
s = 2*A*cos(2*pi*F(ii)/Fs*n+P); % real sinusoid
Ps = mean(s.^2); % Signal power
Pn = Ps/(10^(SNRdB/10)); % Noise Power
w = sqrt(Pn)*randn(N,1);
s = w+s; % AWGN channel

EstF = ProposedInitial(s,Fs); % Initial estimate of proposed algorithm
ErrF(jj,1) = abs(EstF-F(ii));
if ErrF(jj,1)>Fs/2
ErrF(jj,1) = Fs-ErrF(jj,1);
end

EstF = ProposedFine(s,Fs); % Fine estimate of proposed algorithm
ErrF(jj,2) = abs(EstF-F(ii));
if ErrF(jj,2)>Fs/2
ErrF(jj,2) = Fs-ErrF(jj,2);
end

EstF = PSVD(s,Fs);
ErrF(jj,3) = abs(EstF-F(ii));
if ErrF(jj,3)>Fs/2
ErrF(jj,3) = Fs-ErrF(jj,3);
end

EstF = Djukanovic(s,Fs);
ErrF(jj,4) = abs(EstF-F(ii));
if ErrF(jj,4)>Fs/2
ErrF(jj,4) = Fs-ErrF(jj,4);
end

EstF = Ye(s,Fs,2); % Ye algorithm with T=2
ErrF(jj,5) = abs(EstF-F(ii));
if ErrF(jj,5)>Fs/2
ErrF(jj,5) = Fs-ErrF(jj,5);
end

EstF = Ye(s,Fs,4); % Ye algorithm with T=4
ErrF(jj,6) = abs(EstF-F(ii));
if ErrF(jj,6)>Fs/2
ErrF(jj,6) = Fs-ErrF(jj,6);
end

end
RMSE(ii,:) = sqrt(mean(ErrF.^2,1));
end
RMSEBin = RMSE/Fs*N; % RMSE in DFT bins
figure()
semilogy(x,CRLB/Fs*N,'--ks',x,RMSEBin(:,1),'-mo',x,RMSEBin(:,2),'-r*',...
x,RMSEBin(:,3),'-gd',x,RMSEBin(:,4),'-c.',x,RMSEBin(:,5),'-b^',...
x,RMSEBin(:,6),'-bv','LineWidth',1.2)
legend('CRLB','Proposed, second','Proposed, third','PSVD [5]','Djukanovic [9]','Ye [12],\it{T}=2','Ye [12],\it{T}=4')
xlabel('\it{Nf/fs}')
ylabel('RMSE(Hz)')
axis([0,512,1*10^-3,1])
grid on
saveas(gcf,'..\results\Fig3.png')

????3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

[1] Ying X , Shu-Xiong L , Jun-Xun Y .Frequency estimation of single complex sinusoid in white Gaussian noise[J].Journal of China Institute of Communications, 2002.DOI:10.1002/mop.10502.

[2] Liu S , Xu W , Wang Z .An Accurate Frequency Estimator of Single Sinusoid in Gaussian Colored Noise.[C]//International Conference on Innovative Computing.IEEE, 2006.DOI:10.1109/ICICIC.2006.227.

[4]丁志中.白噪声背景下正弦信号频率和功率估计的有效算法[J].合肥工业大学学报:自然科学版, 1995, 18(4):6.DOI:CNKI:SUN:HEFE.0.1995-04-002.

[5]吴珊珊胡国兵丁宁汤滟.正弦波频率估计结果的可靠性评估算法研究[J].现代雷达, 2015, 37(3):31-35.

???? 4 Matlab代码及数据

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

白噪声下真实正弦波的精确频率估计研究(Matlab代码实现) 的相关文章

  • opencv中矩阵的超快中值(与matlab一样快)

    我正在 openCV 中编写一些代码 想要找到一个非常大的矩阵数组 单通道灰度 浮点数 的中值 我尝试了几种方法 例如对数组进行排序 使用 std sort 和选择中间条目 但与 matlab 中的中值函数相比 它非常慢 准确地说 在 ma
  • 如何获取活动对象 MATLAB GUI 的句柄

    我正在尝试使用 MATLAB GUI 创建日历 我有两个Edit Text对象 edittext1 and edittext2 我想做这个 我把光标放在edittext1然后在日历中选择日期 它会进入文本字段edittext1 同样对于ed
  • 在 MATLAB 中用两个值替换向量值

    我必须创建一个以向量作为输入的函数v和三个标量a b and c 该函数替换了的每个元素v等于a有一个二元素数组 b c 例如 给定v 1 2 3 4 and a 2 b 5 c 5 输出将是 out 1 5 5 3 4 我的第一次尝试是尝
  • 傅里叶变换定理 matlab

    我目前正在尝试理解二维傅里叶位移定理 根据我到目前为止所了解到的情况 图像空间中的平移会导致相位差异 但不会导致频率空间中的幅度差异 我试图用一个小例子来演示这一点 但它只适用于行的移位 而不适用于列的移位 这是一个小演示 我只在这里显示幅
  • 频域和空间域的汉明滤波器

    我想通过在 MATLAB 中应用汉明滤波器来消除一维信号中的吉布斯伪影 我所拥有的是k1这是频域中的信号 我可以通过应用 DFT 来获取时域信号k1 s1 ifft ifftshift k1 该信号具有吉布斯伪影 现在 我想通过 A 乘以汉
  • 优化 MATLAB 代码(嵌套 for 循环计算相似度矩阵)

    我正在 MATLAB 中基于欧几里德距离计算相似度矩阵 我的代码如下 for i 1 N M N is the size of the matrix x for whose elements I am computing similarit
  • 为什么 MATLAB 本机函数 cov(协方差矩阵计算)使用与我预期不同的除数?

    给定一个 M 维和 N 个样本的数据矩阵数据 例如 data randn N M 我可以计算协方差矩阵 data mu data ones N 1 mean data cov matrix data mu data mu N 如果我使用原生
  • 定义自定义 Mupad 程序的一般相对搜索路径

    假设我有一个 mupad 笔记本myMupadNotebook mn在路径上 C projectFolder ABC abc 它调用程序MyMupadProcedure mu它位于 C DEF GHI 现在我有一个 Matlab 脚本mai
  • 为什么 MATLAB 在打印大量 (.png) 图形时速度会变慢?

    我正在将大量数字打印为 png 文件 每个图都是数据矩阵中的一列图 我获取 png 文件并将它们串在一起形成动画 我的问题是 前几百张图像打印得很快 但创建每个新图形的时间却迅速增加 从前几百个 png 文件的约 0 2 秒到第 800 个
  • 如何加载具有可变文件名的 .mat 文件?

    select all mat files oar dir oar mat n oar name loop through files for l 1 length oar load pat oar l lt this is the mat
  • 从 imread 返回的 ndims

    我正在从文件夹中选取图像 尺寸为128 128 为此 我使用以下代码行 FileName PathName uigetfile jpg Select the Cover Image file fullfile PathName FileNa
  • 检查图像中是否有太薄的区域

    我正在尝试验证雕刻机的黑白图像 更多的是剪贴画图像 不是照片 我需要考虑的主要事情之一是区域的大小 或线条的宽度 因为机器无法处理太细的线条 所以我需要找到比给定阈值更细的区域 以此图为例 竖琴的琴弦可能太细而无法雕刻 我正在阅读有关 Ma
  • 如何为已编译的 MATLAB 创建安装程序并要求用户接受我们的许可条款?

    我正在 MATLAB 中编写程序分发给 Windows 用户 我使用 MATLAB 编译器和 MATLAB r2014a 版本来创建程序 我可以使用 MATLAB 应用程序编译器创建 Windows 安装程序 并且它的工作效果可以接受 但是
  • getappdata 在 MATLAB 中返回空矩阵

    我有一段代码 我在其中使用setappdata然后我使用以下方式调用数据getappdata即使它不为空 它也会返回一个空矩阵 我的一段简化代码如下 function edit1 Callback hObject eventdata han
  • 在 Matlab 的命令窗口中获取旧式帮助

    问题的简短版本 在最新版本的 Matlab 中 我在 Windows 上的 R2014b 和 R2015a 中看到过 当您键入help foo你得到一个简要描述 简介函数及其签名 例如 输入help bsxfun产生类似这样的东西 只有更好
  • Python 或 C 语言中的 Matlab / Octave bwdist()

    有谁知道 Matlab Octave bwdist 函数的 Python 替代品 此函数返回给定矩阵的每个单元格到最近的非零单元格的欧几里得距离 我看到了一个 Octave C 实现 一个纯 Matlab 实现 我想知道是否有人必须用 AN
  • 在 matlab 代码中使用 dll 文件

    我需要使用 Matlab 中由 dll 文件定义的函数 我有一个例子 那个家伙将 dll 转换为 mexw32 文件 但我知道我是如何做到这一点的 我尝试使用加载库但它没有创建任何文件 我怎样才能做到这一点 loadlibrary http
  • 从 MATLAB 调用 Java?

    我想要Matlab程序调用java文件 最好有一个例子 需要考虑三种情况 Java 内置库 也就是说 任何描述的here http docs oracle com javase 6 docs api 这些项目可以直接调用 例如 map ja
  • MATLAB 编译器与 MATLAB 编码器

    两者有什么区别 据我了解 MATLAB Compiler将MATLAB代码包装成 exe文件 这样就可以在不安装MATLAB的情况下使用它 并且只需要MCR 除此之外 MATLAB Builder NE 还可以用于生成与 Net 框架一起使
  • matlab中无限while嵌套在for循环中

    我想做一个while循环 嵌套在for在 Matlab 中循环以查找数据中不同对之间的距离 我的数据具有以下形式 ID lon lat time 1 33 56 40 89 803 2 32 45 41 03 803 3 35 78 39

随机推荐

  • EATON DPM-MC2通信模块

    EATON DPM MC2通信模块的产品特点包括 数据采集 能够采集电力系统或工业设备的数据 包括电流 电压 频率 功率因数等参数 以便实时监测和控制系统状态 远程监测 允许远程监测电力设备或自动化系统的性能和状态 对于远程操作 故障排除和
  • 用友与厦国会联合培训,探索智能会计时代业财融合成功模式

    在企业经营过程中 业务与财务之间的边界越来越模糊 企业的各项业务活动所形成的财务结果都会成为管理者经营决策的依据 但是很多企业财务部门与业务部门之间的断层明显 业财融合成为企业运营管理的重要发展方向 也是建设世界一流财务管理体系的重要一环
  • 对标世界一流!用友已与74家中央企业达成集团级合作!

    近年来 面对蓬勃兴起的新一轮科技革命和产业变革 国资国企贯彻落实党中央 国务院决策部署 坚持以建设世界一流企业为引领 持续深化国有企业改革 切实加大科技创新工作力度 扎实推进高质量发展 取得了阶段性的重要成效 加快推进数智化转型 发挥数据价
  • 用友BIP项目云,助力设计类项目管理高效推进

    11 1 设计类项目管理解决方案 设计是国家基础设施建设 房建建造 装备制造 武器研发 特种设备生产研发等产业链的一环 可分为工程设计 装备 设备设计 工业设计 目前国内设计行业经过几十年的发展 建设 目前已经到了整合发展和转型发展的窗口期
  • 龙芯loongarch64服务器编译安装tokenizers

    1 简介 Hugging Face 的 Tokenizers 库提供了一种快速和高效的方式来处理 即分词 自然语言文本 用于后续的机器学习模型训练和推理 这个库提供了各种各样的预训练分词器 如 BPE Byte Pair Encoding
  • BENTLY 125800-01 通讯输出接口组件

    BENTLY 125800 01 通讯输出接口组件 BENTLY 125800 01 通讯输出接口组件产品详情 Bently 125800 01 通讯模块的产品特点主要包括 机械振动监测 这种继电器模块通常用于监测旋转机械设备的振动水平 以
  • 打破卫浴行业冰山!九牧重构高端服务品牌“点线面”新秩序

    文 螳螂观察 作者 余一 说到服务 你首先会想到哪个品牌 海底捞大概率会是其中之一 一个餐饮品牌 不靠价格 口味出圈 而是凭借服务走向全球市场 古往今来或许也是头一家了 而无微不至的的服务 也成为了海底捞最突出的竞争优势 相较于产品 价格等
  • 【数据结构/C++】树和二叉树_二叉链表

    include
  • 【传输线开路和短路故障】带有集总元件的非对称传输线扩频时域反射测量(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 数据 文章讲解
  • 【C++】运算符重载

    加号运算符重载 include
  • BASLER A404K 德国工业相机

    BASLER A404K是一款德国BASLER公司生产的工业相机 通常用于各种工业视觉和图像处理应用 以下是关于BASLER A404K工业相机的详细信息 型号和规格 A404K是该工业相机的型号 通常有特定的规格和配置 如分辨率 帧速率
  • 单目相机测距(3米范围内)二维码实现方案(python代码 仅仅依赖opencv)

    总体思路 先通过opencv 识别二维码的的四个像素角位置 然后把二维码的物理位置设置为 cv Point3f HALF LENGTH HALF LENGTH 0 tl cv Point3f HALF LENGTH HALF LENGTH
  • 在异构系统中学习应用的流迭代分布式编码计算研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现
  • FOXBORO FCP270 P0917YZ控制器模块

    FOXBORO FCP270 P0917YZ控制器模块 FOXBORO FCP270 P0917YZ控制器模块产品详情 FOXBORO FCP270 P0917YZ控制器模块的特点包括 通讯功能 用于在工业自动化系统中实现设备之间的数据通讯
  • selenium IDE自动化测试脚本的实现

    selenium IDE是干什么的 Selenium IDE 是一个简单的录制回放工具 它可以录制你在浏览器上的操作 回放脚本时 它可以重现录制的动作 就好像你又操作了一遍一样 selenium IDE是个浏览器插件 你需要在浏览器上安装该
  • D (1173) : A DS二叉树_合并二叉树

    文章目录 一 题目描述 二 输入与输出 1 输入 2 输出 三 参考代码 一 题目描述 给定两个二叉树 输出这两个二叉树合并后形成的二叉树 依次输出前序遍历 中序遍历 后序遍历 二 输入与输出 1 输入 第一行输入t 表示有t个测试样例 第
  • Ubuntu系统配置深度学习环境之nvidia显卡驱动和cuda安装

    前言 NVIDIA 显卡驱动是为了确保 NVIDIA 显卡能够正确运行而开发的软件 显卡驱动负责与操作系统通信 管理显卡的各种功能 并提供性能优化和兼容性保证 安装适用于特定显卡型号和操作系统版本的最新驱动程序是确保显卡能够正常工作的重要步
  • Redis——Redis简介

    Redis是目前最流行的键值对 key value 数据库 以出色的性能著称 官方提供的数据是可以支持100000以上的 QPS Redis具有高性能的主要原因如下 Redis是基于内存的存储数据库 绝大部分的命令处理只是纯粹的内存操作 内
  • python实现FCFS算法

    先来先服务作业调度算法 import sys 生成一个job class Job def init self task id arrive time run time level self arrive time arrive time s
  • 白噪声下真实正弦波的精确频率估计研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码及数据