【信号估计】白噪声中真实正弦波的精确频率估计(Matlab实现)

 💥💥💞💞欢迎来到本博客❤️❤️💥💥

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

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

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


💥1 概述

本研究聚焦于在充满白噪声的环境中,对真实正弦波的精确频率进行估计。白噪声的存在给频率估计带来了极大的干扰和不确定性。由于在许多实际应用中,如通信系统、雷达信号处理、生物医学信号分析等领域,信号往往都处于噪声背景之中,因此研究如何在噪声环境下准确提取出正弦波的频率信息显得尤为重要。这项研究旨在通过深入的理论分析和先进的算法应用,找到有效的方法来克服噪声影响,准确提取出正弦波的频率信息。这对于信号处理、通信工程等领域具有重要意义,有助于提高系统性能和数据准确性。

📚2 运行结果

主函数部分代码:

clc
clear
close all
%-----------------------------%
% Matlab version: 2018a

%% Fig 1
Fs = 1; % Sampling frequency
N = 64; % Number of samples
A = 1; % Half of Amplitude
SimTimes = 5000; % Number of simulation
SNRdB = [-10:2:10,15:5:60]; % SNR
RMSE = zeros(length(SNRdB),6); % RMSE
CRLB = sqrt(3*Fs^2./(pi^2*N*(N^2-1)*10.^(SNRdB/10))).';% CRLB

for ii = 1:length(SNRdB)
    ErrF = zeros(SimTimes,6); % Error of frequency estimation
    for jj = 1:SimTimes
        F = rand*(Fs/2-2*Fs/N)+Fs/N; % Frequency, and Fs/N<f<Fs/N*(N/2-1)
        P = rand*2*pi; % Initial Phase
        n = (0:N-1).';
        s = 2*A*cos(2*pi*F/Fs*n+P); % real sinusoid
        Ps = mean(s.^2); % Signal power
        Pn = Ps/10^(SNRdB(ii)/10); % Noise Power
        w = sqrt(Pn)*randn(N,1);
        s = s+w; % 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));
end
RMSEBin = RMSE/Fs*N; % RMSE in DFT bins
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)

🎉3 参考文献

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

[1]宿文玲.一种基于EtherCAT总线技术的电感信号处理模块设计[J].机械工程师,2024(08):13-16.

[2]卢海林,郭馨阳,郝静.基于多滤波降噪法的桥梁应变监测信号处理[J].噪声与振动控制,2024,44(04):180-187.

🌈4 Matlab代码实现

图片

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值