前言
本文首先介绍了奈奎斯特采样定理,然后以奈奎斯特采样定理为基础,给出MATLAB代码,说明在数字信号处理中如何表示一个正弦波。
一、奈奎斯特采样定理
奈奎斯特采样定理告诉我们,若一个模拟信号的最高频率为fh,若对其进行不低于fs=2fh的速率进行采样,则获得的离散时间信号将包含原模拟信号的所有频谱分量。也就是说,可以使用该离散时间信号完全恢复出原模拟信号。
对奈奎斯特采样定理的一个常见应用是,语音通信中,经常使用fs=8kHz的采样频率对模拟语音信号进行采样。由于限定语音的最高频率为fh=3000Hz(这通常由低通滤波器来完成),所以此时,完全满足fs≥2fh这一要求。
二、正弦波的时域表示
所谓时域表示,就是以时间为自变量对函数进行表示。在数字信号处理中,与时域对应的另一个概念是频域,这将在后续文章中进行介绍。
正弦函数的时域波形一般表示为y=sin(x),我们可以使用以下MATLAB代码生成这一函数:
x = 0:0.001:2*pi; % 自变量向量
y = sin(x); % 正弦函数值向量
为了使生成的正弦波看上去更加光滑,便要求在时间上的刻度足够精细,这一要求在代码中是通过将自变量x的步进设置成一个很小的值(0.001)来实现的。
所谓“时间上的刻度足够精细”,更专业的说法是有足够高的时域分辨率。
将生成的正弦波画图代码及图形如下:
figure()
plot(x,y)
grid on
title('一个周期的正弦波')
xlabel('x')
ylabel('sin(x)')
然而,在数字信号处理中,我们一般不会像上面这样直接通过y = sin(x);这样的语句来生成正弦波。因为正弦波的这种表示方法并不能直观地为提供诸如其频率和采样率等信息,而对于一个数字信号而言,频率和采样率无疑是我们非常关心的参数。
三、数字信号处理中正弦波的表示方法
下面以MATLAB代码的形式给出数字信号处理中常用的正弦波的表示方法。该表示方法中可以很清晰直观地得到诸如幅度、频率、采样率、时长等正弦波的参数信息。
% 指定信号的参数,频率1Hz,采样频率为8Hz,信号持续时间为2秒(16个samples)。
A = 1; % 余弦波的振幅
f = 1; % 余弦波的振荡频率,简称频率
fs = 8; % 数字信号的采样频率(sampling frequency ),简称采样率
Ts = 1/fs; % 采样周期,也即采样值的时间间隔
L = 16; % 一个采样值称为一个sample,L为sample的个数
t = (0:L-1)*Ts; % 时间向量
% 生成余弦波x
x = A * cos(2*pi*f*t); % 余弦波
% 画出生成余弦波的时域波形
figure()
plot(t,x,'-o')
title('余弦信号的时域波形(f=1Hz,fs=8 samples/s)')
grid on
xlabel('t/s')
ylabel('cos(2*pi*f*t)')
代码中,我们将采样率设置为正弦波频率的8倍,这完全满足奈奎斯特采样定理2倍的要求。
画出的正弦波图形如下:
可以发现,该正弦波的图形看上去并不是很“光滑”,这是由于采样率不够高导致的。不过,尽管如此,该时间离散的正弦波也完全可以恢复出一个频率为1Hz的模拟正弦波。