【转帖】MATLAB 与 音频处理 相关内容摘记

MATLAB 与 音频处理 相关内容摘记

MATLAB 与 音频处理 相关内容摘记

MATLAB 与 音频处理 相关内容摘记 1

MATLAB 音频相关函数 1

MATLAB 处理音频信号的流程 2

音量标准化 2

声道分离合并与组合 3

数字滤波 3

数据转换 5

基于MATLAB 的数字滤波实验6

MATLAB 音频相关函数

声音数据输入输出函数:

可以方便地读写au和way文件,并可控制其中的位及频率。

wavread()和wavwriteO。

声音播放:

wavplay():播放wav声音文件。当然,也可以把处理后的

wav文件保存后再用其它工具播放。

wavrecordO:可以对处理后的wav文件进行录音。

PS:在日常生活中,我们听到的声音一般都属于复音,其声音信号由不同的振幅与频率的波合成而得到

MATLAB 处理音频信号的流程

分析和处理音频信号 首先要对声音信号进行采集 MATLAB 的数据采集工具箱提供了一整套命令和函数,通过调用这些函数和命令,可直接控制声卡进行数据采集[1] Windows 自带的录音机程序也可驱动声卡来采集语音信号 并能保存为 WAV 格式文件供 MATLAB 相关函数直接读取 写入或播放 本文以 WAV 格式音频信号作为分析处理的输入数据 用 MATLAB 处理音频信号的基本流程是 先将 WAV 格式音频信号经 wavread 函数转换成 MATLAB 列数组变量 再用 MATLAB 强大的运算能力进行数据分析和处理 如时域分析 频域分析 数字滤波 信号合成 信号变换 识别和增强等等 处理后的数据如是音频数据 则可用 wavwrite 转换成 WAV 格式文件或用 sound wavplay 等函数直接回放 下面分别介绍 MATLAB 在音量标准化 声道分离合并与组合 数字滤波 数

据转换等音频信号处理方面的技术实现

音量标准化

录制声音过程中需对声音电平进行量化处理 最理想的量化是最大电平对应最高量化比特 但实际却很难做到 常有音轻问题 利用 MATLAB 很容易实现音量标准化 即最大电平对应最高量化比特 基本步骤是 先用 wavread 函数将 WAV 文件转换成列数组变量 再求出数组变量的极值并对所有元素作归一化处理 最后用 wavwrite 函数还原成音量标准化的 WAV 文件

例 1 现以微软自带的 Windows XP 关机.wav 音频信号为例 先将其复制另存到文件名为 XPexit.wav 的 MATLAB 当前目录中

再通过音量标准化处理后保存为 XPquit.wav 文件 实现程序如下

clear; close all; clc;

[Y,FS,NBITS]=wavread(‘XPexit.WAV‘); % 将 WAV 文件转换成变量

FS,NBITS, % 显示采样频率和量化比特

Ym=max(max(max(Y)),max(abs(min(Y)))), % 找出双声道极值

X=Y/Ym; % 归一化处理

wavwrite(X,FS,NBITS,‘XPquit.wav‘) % 将变量转换成 WAV 文件

试听可知标准化处理后音量稍大

声道分离合并与组合

立体声或双声道音频信号有左右两个声道 利用 MATLAB 实现双声道分离 两路声道合并和两个单声道组合成一个双声道等效果 实际上是利用了 MATLAB 的矩阵抽取 矩阵相加和矩阵重组运算

例 2 现以例 1 生成的 XPquit.wav 为例 实现分离 合并和组合处理的程序如下

clear; close all; clc;

[x,FS,NBITS]=wavread(‘XPquit.WAV‘); % 将 WAV 文件转换成变量

x1=x(:,1); % 抽取第 1 声道

x2=x(:,2); % 抽取第 2 声道

wavwrite(x1,FS,NBITS,‘XPquit1.WAV‘); % 实现 1 声道分离

wavwrite(x2,FS,NBITS,‘XPquit2.WAV‘); % 实现 2 声道分离

%如果合并位置不对前面补 0 %声道长度不对后面补 0

x12=x1+x2; % 两路单声道列向量矩阵变量合并

x12m=max(max(x12),abs(min(x12))), % 找出极值

y12=x12./x12m; % 归一化处理

wavwrite(y12,FS,NBITS,‘XPquit12.WAV‘); % 实现两路声道合并

%如果组合位置不对前面补 0--声道长度不对后面补 0

x3=[x1,x2]; % 两路单声道变量组合

wavwrite(x3,FS,NBITS,‘XPquit3.WAV‘); % 实现两路声道组合

可以试听声道分离 合并与组合的效果 也可对各文件大小进行比较

数字滤波

数字滤波是常用的音频处理技术 可根据技术指标 先利用 FDATool 工具 设计一个数字滤波器[2] 再用 Filter 或 Filter2 函数即可实现滤波处理 调用的 Filter 函数格式是 Y = filte (B,A,X) 其中 B 和 A 是滤波器传输函数的分子和分母系数 X 是输入变量 Y是实现滤波后的输出变量 如果处理立体声音频信号 可分开处理 但用 FIR 滤波器时调用 Filter2 函数更方便

