基于Matlab App Designer的语音信号分析与处理(一):语音信号的采集,时域、频域分析

目录

一、课题的任务

二、内容、步骤和要求

(1)语音信号的采集

实现方法:

语音信号的采集完整代码:

(2)语音信号的分析

1)语音信号的时域分析

2)语音信号的频域分析

语音信号的时域、频域分析完整代码:

 3)语音信号的播放


一、课题的任务

利用 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 也可以根据上文所述线性变换所得到的,实现语音信号的大小变化和音调变化。

下文:基于Matlab App Designer的语音信号分析与处理(二):IIR和FIR滤波器的设计,语音信号的滤波_演员的必备修养的博客-CSDN博客

最终效果展示:

语音信号的分析与处理_哔哩哔哩_bilibili

完整资源:

https://download.csdn.net/download/weixin_53877178/76116847

  • 9
    点赞
  • 113
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
设计要求 1、语音信号采集利用 Windows下的录音机,录制一段自己的话音,时间在1s内然后在Matlab软件平台下,利用函数wavread对语音信号进行采样,记住采样频率和采样点数。 2、语音信号的频谱分析Matlab中,可以利用函数fft对信号进行快速傅立叶变换,得到信号的频谱特性,要求学生首先画出语音信号时域波形,然后对语音信号进行频谱分析。 3、设计数字滤波器和画出其频率响应给出各滤波器的性能指标; 给定滤波器的性能指标如下: (1)低通滤波器的性能指标:fb=1000Hz,fc=1200Hz,As=100dB,Ap=1dB, (2)高通滤波器的性能指标:fb=5000Hz,fc=4800Hz, As=100dB,Ap=1dB, (3)带通滤波器的性能指标:fb1=1200Hz,fb2=3000Hz, fc1=1000Hz,fc2=3200Hz, As=100dB,Ap=1dB, 采用窗函数法和双线性变换法设计上面要求的3种滤波器,并画出滤波 器的频率响应。 4、用滤波器对信号进行滤波 ,然后用自己设计的滤波器对采集到的信号进行滤波,画出滤波后信号的时域波形及频谱,并对滤波前后的信号进行对比,分析信号的变化; 5、回放语音信号分析滤波前后的语音变化; 6、设计系统界面,为了使编制的程序操作方便,设计处理系统的用户界面,在所设计的系 统界面上可以实现上述要求中的包括采集分析、滤波等全部内容,并能够选 择滤波器的类型,输入滤波器的参数、显示滤波器的频率响应等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

演员的必备修养

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值