信号载频的测量——时域算法

@[TOC]信号载频的测量-时域算法

一、时域算法原理

  时域算法中比较常用的是过零点检测,首先估计出信号的平均过零点周期,然后利用信号的过零点周期估计出载波的周期。具体算法如下:

  过零点检测:当 x ( n i ) x(n_i) x(ni) x ( n i + 1 ) x(n_i+1) x(ni+1)符号不同时,则区间 ( n i F s , n i + 1 F s ) (\frac{n_i}{Fs},\frac{n_i+1}{Fs}) Fsni,Fsni+1存在零点,利用差值公式估计零点位置 α   ( i ) \alpha\ (i) α (i)
α   ( i ) = 1 F s ∗ [ n i + x ( n i ) x ( n i ) + x ( n i + 1 ) ] \alpha\ (i)=\frac{1}{Fs} *[n_i+\frac{x(n_i)}{x(n_i)+x(n_i+1)}] α (i)=Fs1[ni+x(ni)+x(ni+1)x(ni)]
  其中,x(n)为采样序列,Fs为采样率。
  令 β ( i ) \beta(i) β(i)表示第i个零点和第i+1个零点之间的距离,其中: β   ( i ) = α ( i ) − α ( i + 1 ) \beta\ (i) =\alpha(i)-\alpha(i+1) β (i)=α(i)α(i+1)
  对于正弦信号来说,零点位置 α ( i ) \alpha(i) α(i)和相邻零点之间的距离 β ( i ) \beta(i) β(i)和载波频率的关系分别为:
α   ( i ) = r ( i ) + i ∗ p i − p i / 2 2 ∗ p i ∗ f c \alpha\ (i)=r(i)+\frac{i*pi-pi/2}{2*pi*fc} α (i)=r(i)+2pifcipipi/2
β   ( i ) = r ( i ) + 1 2 ∗ f c \beta\ (i)=r(i)+\frac{1}{2*fc} β (i)=r(i)+2fc1

  r(i)表示由于噪声和测量等引起的误差变量,服从0均值的正态分布, E [ r ( i ) ] = 0 , E [ β ( i ) ] = 1 2 ∗ f c E{[r(i)]}=0,E{[\beta(i)]}=\frac{1}{2*fc} E[r(i)]=0,E[β(i)]=2fc1
  则可以由相邻过零点的距离平均值估计出载波频率:
f c = 1 2 E [ β ( i ) ] fc = \frac{1}{2E[\beta(i)]} fc=2E[β(i)]1

二、Matlab程序

1.代码


%--------------function:measure carrier frequency----------------
%--------------remark: use time-domain analysis
%--------------data:2024.07.29----------------------------------
%--------------author:Clemence----------------------------------

clc;
clear all;
close all;

%-----signal paras-------
f = 14e6;       %signal frequency
phase = 0;      %initial phase
a = 1;          %amplitude
b = 0;          %offs

%-----sample paras-------
N=4096;    %sample points
Fs = 100e6;     %sample frequency
ts = 1/Fs;      %sample interval
t = 0:ts:(N-1)*ts;      %sample time

%-----time-domain singal-----------------
s = a*cos(2*pi*f*t+phase)+b;
s = awgn(s,3);
%-----create carrier---------------------
fc = 20e6;
s_fc = cos(2*pi*fc*t);

%----- AM--------------------------------
ma = 0.5; % am coefficient
A = a/ma;
s_am = (A+s).*s_fc;

%------calculate all zero points of signal
i = 1;
for k=1:N-1
    s_sign = s_am(k)*s_am(k+1);
    if(s_sign<=0)
        alpha(i) = (1/Fs)*(k+s_am(k)/(s_am(k)+s_am(k+1)));
        i = i+1;
    end
end

%-----calculate carrier frequency----------
for i=1:length(alpha)-1
    belt(i) = alpha(i+1)-alpha(i);
end

fc = (length(alpha)-1)/(2*sum(belt));
str_fc = ['fc =',num2str(fc/1e6),'e6'];

%-----plot AM spectrum -------------------
s_fft = abs(fft(s_am));
index = (0:N/2-1)*(Fs/N);
plot(index,s_fft(1:N/2));
xlabel('f');
ylabel('amp');
title('calcute carrier frequency(SNR=3)');
legend(str_fc);


2.仿真结果

在这里插入图片描述

信号载频测量(SNR=3dB)

在这里插入图片描述

信号载频测量(SNR=6dB)

三、结果分析

  本示例中,仿真信号为AM调制方式,载波频率20MHz。当SNR=3dB时,估计的载波频率为20.36MHz,当SNR=6dB时,估计的载波频率为20.138MHz。对于时域估计算法来说,信噪比越高,估计的越正确,其正确率可通过大量实验进行统计。因此,时域估计方法适用于信噪比较好的情况。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值