例 3 现以例 2 生成的 XPquit12.wav 为例 实现数字滤波的程序如下

clear; close all; clc;

[X,FS,NBITS]=wavread(‘XPquit12.WAV‘); % 将 WAV 文件转换成变量

%利用 FDATool 设计一个 LowpassButterworth 滤波器

%指标 FS=22050Hz Fp=1000Hz Ap=1dB Fs=3000Hz As=20dB

B =[0.0062,0.0187,0.0187,0.0062]; % 分子系数

A =[1,-2.1706,1.6517,-0.4312]; % 分母系数

Y=filter(B,A,X); % 实现数字滤波

t=(0:length(X)-1)/FS; % 计算数据时刻

subplot(2,2,1);plot(t,X); % 绘制原波形图

title(‘ 原信号波形图 ‘); % 加标题

subplot(2,2,3);plot(t,Y); % 绘制滤波波形图

title(‘ 滤波后波形图 ‘); % 加标题

xf=fft(X); % 作傅里叶变换求原频谱

yf=fft(Y); % 作傅里叶变换求滤波后频谱

fm=3000*length(xf)/FS; % 确定绘频谱图的上限频率

f=(0:fm)*FS/length(xf); % 确定绘频谱图的频率刻度

subplot(2,2,2);plot(f,abs(xf(1:length(f)))); % 绘制原波形频谱图

title(‘ 原信号频谱图 ‘); % 加标题

subplot(2,2,4);plot(f,abs(yf(1:length(f)))); % 绘制滤波后频谱图

title(‘ 滤波后信号频谱图 ‘); % 加标题

wavwrite(Y,FS,NBITS,‘XPquitFilter.WAV‘); % 写成 WAV 文件

程序运行结果如图 1 所示 由图可知 滤波对波形影响不大

但对高频有较大衰减 试听会感觉到处理后的声音比较沉闷

数据转换

数据转换是指改变音频格式中的采样频率或量化位数 转换原理是 先用矩阵插值或抽取技术实现变量变换 如果是抽取数据还需在变换前作滤波处理使之满足采样定理 变量变换完成后再用 Wavwrite 函数重新定义量化位数和采样频率即可实现数据转换 数据转换过程中 要注意采样频率与原始采样频率及插值或抽取系数的关系 MATLAB 实现插值或抽取的函数有 decimate ,interp 和 resample

这里以 2 倍抽取为例 将例 3 中经过滤波后产生的 XPquitFilter.WAV 文件进行数据转换处理 具体程序如下

clear; close all; clc;

[x,FS,NBITS]=wavread(‘XPquitFilter.WAV‘); % 将 WAV 文件转换成变量

N=length(x); % 计算数据点数

% 不是偶数点化成偶数点

if mod(N,2)==0; N=N; else x(N)=[]; N=N-1; end;

% 原信号波形频谱分析

tx=(0:N-1)/FS; % 计算原信号数据点时刻

subplot(3,2,1);plot(tx,x); % 绘制原信号波形

title(‘ 原信号波形图 ‘); % 加标题

xf=fft(x); % 求原信号频谱

fx=(0:N/2)*FS/N; % 确定频谱图频率刻度

subplot(3,2,2);plot(fx,abs(xf(1:N/2+1))); % 绘制原信号频谱

title(‘ 原信号频谱图 ‘); % 加标题

% 实现数据抽取

k=[1:N/2]; % 确定抽取位置

y=x(2*k); % 实现抽取后的数据

M=length(y); % 计算抽取后数据点数

% 抽取数据在原采样频率 FS 下的波形频谱分析

ty=(0:M-1)/FS; % 计算数据点时刻

subplot(3,2,3);plot(ty,y); % 绘制信号波形图

title(‘ 原采样率下新波形图 ‘); % 加标题

yf=fft(y); % 求频谱

fy=(0:M/2)*FS/M; % 确定频谱图频率刻度

subplot(3,2,4);plot(fy,abs(yf(1:M/2+1))); % 绘制频谱图

title(‘ 原采样率下新频谱图 ‘); % 加标题

% 抽取数据在 FS/2 采样频率下的波形频谱分析

tz=(0:M-1)/(FS/2); % 计算数据点时刻

subplot(3,2,5);plot(tz,y); % 绘制信号波形图

title(‘ 新采样率下新波形图 ‘); % 加标题

fz=(0:M/2)*(FS/2)/M; % 确定频谱图频率刻度

subplot(3,2,6);plot(fz,abs(yf(1:M/2+1))); % 绘制频谱图

title(‘ 新采样率下新频谱图 ‘); % 加标题

% 实现数据转换

wavwrite (y,FS/2,NBITS,‘XPquit16B.WAV‘); % 音频格式 PCM

11025Hz 16 位

wavwrite (y,FS/2,NBITS/2,‘XPquit8B.WAV‘); % 音频格式 PCM

11025Hz 8 位

