精华内容
下载资源
问答
  • 基于matlab的一款声音处理软件,其中包括声音提取(现场录入或者文件导入),声音的FFT频谱分析,相位分析以及滤波处理,通过三种滤波方式对声音进行去噪以及具有50%以上精度的声纹识别系统。
  • 课程设计任务书 学生姓名 XXX 学生学号 XXXXXXXXXXXXXXX 学生专业 XXXXXXXXXXXXXXX 学生班级 XXXXXXXXXXX 指导教师 XXXXXXXXXXX ...MATLAB的声音信号处理 设计目的 1巩固所学的数字信号处理理论知识 2理解信号的采集处
  • MATLAB 声音文件处理

    2019-10-06 05:47:30
    由于最近Project要做声音分析,需要用到MATLAB,之前一直...言归正传,我们来讨论下用MATLAB声音文件处理。 1. 读取WAV声音文件 % wavread(filename) 读取一个WAVE文件,并返回采样数据到向量y中,Fs表示采样...

    由于最近的Project要做声音分析,需要用到MATLAB,之前一直没怎么接触过,所以乘着做Project学习下。真的用了才知道MATLAB真是神器啊,呵呵~~~其强大的函数库和数学运算能力彻底让我折服了。言归正传,我们来讨论下用MATLAB做声音文件处理。

    1. 读取WAV声音文件

    % wavread(filename) 读取一个WAVE文件,并返回采样数据到向量y中,Fs表示采样频率, bits表示采样位数 [y, Fs, bits] = wavread('drum.wav'); %假设声音文件有两个声道,我们只分析第一个声道,如果要分析第二个声道可以改为:ft=y(:,2); ft = y(:,1); sigLength = length(ft); %获取声音长度 %可以使用sound函数来播放声音 sound(y, Fs, bits)
    2. 绘制波形图
    t=(0:sigLength-1)/Fs; figure; subplot(2,1,1); plot(t, ft), title('Plot of the Tone'),grid; xlabel('Time(s)'); ylabel('Amplitude');

    3. 绘制振幅频谱图
    %Y = fft(X) 使用快速傅里叶变换算法返回向量X的离散型傅里叶变换 %Y = fft(X,n) 返回n点的离散傅里叶变换,如果向量X的长度小于n,函数要将向量X补零到长度n;如果向量X的长度大于n, 则函数阶段X使之长度为n。若X是矩阵,按相同方法对X进行处理。 Y = fft(ft,sigLength); halfLength = floor(sigLength/2); Pyy =Y(1:halfLength + 1); % 只选取前半截部分
     
    波形的傅里叶变换返回震级和相位信息,并且用复数的形式表达,通过计算绝对值来获取其频率的振幅
    Pyy = abs(Pyy);%用于计算复向量的Y的振幅 f = ((0:halfLength)+1)* Fs/sigLength; subplot(2,1,2); plot(f,Pyy), title('Frequency spectrum'),grid; xlabel('Frequency(Hz)'); ylabel('Amplitude');
     
    4. 绘制能量频谱图
    Y = fft(ft,sigLength); halfLength = floor(sigLength/2); Pyy =Y(1:halfLength + 1); % 只选取前半截部分 Pyy = abs(Pyy);%用于计算复向量的Y的振幅 f = ((0:halfLength)+1)* Fs/sigLength; %通过点数调整比例,从而使振幅不依赖于信号长度或采样频率,说实话这部分还不是很明白 Pyy = Pyy/sigLength; Pyy = Pyy.^2; %求平方得到能量 % 乘以2, 请参照 http://www.mathworks.com/support/tech-notes/1700/1702.html if rem(sigLength, 2) %奇数的 n fft 不包含奈奎斯特(Nyquist)点 Pyy(2:end) = Pyy(2:end)*2; else Pyy(2:end -1) = Pyy(2:end-1)*2; end plot(f/1000, 10*log10(Pyy), 'k') xlabel('Frequency (kHz)') ylabel('Power (dB)')
     
    引用:
    The MethWorks Support. Technique notes 1702, http://www.mathworks.com/support/tech-notes/1700/1702.html

    转载于:https://www.cnblogs.com/wubo/archive/2011/08/02/2253507.html

    展开全文
  • matlab声音处理

    千次阅读 2013-12-05 16:44:00
     由于最近Project要做声音分析,需要用到MATLAB,之前一直没怎么接触过,所以...言归正传,我们来讨论下用MATLAB声音文件处理。 1. 读取WAV声音文件 [plain] view plaincopyprint? % wavread
    

    由于最近的Project要做声音分析,需要用到MATLAB,之前一直没怎么接触过,所以乘着做Project学习下。真的用了才知道MATLAB真是神器啊,呵呵~~~其强大的函数库和数学运算能力彻底让我折服了。言归正传,我们来讨论下用MATLAB做声音文件处理。

    1. 读取WAV声音文件

    1. % wavread(filename) 读取一个WAVE文件,并返回采样数据到向量y中,Fs表示采样频率, bits表示采样位数  
    2. [y, Fs, bits] = wavread('drum.wav');  
    3.   
    4. %假设声音文件有两个声道,我们只分析第一个声道,如果要分析第二个声道可以改为:ft=y(:,2);  
    5. ft = y(:,1);  
    6. sigLength = length(ft); %获取声音长度  
    7.   
    8. %可以使用sound函数来播放声音  
    9. sound(y, Fs, bits)  
    % wavread(filename) 读取一个WAVE文件,并返回采样数据到向量y中,Fs表示采样频率, bits表示采样位数
    [y, Fs, bits] = wavread('drum.wav');
    
    %假设声音文件有两个声道,我们只分析第一个声道,如果要分析第二个声道可以改为:ft=y(:,2);
    ft = y(:,1);
    sigLength = length(ft); %获取声音长度
    
    %可以使用sound函数来播放声音
    sound(y, Fs, bits)


    2. 绘制波形图
    1. t=(0:sigLength-1)/Fs;   
    2. figure;  
    3. subplot(2,1,1);  
    4. plot(t, ft), title('Plot of the Tone'),grid;  
    5. xlabel('Time(s)');  
    6. ylabel('Amplitude');  
    t=(0:sigLength-1)/Fs; 
    figure;
    subplot(2,1,1);
    plot(t, ft), title('Plot of the Tone'),grid;
    xlabel('Time(s)');
    ylabel('Amplitude');

    3. 绘制振幅频谱图
    1. %Y = fft(X) 使用快速傅里叶变换算法返回向量X的离散型傅里叶变换  
    2. %Y = fft(X,n) 返回n点的离散傅里叶变换,如果向量X的长度小于n,函数要将向量X补零到长度n;如果向量X的长度大于n, 则函数阶段X使之长度为n。若X是矩阵,按相同方法对X进行处理。  
    3.   
    4. Y = fft(ft,sigLength);   
    5. halfLength = floor(sigLength/2);  
    6. Pyy =Y(1:halfLength + 1); % 只选取前半截部分  
    %Y = fft(X) 使用快速傅里叶变换算法返回向量X的离散型傅里叶变换
    %Y = fft(X,n) 返回n点的离散傅里叶变换,如果向量X的长度小于n,函数要将向量X补零到长度n;如果向量X的长度大于n, 则函数阶段X使之长度为n。若X是矩阵,按相同方法对X进行处理。
    
    Y = fft(ft,sigLength); 
    halfLength = floor(sigLength/2);
    Pyy =Y(1:halfLength + 1); % 只选取前半截部分

    波形的傅里叶变换返回震级和相位信息,并且用复数的形式表达,通过计算绝对值来获取其频率的振幅
    1. Pyy = abs(Pyy);%用于计算复向量的Y的振幅  
    2. f = ((0:halfLength)+1)* Fs/sigLength;   
    3. subplot(2,1,2);  
    4. plot(f,Pyy), title('Frequency spectrum'),grid;  
    5. xlabel('Frequency(Hz)');  
    6. ylabel('Amplitude');  
    Pyy = abs(Pyy);%用于计算复向量的Y的振幅
    f = ((0:halfLength)+1)* Fs/sigLength; 
    subplot(2,1,2);
    plot(f,Pyy), title('Frequency spectrum'),grid;
    xlabel('Frequency(Hz)');
    ylabel('Amplitude');

    4. 绘制能量频谱图
    1. Y = fft(ft,sigLength);   
    2. halfLength = floor(sigLength/2);  
    3. Pyy =Y(1:halfLength + 1); % 只选取前半截部分  
    4. Pyy = abs(Pyy);%用于计算复向量的Y的振幅  
    5. f = ((0:halfLength)+1)* Fs/sigLength;   
    6. %通过点数调整比例,从而使振幅不依赖于信号长度或采样频率,说实话这部分还不是很明白  
    7. Pyy = Pyy/sigLength;   
    8. Pyy = Pyy.^2; %求平方得到能量  
    9. % 乘以2, 请参照 http://www.mathworks.com/support/tech-notes/1700/1702.html  
    10. if rem(sigLength, 2)  %奇数的 n fft 不包含奈奎斯特(Nyquist)点  
    11.    Pyy(2:end) = Pyy(2:end)*2;  
    12. else  
    13.    Pyy(2:end -1) = Pyy(2:end-1)*2;  
    14. end  
    15.   
    16. plot(f/1000, 10*log10(Pyy), 'k')   
    17. xlabel('Frequency (kHz)')   
    18. ylabel('Power (dB)')   
    Y = fft(ft,sigLength); 
    halfLength = floor(sigLength/2);
    Pyy =Y(1:halfLength + 1); % 只选取前半截部分
    Pyy = abs(Pyy);%用于计算复向量的Y的振幅
    f = ((0:halfLength)+1)* Fs/sigLength; 
    %通过点数调整比例,从而使振幅不依赖于信号长度或采样频率,说实话这部分还不是很明白
    Pyy = Pyy/sigLength; 
    Pyy = Pyy.^2; %求平方得到能量
    % 乘以2, 请参照 http://www.mathworks.com/support/tech-notes/1700/1702.html
    if rem(sigLength, 2)  %奇数的 n fft 不包含奈奎斯特(Nyquist)点
       Pyy(2:end) = Pyy(2:end)*2;
    else
       Pyy(2:end -1) = Pyy(2:end-1)*2;
    end
    
    plot(f/1000, 10*log10(Pyy), 'k') 
    xlabel('Frequency (kHz)') 
    ylabel('Power (dB)') 



    引用:
    The MethWorks Support. Technique notes 1702, http://www.mathworks.com/support/tech-notes/1700/1702.html
    展开全文
  • 基于Matlab的声音信号采集与分析处理
  • Matlab声音处理教程

    千次阅读 2012-11-18 09:41:11
    Matlab声音处理教程 1)用mp3录音,生成文件cricket.wav,把该文件放到matlab文件夹里面(就是你打开matlab后中间顶部地址)。 2)使用如下程序,做波形显示以及fft变换。 [y,Fs,bits]=wavread('...

    Matlab声音处理教程

    1)用mp3录音,生成文件cricket.wav,把该文件放到matlab文件夹里面(就是你打开matlab后中间顶部的地址)。

    2)使用如下程序,做波形显示以及fft变换。

    [y,Fs,bits]=wavread('cricket.wav');%读出信号,采样率和采样位数。 
    y=y(:,1);%我这里假设你的声音是双声道,我只取单声道作分析,如果你想分析另外一个声道,请改成y=y(:,2) 
    sigLength=length(y); 
    Y = fft(y,sigLength); 
    Pyy = Y.* conj(Y) / sigLength;% conj函数,用于求一个复数的复共轭
    halflength=floor(sigLength/2); % 根据模板大小确定要扩展的边界
    f=Fs*(0:halflength)/sigLength; 
    figure;plot(f,Pyy(1:halflength+1));xlabel('Frequency(Hz)'); 
    t=(0:sigLength-1)/Fs; 
    figure;plot(t,y);xlabel('Time(s)');

    3)频率看频谱就有了,声音间隔看声音波形,周期看声音波形。

    4)关于去噪声。

    a)如果噪声是特定频率的周期噪声(periodic noise),比如说50hz,那么你可以用matlab的filter,作一个低通、高通、带通或者带阻滤波。 
    b)如果声音是高斯白噪声。那就用自适应滤波(adaptive filter,wiener filter)。这里涉及到对噪声的采样、计算特征值以及决定阶数的问题。 
    c)幸好我们可以“耍赖”——用cool editor。用它打开wav文件,用鼠标把一段噪声圈起来,采样,然后直接选择去噪就可以了。各大网站有介绍。

    例子:matlab去除50hz噪声。 
    我用电脑录了一段声音,里面有50hz的周期噪声(因为受交流电干扰)。而我自己的声音频率最低是90hz。我使用了一个10阶butterworth高通滤波器,边带是70hz(介于50跟90之间)。 
    问题是,这不能直接用。因为声音文件的采样率是22k,70相对于22k来说太小了。所以我得先把我的声音欠采样,然后再滤波,然后再插值。程序如下。

    [k,Fs,bits]=wavread('mywav.wav'); 
    k=k(:,1); 
    y_temp=k(1:90000);

    dfactor=3; 
    y=decimate(y_temp,dfactor); 
    [b,a] = butter(10,70/(Fs/(dfactor*2)),'high'); 
    y=filter(b,a,y); 
    y=interp(y,dfactor);

    sigLength=length(y); 
    Y = fft(y,sigLength); 
    Pyy = Y.* conj(Y) / sigLength; 
    halflength=floor(sigLength/2); 
    f=Fs*(0:halflength)/sigLength; 
    figure;plot(f,Pyy(1:halflength+1));xlabel('Frequency(Hz)');

    sigLength=length(y_temp); 
    Y = fft(y_temp,sigLength); 
    Pyy = Y.* conj(Y) / sigLength; 
    halflength=floor(sigLength/2); 
    f=Fs*(0:halflength)/sigLength; 
    figure;plot(f,Pyy(1:halflength+1));xlabel('Frequency(Hz)');

    t=(0:sigLength-1)/Fs; 
    figure;plot(t,y,t,y_temp);xlabel('Time(s)');

    wavplay(y,Fs); 
    wavplay(y_temp,Fs);

    5)回放:使用wavplay函数 
    wavplay(y,Fs);

    展开全文
  • 对于matlab,大家应该比较熟悉。今天小哥就带大家来做均匀量化。量化是将模拟信号转化为数字信号必不可少一步。均匀量化相对比较简单,就是比如将信号在[-1,1]分成相同很多段,要是某个值在其中某一段,就将其...

    对于matlab,大家应该比较熟悉。今天小哥就带大家来做均匀量化。

    量化是将模拟信号转化为数字信号必不可少的一步。均匀量化相对比较简单,就是比如将信号在[-1,1]分成相同的很多段,要是某个值在其中某一段,就将其的值归为那一类。每一类都可以用一个唯一的二进制编码表示。

    现在我们要做的就是对wav的音频信号进行量化。具体一点:在road.wav文件左声道取前200个点做4bit量化,并且用matlab作图比较量化前和量化后的图。那么第一步是什么呢?那就是获取样本点?不是的,我们第一步是获取我们需要量化的音频。可以用

    step1:

    我们可以用[y,fs,nbits]= wavread('F:\a.wav',1024);即可得到我们所需处理的样本点。

    step2:对采集到的信号进行量化。

    方法一:直接使用量化函数->quantizer(做一个量化器),quantize(对某信号进行用量化器量化)

    syms sample_point;

    syms quantizion_bits;

    sample_point = 200;

    quantizion_bits = 5;

    [y,fs,nbits]= wavread('road.wav',sample_point);

    sample = y(1:sample_point);

    n = 1:sample_point;

    q_riser = quantizer('fixed','round','saturate',[10,quantizion_bits]); %定义一个量化器

    q_tread = quantizer('fixed','ceil','saturate',[10,quantizion_bits]); %定义一个量化器

    mid_riser = quantize(q_riser,sample);%对采样信号进行量化

    mid_tread = quantize(q_tread,sample);%对采样信号进行量化

    subplot(1,2,1);  plot(n,sample,'r',n,mid_riser,'b'); title('mid riser');

    grid;

    subplot(1,2,2);  plot(n,sample,'r',n,mid_tread,'b'); title('tread riser');

    grid;

    方法二:自己量化,更加灵活。

    syms sample_point;

    sample_point = 200;         %所需采集的声音样本点的数量

    [y,fs,nbits]= wavread('road.wav',sample_point);   %提取出音频信号的前200个点

    sample = y(1:sample_point);   %提取出左声道的信号

    n = 1:sample_point;

    mid_riser = ones(sample_point,1);

    mid_tread = ones(sample_point,1);

    delta = 0.7/16;              %采样间隔

    for i = 1:sample_point         %采用mid-riser的方法

    inteval_rise = floor((sample(i) + 0.4)/delta);  %计算有的采样间隔数

    inteval_tread = floor((sample(i) + 0.4 + delta/2 )/delta); %

    mid_riser(i) = delta* (2*inteval_rise+1)*0.5 - 0.4;  %mid_riser的方法

    mid_tread(i) = delta*inteval_tread - 0.4;            %mid_tread的方法

    end

    subplot(1,2,1);  plot(n,sample,'r',n,mid_riser,'b'); title('mid riser');

    grid;

    subplot(1,2,2);  plot(n,sample,'r',n,mid_tread,'b'); title('tread riser');

    grid;

    参考函数:

    wavread(wavread的具体使用,举例说明):

    例子一:[Y,F,b]=wavread('test.wav');

    Y2=Y(((F*10+1):F*20),:);

    wavwrite(Y2,F,b,'test_new.wav') ;%你在开始可能觉得无从入手,

    %因为你要把绝对路径加进去

    %以上做的就是将这个音频的10~20秒给Y2。加入我们听到

    %一首歌需要对其中某一部分进行操作,就可以这样做。

    例子二:[y,fs,nbits]= wavread(wavFile1);

    %y就是音频信号;

    %fs是采样频率,比如说16000就是每秒16000次;

    %nbit是采样精度,比如说16就是指16位的二进制码去表示数据;可以表示精

    wavread('F:\a.wav',1024)%读取该音频文件前1024个采样点

    例子三:Y=wavread(FILE);读取文件FILE里面的数据,是wav结尾的,如果没有加wav,

    默认是wav

    例子四:[...]=wavread(FILE,N);返回的是每个声道的开始N个样本点

    例子五:[...]=wavread(FILE,[N1 N2]) 返回每个声道的从N1~N2的样本点

    展开全文
  • word 资料 Matlab 实验报告题目二 题目二 声音信号的采集与滤波处理(采用IIR滤波器或FIR滤波器) 参考资料信号的采集数字信号处理及滤波实例 要求1采集声音信号或打开已录好的声音文件并显示其信号图与频域图 2根据...
  • matlab 声音处理-男声变女声

    热门讨论 2011-04-16 13:43:16
    matlab 课程设计 大作业 用matlab gui做系统编写音频处理系统,可以录音,变声,变调,保存,仅供参考
  • matlab实现声音信号采集、加噪、低通、高通、带通滤波,回放声音信号。
  • 对于matlab,大家应该比较熟悉。今天小哥就带大家来做均匀量化。 量化是将模拟信号转化为数字信号必不可少一步。均匀量化相对比较简单,就是比如将信号在[-1,1]分成相同很多段,要是某个值在其中某一段,就将其...
  • matlab处理采集的声音数据

    千次阅读 2016-11-12 17:48:23
    上次采集的声音信号需要进过一系列的信号的预处理才可以用于机器学习算法的使用。 数据处理需要把时域信号转换成频域信号,并把无用频率删除了,并把对应的信号分隔成22个样本,分开样本的意思就是可以做训练集和...
  • matlab声音处理-男声变声

    热门讨论 2011-11-22 20:11:29
    利用matlabgui编程实现男女变声代码。
  • 因为Matlab在数字信号处理便捷,又有功能强大工具箱辅助设计,所以我们可以利用Matlab完成声音信号频谱分析和时序分析设计。本次设计内容包括: 1) 信号获取 2) 时域分析:包括频率,振幅,相位,周期,...
  • 基于matlab的语音信号处理 摘要 利用所学习的数字信号处理知识设计了一个有趣的音效处理系统首先设计了几种不同的滤波器对声音进行滤波处理分析了时域和频域的变化比较了经过滤波处理的声音与原来的声音有何变化...
  • 基于Matlab的语音信号去噪声处理 毕业论文 本科毕业论文设计 题目基于Matlab的语音信号去噪声处理 姓 名 学 号 1142051102 专 业 电子信息工程 院 系 电子通信工程 指导老师 职称学位 硕士 完成时间 教务处制 安徽...
  • 适用于用Matlab学习信号处理的学习者
  • matlab的一个工具箱,voicebox用来处理声音,视频等音频文件。
  • Matlab音频信号基本处理与分析1 音频信号读取与时域分析close all clear all clc %读取音频文件 info =audioinfo('sample_orig.mp3');%获取音频文件信息 [audio,Fs] = audioread('sample_orig.mp3');%读取...
  • 仅供个人参考 仅供个人参考 不得用于商业用途 不得用于商业用途 % --- Executes on butt on press in pushbutt onl. function pushbutt on 1_Callback(hObject, eve ntdata, han dies) % hObject handle to pushbutt...
  • Matlab音乐信号处理程序 *1* close all; clear all; clc; %信号音谱 [w,fs,b]=wavread'宽恕.wav; w1=w,2; subplot(2,2,1; plot(w1; title'原信号音谱; sound(w1,fs; %分别以2fs, fs, fs/2频率播放声音 %信号频谱 f...
  • MATLAB语音信号处理

    热门讨论 2009-05-02 22:51:39
    1、 每位同学用Windows系统录下一段声音,用Matlab将其读出,并显示其时域波形 2、 对所录声音做傅立叶分析,观看其频谱 3、 变换朗读声音的大小,再次用windows系统录下一段音,做傅立叶分析,观看其频谱有无变化...
  • 基于MATLAB的能级、波函数及几率密度图形的处理,张树林,厉树忠,Matlab语言是由美国的Clever Moler博士于1980年开发的,它集科学计算、图象处理、声音处理于一身,并提供了丰富的Windows图形界面设计方法�
  • 例如,一个声音数字信号,一定有一个每秒若干次采样,每一个时间段,声音的强度也将有一个固定精度取值。信号数字化一般需要三个步骤:抽样、量化、编码 一维数字信号有时可能是波形信号,这样信号通过...
  • 基于MATLAB的语音分析处理系统设计

    千次阅读 2020-11-01 23:21:20
    语音即语言的声音,是语言符号系统的载体。它由人的发音器官发出,负载着一定的语言意义。语言依靠语音实现它的社会功能。语言是音义结合的符号系统,语言的声音和语言的意义是紧密联系着的,因此,语言虽是一种声音...
  • 本课题是基于MATLAB的维纳滤波实现对加噪声音信号去噪的过程和效果的研究,从而加深对维纳滤波语音去噪过程的了解,对于日后维纳滤波在语音处理中应用的扩展有很大的帮助。

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 190
精华内容 76
关键字:

matlab的声音处理

matlab 订阅