我是靠谱客的博主 标致胡萝卜,最近开发中收集的这篇文章主要介绍信号与系统(1)---采样率对声音信号采集的影响前言一、奈奎斯特采样定理二、matlab编程总结,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
本博文依托于“信号与系统”课程设计,分为三部分,本博文涉及第一部分:“采样率对声音信号采集的影响”。未来会做成一个系列,欢迎大家持续关注!!
文章目录
- 前言
- 一、奈奎斯特采样定理
- 二、matlab编程
- 1.声音信号采集、存储
- 2.结果可视化
- 总结
前言
信号作为信息的一种载体形式,包含有诸多具体形式,如图片,声音等等。而信号的采集,传输,接收是我们日常生活中时时刻刻都在进行的活动,而信号处理的先决条件是信号的采集。因此,了解和掌握信号采集的方法以及相关知识对于信号领域的研究是非常重要的。本博文以“信号与系统”课程设计为依托,研究采样率对于声音信号采集的影响。
一、奈奎斯特采样定理
奈奎斯特采样定理,又称香农采样定理,是信号处理领域最重要的基本定理之一。它是连续时间信号(“模拟信号”)和离散时间信号(“数字信号”)之间的桥梁。至于对信号进行抽样的原因,是由于计算机只能处理离散数字信息,而对于连续时间信号是没有办法进行处理的,因此,为使得信号可以输入至计算机中进行处理,必须对信号进行抽样处理。奈奎斯特采样定理揭示了采样率和所测信号频率之间的关系。 阐述了采样率Fs必须大于被测信号最高频率分量的两倍。只有满足奈奎斯特采样定理,才能从抽样后的信号的中恢复出原完整信号。
借助于图像阐释“奈奎斯特采样定理”---
(1)假设Fs = Fn:
(2)假设Fs = (4/3)*Fn:
由上述三种情况对比可知:只有满足采样频率大于原信号最大频率的二倍,才能不失真的从抽样后的信号中恢复出原信号。
二、matlab编程
1.声音信号采集、存储
代码如下(示例):
% 采样率对于声音信号采集的影响:
recorder = audiorecorder;
Fs = 1000;
Fs1 = 8000;
Fs2 = 40000; % 设置三种不同的采样频率
nBits = 16; % 设置采样位数
NumChannels = 1; % 设置采样通道数
recorder = audiorecorder(Fs,nBits,NumChannels) %以不同的采样频率采集音频信号
% recorder = audiorecorder(Fs1,nBits,NumChannels);
% recorder = audiorecorder(Fs2,nBits,NumChannels);
disp('strat speaking:');
recordblocking(recorder,5); % 录制5s的音频信号
disp('stop speaking');
myrecording = getaudiodata(recorder); % 获取声音信号信息--数学形式
audiowrite('re_co.wav',myrecording,1000); % 以对应的采样率完成声音信号存储
% audiowrite('re_co1.wav',myrecording,8000);
% audiowrite('re_co2.wav',myrecording,40000);
play(recorder) % play对应声音信号的播放
2.结果可视化
代码如下(示例):
%数据可视化(声音信号时频域波形绘制)
[x,Fs]=audioread('re_co.wav')
x = x(:,1);
x = x';
N = length(x);%求取抽样点数
t = (0:N-1)/Fs;%显示实际时间
y = fft(x);%对信号进行傅里叶变换
f = Fs/N*(0:round(N/2)-1);%显示实际频点的一半,频域映射,转化为HZ
figure(1)
subplot(211);
plot(t,x,'g');%绘制时域波形
xlabel('Time/s');ylabel('Amplitude');
title('信号的波形');
grid;
subplot(212);
plot(f,abs(y(1:round(N/2))));
xlabel('Frequency/Hz');ylabel('Amplitude');
title('信号的频谱');
grid;
% [x1,Fs1]=audioread('re_co1.wav')
% x1 = x1(:,1);
% x1 = x1';
% N = length(x1);%求取抽样点数
% t = (0:N-1)/Fs1;%显示实际时间
% y = fft(x1);%对信号进行傅里叶变换
% f = Fs1/N*(0:round(N/2)-1);%显示实际频点的一半,频域映射,转化为HZ
% figure(2)
% subplot(221);
% plot(t,x1,'g');%绘制时域波形
% xlabel('Time/s');ylabel('Amplitude');
% title('信号的波形');
% grid;
% subplot(223);
% plot(f,abs(y(1:round(N/2))));
% xlabel('Frequency/Hz');ylabel('Amplitude');
% title('信号的频谱');
% grid;
% [x2,Fs2]=audioread('re_co2.wav')
% x2 = x2(:,1);
% x2 = x2';
% N = length(x2);%求取抽样点数
% t = (0:N-1)/Fs2;%显示实际时间
% y = fft(x2);%对信号进行傅里叶变换
% f = Fs2/N*(0:round(N/2)-1);%显示实际频点的一半,频域映射,转化为HZ
% subplot(222);
% plot(t,x2,'g');%绘制时域波形
% xlabel('Time/s');ylabel('Amplitude');
% title('信号的波形');
% grid;
% subplot(224);
% plot(f,abs(y(1:round(N/2))));
% xlabel('Frequency/Hz');ylabel('Amplitude');
% title('信号的频谱');
% grid;
三段声音信号分别是在不同的采样频率下获得的,无论从录音文件的播放,还是声音信号时频域分析,均可以看出采样频率对于声音信号采集的影响: (1)录制声音播放角度---
在本实验项目中,Fs = 1000Hz时,录音文件播放声音浑浊不清,相比于Fs = 1000Hz时,采样频率Fs = 8000Hz 或者Fs = 40000Hz时声音播放清晰洪亮,在录制声音播放的角度可以总结出采样率对于声音信号采集的影响,只有满足奈奎斯特采样定理才能从采样后的声音信号中将原始信号恢复出来,一般情况下,采样率越高,声音信号越清晰,采样率较低时,明显声音信号声音浑浊,不清晰。
(2)时频域波形分析角度---
采样率Fs = 1000Hz----时频域分析:
采样频率Fs = 8000Hz和40000Hz----时频域分析:
从图二采样频率8000和40000Hz的时频域对比分析可以看出,采样频率处于该频段时,声音信号的时域波形基本相同,但仔细观察仍然可以看出40000Hz比8000Hz可以采集到更加完整的声音信号。
如果将图一和图二进行对比可以发现,1000Hz的时域波形明显没有后两种波形完整和丰富,这也恰好解释在此采样频率下声音信号播放浑浊不清的原因。
总结
简单的总结下,采样频率的不同会影响采集到声音信号的质量,甚至于无法从采样后信号中将原始信号恢复出来。本课程设计实验从音频文件播放和时频域分析两个角度阐释采样率对声音信号采集的影响,在某种程度上验证奈奎斯特采样定理。理论上讲,只要满足奈奎斯特采样定理,就可以从采集到的声音信号中将原始信号恢复出来,但是在实际工程应用中,为保证采集到信号的丰富性以及声音文件的质量,一般不采用2倍频率作为采样率,而采用数倍甚至于数十倍采样频率进行声音信号的采集,我们平时听到的声音文件的采样频率为44100Hz,这是远远高出声音频率的。
总体上来讲,理论研究和工程实践之间还有很长的一段鸿沟需要跨越,然而理论研究作为工程实践的基础,只有掌握理论研究,才能更好的服务于我们的工程实践。
项目已上传至GitHub,GitHub地址:
https://github.com/booue/signals-processing
最后
以上就是标致胡萝卜为你收集整理的信号与系统(1)---采样率对声音信号采集的影响前言一、奈奎斯特采样定理二、matlab编程总结的全部内容,希望文章能够帮你解决信号与系统(1)---采样率对声音信号采集的影响前言一、奈奎斯特采样定理二、matlab编程总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复