前言

本文讲解如何利用Matlab程序对一段信号进行模数转化(ADC)和数模转化(DAC)处理。

理论基础

首先我们了解一下数据的概念
数据是事实或观察的结果,是对客观事物的逻辑归纳和符号表示,是信息的表现形式和载体,可以是符号、文字、数字、语音、图像、视频等。

  • 数据可以是连续的值,比如声音、图像,称为模拟数据。也可以是离散的,如符号、文字,称为数字数据。
  • 在计算机系统中,用有限个二进制代码 (0 和 1) 来表示字符、图形、 音频与视频数据等。
  • 模拟数据是用连续变化的数值来表示要说明的信息,通常用各种测量单位表示,例如温度、压力、身高、体重、说话的声音等。模拟数据经量化后得到离散的值,也即转化为数字数据。

    连续信号和离散信号

    连续信号:– 随坐标变量连续变化的信号
    离散信号:– 仅在某些坐标变量的离散点上有值的信号

    模拟信号

  • 模拟信号:模拟信号是指信息参数在给定范围内表现为连续的信号,或在一段连续的时间间隔内,其代表信息的特征量可以在任意瞬间呈现为任意数值的信号,它在一定的时间范围内可以有无限多个不同的取值。
  • 我们可以感知的,在时间和幅值上都是连续的物理量,如温度、湿度、 压力、长度等等,都是模拟信号。在电学中,用传感器将这样的物理量转变成为电信号,通常用连续变化的电压值或电流值表示。
     不易于传输– 以波形的形式传输,容易受其他信号的干扰而失真变形,且在传输过程中保密性差
     不易于存储– 模拟信号用磁盘和磁带进行存储,易损坏。
     不易于运算– 模拟信号电路分析难度大,容易受干扰。

    数字信号

    数字信号是指在取值上是离散的、不连续的信号,只有有限个特定的电压值,表现为瞬时跳变直方形。通常将这些离散数字量用 0 和 1 组成的二进制数值来表示。
     易于传输00100101– 以 0 和 1 的形式进行传输, 不易受其它杂散信号的干扰
     易于存储– 数字信号可以存放到 Flsah和 ROM 的器件中,比如 U 盘、SD 卡等
     易于运算– 只有 0 和 1 两种代码
    模拟信号,离散信号与数字信号.png

    ADC和DAC

    ADC

    模拟信号的数字化
     三个关键过程:采样、量化和编码
     采样– 将模拟信号进行抽样,按照采样定理的要求,将时间上连续、幅度上也连 续的模拟信号变换成时间上离散、但幅度上仍连续的已采样信号,采样完 成模拟信号在时间上的离散化。
     量化– 用预先规定好了的有限个电平值来表示模拟抽样值,量化完成模拟信号在 幅度上的离散化,信号经过抽样和量化后才能变成数字信号。(用多少位二进制表示,决定精度,产生量化误差0
     编码– 通常采用二进制编码,即用 N 位二进制代码来表示量化值。

    DAC

     通信所传输的二进制数字信号都是非周期性的。
     借助傅里叶分析,网络通信中需要传送的数字信号,是带宽无穷大且 由连续频率构成的复合模拟信号。
     比特率(Bit Rate)用来反映数字信号的数据传输速率,即每秒传送 的比特数(二进制数位数),单位:bps (b/s) 。
     数字信号可以分解成无限个被称为“谐波”的简单正弦波,每个谐波具 有不同的振幅、频率和相位。我们通过某个传输介质发送一个数字信号 时,可以看作是在发送无限个简单正弦信号。为了确保接收时的数字信 号无失真,所有谐波必须能“忠实地”通过传输媒介传送。
     如果某些谐波不能传输成功,接收的信号就会失真。而现有的传输介质 都不能实现全频率范围的传输,所以传输失真总是存在。
     并非谬论——数字信号不可能无失真传输
     虽然数字信号的频谱包含了无限个具有不同振幅的频率分量,如果我们能够传送那些大振幅的频率分量,仍可保证在接收时重新生成合适精度的数字信号。

    代码

    以下为Matlab代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    clear all;  %清空工作区与全局变量
    clc; %空工作区内的内容

    % part1:signal
    t=0:0.001:2; %原始信号的采样点需要足够密集,即用非常密集的离散点代表原始模拟信号
    x=5*sin(2*pi*t)+2*sin(3*pi*t)+3*sin(4*pi*t);
    Amp=max(x); %找到最大幅值
    x=x/Amp*255; %幅值放大至255
    floor(x); %向下取整数
    figure(1); %图表1
    plot(t,x); %作图
    xlabel('t/s');ylabel('x(t)');title('原始模拟信号x(t)'); %横纵坐标代表的东西以及图表标题

    %%
    % part2:ADC
    T=0.1; %采样时间
    %T=0.25; %不同的采样时间选择,只需要增删%即可
    %T=0.4;
    t=0:T:2; %生成采样点序列
    x=5*sin(2*pi*t)+2*sin(3*pi*t)+3*sin(4*pi*t);
    Amp=max(x); %找到最大幅值
    x=x/Amp*255; %幅值放大至255
    floor(x); %向下取整数
    figure(2); %图表2
    subplot(2,1,1); %子图将当前数字划分为按行编号的矩形窗格
    plot(t,x); %一阶保持
    xlabel('t/s');ylabel('x(t)');title('模拟信号x(t)的ADC变换(一阶保持)');
    subplot(2,1,2);
    stairs(t,x); %零阶保持(更佳)
    xlabel('t/s');ylabel('x(t)');title('模拟信号x(t)的ADC变换(零阶保持)');

    %%
    % part3:DAC
    xi=linspace(0,2,100); %恢复信号的点数
    yi=spline(t,x,xi); %内插处理恢复原始信号
    figure(3); %图表3
    plot(t,x,'o',xi,yi); %恢复出的模拟信号在数字信号的离散采样点序列图像中共同画出
    xlabel('t/s');ylabel('x(t)');title('数字信号x(t)的DAC变换(三条样条内插)');

    First Try

    将代码复制到编辑器,运行,生成了三张图。把采样时间改成0.25、0.4又分别生成了三张图,但原信号的图(即第一张图)是一样的,所以本次作业共2*3+1=7张图。
    没有遇到错误,进展顺利。

输出结果

原信号.png
0.1ADC.png
0.1DAC.png
0.25ADC.png
0.25DAC.png
0.4ADC.png
0.4DAC.png

程序分析

本次程序比较简单,故在程序上已经做了注释,不再赘述。

结语

由图可以直观看出,采样频率不同在ADC和DAC下的影响,这次的内容有些简单了哈。

有问题或错误欢迎联系QQ:515310897哈