当前位置: 首页 > news >正文

(29)数字信号处理中正弦波的表示

文章目录

  • 前言
  • 一、奈奎斯特采样定理
  • 二、正弦波的时域表示
  • 三、数字信号处理中正弦波的表示方法


前言

本文首先介绍了奈奎斯特采样定理,然后以奈奎斯特采样定理为基础,给出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的模拟正弦波。



http://www.mrgr.cn/news/48255.html

相关文章:

  • 3.3.2.3 开源项目有锁队列实现--魔兽世界tinityCore
  • Golang学习历程【第一篇 入门】
  • Mybatis加密解密查询操作(sql前),where要传入加密后的字段时遇到的问题
  • FreeRtos实时系统: 六.FreeRTOS的列表和列表项
  • 前端HTTP协议传输以及背后的原理总结
  • Element@2.15.14-tree checkStrictly 状态实现父项联动子项,实现节点自定义编辑、新增、删除功能
  • 【Python】学习笔记
  • 筛选因数快速法+map
  • 华罗庚名著《数论导引》
  • 如何启动hive
  • 初学Java基础Day17---面相对象之访问修饰符,初识Object,final关键字
  • 深入理解 Java HashMap 的 get() 方法及其相关实现
  • 事件轮询机制
  • Java数组的使用方法
  • 基于SpringBoot+Vue的超市管理系统设计实现(协同过滤算法、图形化分析)
  • 物理学基础精解【67】
  • 【jvm】垃圾回收是否会涉及到虚拟机栈?
  • 10月11日复盘日记
  • 离线使用k8s部署项目
  • thymeleaf
  • docker 安装与使用
  • 【cocos creator】输入框滑动条联动小组建
  • OpenRewrite配方之代码格式化——org.openrewrite.java.format.AutoFormat
  • 毕业设计之—基于ManTra-Net的图像篡改检测方法研究与应用实现
  • 你的拼命向前,只不过是别人的轻松实现
  • 【D3.js in Action 3 精译_033】4.1.0 DIY 实战:如何通过学习 d3.autoType 函数深度参与 D3 生态建设