⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sfmestimation_main.m

📁 SFM信号分析的总程序,包括产生信号,信号时域分析等
💻 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 + -