...信号分析与处理(一):语音信号的采集,时域、频域分析

基于MatlabAppDesigner的语⾳信号分析与处理(⼀):语⾳
信号的采集,时域频域分析
⽬录
⼀、课题的任务
利⽤ Matlab 设计⼀个图形⽤户界⾯,能够实现对语⾳信号进⾏时域和频域上的⼀些相关处理和分析,并能够通过图形界⾯功能,将处理后的语⾳进⾏播放或者输出显⽰相关图形。
⼆、内容、步骤和要求
(1)语⾳信号的采集
使⽤电脑的声卡设备采集⼀段语⾳信号,并存储在电脑中。
实现⽅法:
①利⽤ audiorecorder 和 recordblocking 函数可以实现电脑录⾳。
voice = audiorecorder(Fs, nBits, nChannels);
没有输⼊参数时,默认创建采样率为 8000 Hz ,8 bit,单通道的对象。
Fs 指定采样率,单位为 Hz ,由 nBits 指定采样点的⽐特数,nChannels 为指定通道数。
recordblocking(recorderObj, length)
recorderObj 为保存⾳频信息的对象,length 为录⾳时长,单位为 s.
②利⽤ getaudiodata 函数从⾳频记录对象中获取记录到的⾳频数据。
y = getaudiodata(recorder);
在 double 数组 y 中返回与 audiorecorder 对象 recorder 相关联的录制⾳频数据。
③利⽤  audiowrite 函数存储录⾳。
audiowrite(filename, y, Fs)
以采样率 Fs 将⾳频数据矩阵 y 写⼊名为 filename 的⽂件。
语⾳信号的采集完整代码:
fs = 48000;  % 采样频率
length = 4; % 时间长度(秒)
% 创建⼀个录⾳⽂件:fs =48000Hz, 16-bit, 单通道
recorderObj = audiorecorder(fs, 16, 2);
recordblocking(recorderObj, length); % 录⾳4秒钟
stop(recorderObj);
y = getaudiodata(recorderObj);
ymax = max(abs(y)); % 归⼀化
y = y/ymax;
audiowrite('C:\Users\swh\Desktop\3.wav', y, fs); % 存储录⾳⽂件
(2)语⾳信号的分析
语⾳信号的处理分析的⽬的就在于有效提取并表⽰语⾳信号所携带的信息。语⾳信号分析可分为时域分析和频域分析等处理⽅法。时域分析主要是对信号的时域波形进⾏分析。
1)语⾳信号的时域分析
提取:通过图形⽤户界⾯上的菜单功能键采集电脑设备上的⼀段⾳频信号, 完成⾳频信号的频率、幅度等信息的提取,并获得该语⾳信号的波形图。
实现⽅法:
①利⽤ audioread 函数可以获取电脑中存储的⾳频信号。
[y, Fs] = audioread(filename);
filename:⽂件的位置加名字,⾳频格式为wav等,⽂件名需带引号。⽂件是在MATLAB菜单栏下的当前⽂件路径下,可以只写⽂件名。⽂件不在路径⾥⾯调⽤,需要完整地址。
Fs:采样频率,1秒内对连续的⾳频信号取的点的个数
y:输出的⾳频数字信号,默认是n⾏2列,该⾳频信号为两个声道,n的值等于该⾳频信号的时长乘采样频率Fs。
② 时域分析
图象的绘制plot.
plot(t, x);%绘制时域波形
t:时间;x:⾳量。
调整:通过图形⽤户界⾯上的菜单功能键对输⼊的⾳频信号进⾏各种变换, 如幅度变换、频率变换等操作,以实现对语⾳信号的调整。
实现⽅法:
[y, Fs] = audioread(filename);
幅度变换:对上述 y 值进⾏线性变换。
频率变换:①对上述 Fs 值进⾏线性变换;
②利⽤ shiftPitch 函数;
audioOut = shiftPitch(audioIn,nsemitones);
将⾳频输⼊的⾳⾼移动指定数量。
2)语⾳信号的频域分析
变换:在图形⽤户界⾯下对采集的语⾳信号进⾏傅⾥叶等变换,并给出变换前后的频谱图。
实现⽅法:
①利⽤ fft 函数实现傅⾥叶变换。
Y = fft(X);
⽤快速傅⾥叶变换 (FFT) 算法计算 X 的离散傅⾥叶变换 (DFT)。
②频域分析
图象的绘制plot.
语⾳信号的时域、频域分析完整代码:
[x,Fs] = audioread("C:\Users\swh\Desktop\1.wav");
N = length(x); % 求取抽样点数
t = (0:N-1)/Fs; % 显⽰实际时间
y = fft(x); % 对信号进⾏傅⾥叶变换
f = Fs/N*(0:round(N/2) - 1); % 显⽰实际频点的⼀半,频域映射,转化为Hz
plot(t, x); % 绘制时域波形
plot(f, abs(y(1:round(N/2)))); % 绘制频域波形
3)语⾳信号的播放
利⽤ sound 函数播放语⾳信号。
sound(x, Fs)
x 是 [x,Fs] = audioread("C:\Users\swh\Desktop\1.wav");中的x.
Fs 是 [x,Fs] = audioread("C:\Users\swh\Desktop\1.wav");中的Fs.
x,Fs 也可以根据上⽂所述线性变换所得到的,实现语⾳信号的⼤⼩变化和⾳调变化。下⽂:
最终效果展⽰:
完整资源:

本文发布于:2024-09-21 00:47:04,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/390702.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:信号   分析   变换   时域   频域   采集
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议