@[TOC]信号载频的测量——频域算法
一、频域算法的原理
信号参数测量是信号调制分类识别的基础,不同的调制样式的通信信号有不同的参数。无论是模拟调制还是数字调制,载波频率、信号电平和带宽都是需要测量的通用参数。针对信号载频的测量,可以采用时域算法和频域算法,频域算法主要利用FFT实现。
对信号的采样序列x(n)进行FFT,得到频谱序列Xk,通过频谱对称系数
α
\alpha
α来估计载波的中心频率:
α
=
∑
k
=
1
N
/
2
k
∣
X
(
k
)
∣
2
∑
k
=
1
N
/
2
∣
X
(
k
)
∣
2
\alpha = \frac{\sum _{k=1}^{N/2}k|X(k)|^2}{\sum _{k=1}^{N/2}|X(k)|^2}\,
α=∑k=1N/2∣X(k)∣2∑k=1N/2k∣X(k)∣2
其中,N为FFT采样点数,X(k) = FFT{x(n)}。
二、Matlab程序
1.代码
%--------------function:measure carrier frequency----------------
%--------------data:2024.07.27----------------------------------
%--------------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=40960; %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;
%-----create carrier---------------------
fc = 25e6;
s_fc = cos(2*pi*fc*t);
%----- AM--------------------------------
ma = 0.5; % am coefficient
A = a/ma;
s_am = (A+s).*s_fc;
%-----fft---------------------------------
s_fft = abs(fft(s_am));
%-----calculate carrier frequency----------
for k=1:N/2
alpha_s_fft(k) = (Fs/N)*k*(s_fft(k))^2;
end
alpha = sum(alpha_s_fft)/sum(s_fft(1:N/2).^2);
str_fc = ['fc =',num2str(alpha/1e6),'e6'];
%-----plot AM spectrum -------------------
index = (0:N/2-1)*(Fs/N);
plot(index,s_fft(1:N/2));
xlabel('f');
ylabel('amp');
title('calcute carrier frequency');
legend(str_fc);
2.仿真结果
三、结果分析
本示例中,仿真信号为AM调制方式,载波频率20MHz,当N=4096时,估计频率为20.537MHz,当N=40960时,估计频率为20.5MHz,N的点数越多,估计的精度越高,其测量正确率可进行多次实验统计。由于 α \alpha α为频谱对称系数,该方法适合于对称谱的载波频谱测量,例如AM/DSB、FM、FSK、ASK和PSK等通信信号。