运行程序 在得到的图形窗口中 执行 Edit/Axes Properties命令 再把各分图下 X 标签中的 Limits 设为 0,0.01 和 0, 1000 得到 0--0.01 秒的波形和 0 --1000Hz 的频谱如图 2 所示 由图可知在满足采样定律条件下 实现数据抽取 在原采样率下波形变密频谱变宽且幅度减半 但在新采样率下波形和频谱都很好 通过试听输出文件还可感受处理效果

基于MATLAB 的数字滤波实验

附录

参考文献:

基孑MATLAB的数字滤波器设计

南昌市科学器材公司 甘震

基于Matlab的音频文件数字滤波处理

张 康,刘 雅

基于MATLAB 的音频信号处理技术实现

张登奇 蒋敏

时间: 2024-12-26 02:54:07

【转帖】MATLAB 与 音频处理 相关内容摘记的相关文章

App Store审核指南中文版(2014.9.10更新):新增Apple Pay相关内容

苹果在9月3日对App Store审核指南进行了重大更新,新添加了扩展.HealthKit.HomeKit以及TestFlight相关内容.另外,在9月10日新品发布会之后,苹果再次更新了App Store审核指南,添加Apple Pay相关内容.文中红色部分是相对于此前版本的新增内容,蓝色部分表示苹果相关官方文档的链接. App Store Review Guidelines(英文版). 前言 感谢您付出宝贵的才华与时间来开发iOS应用程程序.从职业与报酬的角度而言,这对于成千上万的开发员来说

第一天上午——HTML网页基础知识以及相关内容

今天上午学习了HTML基础知识以及相关内容,还有DW的基本使用方法. HTML(HyperText Markup Language):超文本标记语言,超文本:网页中除了包含文本文字之外,还包含了图片,音频,视频等多媒体,所以叫超文本.之所以是标记语言,是因为网页的内容基本都是有一个个标签构成的 首先,是HTML语言和其他语言的对比. HTML:解析执行,逻辑性不强,标签较多,不需要搭建环境.浏览器解析代码,根据源代码从上到下一句一句执行. C等其他语言:编译执行,逻辑性强,需要搭建环境. 然后,

视频播放相关内容总结

视频播放相关内容总结 多媒体常识: 什么是多媒体 多媒体是计算机和视频技术的结合,实际上它是两个媒体:声音和图像,或者用现在的术语:音响和电视 常用的视频格式 Android系统默认:mp4.3gp 常用格式:ts.3gpp.3g2.3gpp2.avi.mkv.flv.divx.f4v.rm.rmvb.rv.wmv.asf.mov.mpg.v8.ram.mpeg. swf.m2v.asx.ra.ram.ndivx.xvid等 常用音频格式: Android系统:mp3.ogg: 常用格式:wma

基于matlab的音频波形实时采集显示 v0.1

robj = audiorecorder(44100,16,1); %设置采样频率.采样位数.通道数 recordblocking(robj,1); %采集初步数据(1s长度) rdata = getaudiodata(robj); %获取音频数据 plot(rdata); %绘制波形 axis([1,44100,-0.1,0.1]); %设置固定坐标轴 drawnow %刷新显示 n = 100; %设定后续的采样更新次数,n与m可联合计算后续更新时间长度 m = 0.1; %设定更新间隔,m

移动端 h5开发相关内容总结——CSS篇

移动端 h5开发相关内容总结——CSS篇 标签: css移动 2016-01-06 15:59 5536人阅读 评论(3) 收藏 举报  分类: HTML+CSS(17)  版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 1.移动端开发视窗口的添加 h5端开发下面这段话是必须配置的 <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=n

EF Code First 配置的相关内容

I.实体间一对一的关系 添加一个PersonPhoto类,表示用户照片类 1 /// <summary> 2 /// 用户照片类 3 /// </summary> 4 public class PersonPhoto 5 { 6 [Key] 7 public int PersonId { get ; set ; } 8 public byte [] Photo { get ; set ; } 9 public string Caption { get ; set ; } // 标题

matlab矩阵合并及相关运算

1.matlab允许向量(和矩阵)合并,且matlab提供了两种合并方式,[a,b]和[a;b],两者的结果是不一样的. a=rand(2,3): b=rand(2,3): c=[a;b]: d=[a,b]: c的结果是将b整体合并到a 的下边,而d的结果是整体将b合并到a 的右边. 2.创建等差向量组 a=[1:2:11] 注意涉及到向量内部对应数据之间的运算时一定要用点运算符号,(.)例如,求表达式b=a^2时应该写作 b=a.^2 也可以利用linspace来创建等差向量,linspace

python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。

本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding:utf-8from com.wenhy.crawler_baidu_baike import url_manager, html_downloader, html_parser, html_outputer print "爬虫百度百科调度入口" # 创建爬虫类class SpiderMai

学习笔记之html5相关内容

写一下昨天学习的html5的相关内容,首先谈下初次接触html5的感受.以前总是听说html5是如何的强大,如何的将要改变世界.总是充满了神秘感.首先来谈一下我接触的第一个属性是  input的里面的一个属性是 type="email".以前用html的时候,type是有很多类型的,有text,password,summit.就是没听说过email.当得知这个email是验证输入的内容是否为email格式的时候.我顿时兴奋了.以前接触到html的时候,如果要验证输入内容时,是需要写js