OpenVINOTM,给你看得见的未来!>>
电子产品世界 » 论坛首页 » 高校专区 » 东师科技爱好者 » 关于运用MATLAB进行信号的简单处理

共9条 1/1 1 跳转至

关于运用MATLAB进行信号的简单处理

菜鸟
2016-04-19 22:51:59    评分

在前几天的时候社团举办了一次活动,关于运用MATLAB对声音信号进行简单的处理,不知道大家对这个有没有兴趣呢,下面我就给大家贡献一下用到的源程序把!

首先是对于音频文件的读取当然这里用到的就是wavread函数和sound函数咯

[y,fs,nbits]=wavread('nv.wav');
n=length(y);%求出声音长度?
t=0:1/fs:(n-1)/fs;%时间t?从0到n-1?
wavplay(y,fs);%对加载的语音信号进行回放?
subplot(2,1,1);
plot(y);%做原始语音信号的时域图形?
title('原始语音信号时域波形');
grid;
%傅里叶变换?
y1=fft(y,n);%做原始语音信号的傅里叶变换???
%对原始信号频域分析?%
y2=fftshift(y1);
subplot(2,1,2);
Y1=abs(y1);
plot(Y1);%原始信号的频谱图像?
title('原始信号的频谱图像');
grid;
在上面的函数中我们的nv.wav就是读取到的音频的名称,fs代表的是这个文件的频率咯,然而大家一定要记得在同一个文件夹里哦,在上面的程序里面每句话我都加了注释,如果说大家有什问题还可以在下面问呦!




关键词: MATLAB    

菜鸟
2016-04-19 22:58:53    评分
2楼

当然了我不可能只是把文件读取进来就算了,当然要对信号进行处理呀,下面是一些简单的处理,比如说变速和倒放,而这些处理归根结底就是对矩阵的处理,因为我们在上面采集到的数据y就是一个一列的矩阵下面的程序就是对信号的变速和倒放

sound(y,0.8*fs);

sound(y,1.2*fs);

sound(flipud(y),fs);

当然了上面的程序很简单啦,变速最基本的原理就是改变他的播放频率而已,然后我们就在用sound函数进行播放的时候让它乘上一个数字,大于一就是加速,小于一就是减速,大家可以试着玩一下哦,体会一下自己将正常声音变成大叔的声音或者萝莉声音的感觉,而最后一个就是flipud函数将矩阵上下翻转,这就变化才能了倒放!


菜鸟
2016-04-19 23:15:29    评分
3楼

上面的一些这么简单的信号处理肯定满足不了大家的求知欲,下面就给大家带来稍微高大上一点的东西,那就是数字滤波器,用MATLAB对一段音频进行滤波处理,在MATLAB中一般是有四种不同作用的滤波器,分别是低通滤波器,高通滤波器,带通滤波器,带阻滤波器,我给大家分享的呢就是用椭圆滤波器中的低通和高通滤波器,大家有兴趣可以查一下其他的滤波器

% %低通滤波器%
 fp1=500;fs1=700;         %设定低通滤波器通带截止频率和阻带截止频率
 wp1=2*fp1/fs; ws1=2*fs1/fs;rp=1;as=100;
 [N1,wp1]=ellipord(wp1,ws1,rp,as);  %计算椭圆低通模拟滤波器的阶数和通带边界频率
 [B,A]=ellip(N1,rp,as,wp1);         %计算低通滤波器模拟滤波器系统函数系数
p1=filter(B,A,y);                %滤波器软件实现
P1=abs(fft(p1));
上面的就是低通滤波器

%高通滤波器%
 fp2=4800;fs2=5000;                       %设定高通滤波器通带截止频率和阻带截止频率
 wp2=2*fp2/fs; ws2=2*fs2/fs;rp=1;as=100;
 [N2,wp2]=ellipord(wp2,ws2,rp,as);    %计算椭圆高通模拟滤波器的阶数和通带边界频率
 [B2,A2]=ellip(N2,rp,as,wp2,'high');        %计算高通滤波器模拟滤波器系统函数系数
 y2=filter(B2,A2,y);
 %滤波器软件实现
Y2=(abs(fft(y2)));

大家在看到这么一段程序的时候可能会感觉到有点懵逼了,对于初学者来说我们不需要理解到底里面的那每个函数是怎么运算的,只需要知道怎么用就好了,首先这个数字滤波器他其实就是求出来三个参数而已,分别是上面程序中的N1,B,A,这里面N1代表的是滤波器的最小阶数,也就是它要对信号处理几次多了成本高少了目的达不到,所以才会是用ellipord函数求出来最小阶数,而上面的wp,ws,as,rp都是我们自己设置的数据,而下面的ellip函数则是用来求系数B,A的因为我们要对一个数据进行处理肯定是要有系数的嘛,filter函数才是对我们的信号哦进行处理的函数,用上面计算出来的系数处理,这样就完成了滤波!


菜鸟
2016-04-19 23:20:53    评分
4楼

上面就是我们在办活动的时候用到的一些程序,大家可以亲自试验一下,当然啦里面的音频文件记得一定要是WAV格式或者是au格式,另外大家还可以用MATLAB中的录音函数进行玩耍

fs=44100;
s=wavrecord(5*fs,fs,'double');

在这里就是一个简单的录音5秒的函数,录音的采样频率为44100Hz,因为MATLAB不能对连续信号进行处理,所以说我们只能来采集样点处理,而44100Hz就是代表了每秒采集44100个点!

大家有问题可以随时在下面提问,如果有错误的话,望大家提出,一定虚心改正!





专家
2016-04-20 05:39:25    评分
5楼
好牛,完全看不懂呀

菜鸟
2016-04-20 07:56:58    评分
6楼

菜鸟
2016-04-21 21:17:13    评分
7楼

高工
2016-04-25 00:50:57    评分
8楼
虽然我看不懂,但是觉得写得挺多的

菜鸟
2016-05-25 18:37:54    评分
9楼
MATLAB功能好强大,下次有机会能教大家做GUI可好。

共9条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]