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

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

一、时域算法原理

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

  过零点检测:当x(ni)x(n_i)x(ni)x(ni+1)x(n_i+1)x(ni+1)符号不同时,则区间(niFs,ni+1Fs)(\frac{n_i}{Fs},\frac{n_i+1}{Fs})Fsni,Fsni+1存在零点,利用差值公式估计零点位置α (i)\alpha\ (i)α (i)
α (i)=1Fs∗[ni+x(ni)x(ni)+x(ni+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∗pi−pi/22∗pi∗fc \alpha\ (i)=r(i)+\frac{i*pi-pi/2}{2*pi*fc}α (i)=r(i)+2pifcipipi/2
β (i)=r(i)+12∗fc \beta\ (i)=r(i)+\frac{1}{2*fc}β (i)=r(i)+2fc1

  r(i)表示由于噪声和测量等引起的误差变量,服从0均值的正态分布,E[r(i)]=0,E[β(i)]=12∗fcE{[r(i)]}=0,E{[\beta(i)]}=\frac{1}{2*fc}E[r(i)]=0,E[β(i)]=2fc1
  则可以由相邻过零点的距离平均值估计出载波频率:
fc=12E[β(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。对于时域估计算法来说,信噪比越高,估计的越正确,其正确率可通过大量实验进行统计。因此,时域估计方法适用于信噪比较好的情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值