📄 sfmestimation_main.m
字号:
%单频信号频率估计主函数
%
%*********************************************************
clear all;
close all;
clc;
%*******************************************************
fs=100e6; %采样频率100MHz
deltt=1/fs; %采样间隔
numMC=100; %Monte Carlo仿真次数
%****************************************
for ii=1:numMC; %%开始蒙特卡洛仿真
T=4e-6; %脉宽设置1us
SNR=0; %设定信噪比
%产生单频信号+噪声
N=fix(T/deltt); %信号点数,在本算法中要求N为偶数
if mod(N,2)==1 %如果N不是偶数,则减1变成偶数
N=N-1
end
%这是N可能已经变化,相应改变信号的脉宽
T=N*deltt; %脉宽
%***********************************************
n=0:N-1;
randnoise=randn(1,N)+i*randn(1,N); %产生I,Q路的噪声,功率各为1,总功率2
%fc=(2*rand(1)-1)*35e6; %随机产生频率为-35~35MHz的信号
fc=10.567e6;
%phase=(2*rand(1)-1)*pi; %随机产生初始相位-pi~pi的信号
phase=pi/6;
signal_A=10^(SNR/20)*sqrt(2); %噪声功率为2,电压幅度值sqrt(2),所以信号幅度*sqrt(2)
%signal_A=1;
signalN=signal_A*exp(i*(2*pi*fc*n*deltt+phase))+randnoise; %信号+噪声
%************************************************************************
%调用单频信号的频率与相位的估计子函数SFM_estimation
[f_e(ii) phase_e(ii)]=SFM_estimation(signalN,N,deltt);
%**************计算误差
f_error(ii)=(f_e(ii)-fc)/fc; %估计值-真值;
phase_error(ii)=(phase_e(ii)-phase)/phase; %估计值-真值;
%将phase_error限制在-pi~pi之间
if phase_error(ii)>pi
phase_error(ii)=phase_error(ii)-2*pi;
end;
if phase_error(ii)<-pi
phase_error(ii)=phase_error(ii)+2*pi;
end;
end; %end for;
%**********************************************************
%对估计的f_e进行平均
f_e_mean=mean(f_e);
phase_e_mean=mean(phase_e);
%均方根误差
f_e_rms=sqrt(mean((f_e-f_e_mean).^2)); %方均根
phase_e_rms=sqrt(mean((phase_e-phase_e_mean).^2)); %方均根
% %平均绝对误差
% f_e_mae=mean(abs(f_e-f_e_mean));
% phase_e_mae=mean(phase_e-phase_e_mean);
%画图
figure(1) %产生的信号图
plot(n*deltt,real(signalN),'r',n*deltt,imag(signalN),'b');
xlabel('时间');
ylabel('幅值');
title('仿真产生的信号');
legend('实部I,虚部Q');
%
figure(2) %信号频谱
signalN_fft=abs(fft(signalN));
f=0:fs/N:(N-1)*fs/N;
plot(f,signalN_fft);
xlabel('频率/Hz');
ylabel('幅值');
title('仿真信号的频谱');
%
figure(3) %频率估计误差
plot(f_error);
xlabel('次数');
ylabel('误差值/Hz');
title('相位法频率估计误差');
%
figure(4) %相位估计误差
plot(phase_error);
xlabel('次数');
ylabel('误差值/弧度');
title('相位法相位估计误差');
%求均方根误差
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -