物联网前沿实践【2】-信号处理基础

发布时间 2023-04-14 17:10:29作者: 爱和九九

参考:https://iot-book.github.io/2_%E4%BF%A1%E5%8F%B7%E5%A4%84%E7%90%86%E5%9F%BA%E7%A1%80/S1_%E4%BF%A1%E5%8F%B7%E7%9A%84%E5%8F%91%E9%80%81%E5%92%8C%E6%8E%A5%E6%94%B6/

 我们首先可以尝试一下用声音信号模拟,简单生成声音信号、录音以及播放录音文件的代码如下;

%% 制造段声音
fprintf("制造一段声音")
Fs = 48000;                             % 采样频率(单位:Hz) # 一秒钟采集的样本数量
T = 4;                                  % 时间长度(单位:s)
f = 2000;                               % 信号频率(单位:Hz)
y = sin(2*pi*f*(0 : 1/Fs : T));         % 产生声音

sound(y,Fs)                             % 播放声音
audiowrite('sound.wav', y, Fs);         % 保存声音

%% 接受一段声音
fprintf("接受一段声音")
Fs = 48000;                             % 采样频率(单位:Hz)
Rec = audiorecorder(Fs, 16, 1);         % 定义录音对象 从前到后依次是 采样频率 , 采样位数 和 声道数 
T = 4;                                  % 录音时长(单位:s)
record(Rec, T);                         % 开始录音
pause(T);                               % 等待录音结束
y = getaudiodata(Rec);                  % 从录音对象中取出音频数据
audiowrite('savesound.wav', y, Fs); 

%% 播放一段音乐
fprintf("播放一段音乐")
[x, Fs] = audioread('C:\Dev\MATLAB\MATLAB_2020b_path\bin\物联网前沿实践学习文档\第二章 信号处理基础\savesound.wav'); 
sound(x, Fs*1.3);   % 正常播放
fprintf('默认抽样频率为:%d\n', Fs);    %查看默认抽样频率Fs


%% 信号的产生过程
%% 产生一个频率为5Hz、时长为1s的信号;
fprintf("产生一个频率为5Hz、时长为1s的信号;")
t = 0:1/200:1;            % 1s内200个采样点,其实就是采样频率
f = 100;                    % 频率f=5Hz
y = sin(2*pi*f*t);
plot(t, y);

% ​ 奈奎斯特采样定律 告诉我们,为了进行合理地采样,保证采样后的数据能够还原出原来的信号,
% 采样后的信号包含原来信号的所有特征。采样频率必须满足fs≥2∗f,f是给定连续信号的频率。
% 采样过程所应遵循的规律,又称取样定理、抽样定理。采样定理说明了采样频率与信号频谱之间的关系,是连续信号转换为离散信号的基本依据。

在此要区分好什么是采样率什么是频率,根据奈奎斯特定理,采样率要大于频率的两倍,这是必须保证的事情,这样被量化为离散的数字信号之后,才能够还原出以前的物理信号。

打个比方,比如下面这个信号:

 

 这是上面写的最后的代码——频率为5Hz,采样率100,采样率远远大于频率,因此看上去,就是连续的曲线。

当我们降低采样率,比如20,那就是:

 

 再降,降低到11:

 

 我们仍然能够靠猜测来画出完整轨迹,再降低呢?

比如,10:

 

此时信号已经彻底失去了规律。 

 

这就涉及到一个信号量化的过程,也就是我们将连续信号转换为离散的数字信号的量化过程,采样点多,则这种量化约精准。平时说的高保真,其实指的就是存储的细节足够多,使得离散信号更加接近原始信号。但是离散信号与原始信号肯定会因为这个量化过程产生区别,这个区别就是量化噪声带来的。

单说量化,有均匀量化和非均匀量化两种,即采样点间隔均匀就是均匀量化,反之。

至此,物理信号就被转换成了数字信号,就可以使用计算机来处理了。

这一章也会有一个实例,但是其是安卓的开发环境,本文重点为入门,因此看一看就好:https://iot-book.github.io/2_%E4%BF%A1%E5%8F%B7%E5%A4%84%E7%90%86%E5%9F%BA%E7%A1%80/S5_%E6%A1%88%E4%BE%8B%EF%BC%9A%E5%AE%9E%E7%8E%B0%E4%B8%80%E4%B8%AA%E5%BD%95%E9%9F%B3%E3%80%81%E6%94%BE%E9%9F%B3%E7%A8%8B%E5%BA%8F/