精华内容
下载资源
问答
  • 音频处理】之 Matlab音频文件处理
    千次阅读
    更多相关内容
  • MATLAB音频处理

    2020-03-10 20:21:27
    利用MATLAB处理音频信号,快速上手,马上入门,含有详细解释 (第十五届智能车竞赛声标追逐(信标追逐)入手资料)
  • matlab音频处理

    2017-12-25 16:28:29
    通过模拟音频受污染,开发出一套处理音频噪声的程序,从而使音频恢复
  • 可实现音频倍速,以及音频的慢放和优化处理
  • 著名的matlab音频处理工具箱colearar-matlab音频处理工具箱colea.rar 提供音频处理的各种常用函数,音频特征提取、滤波、处理和压缩
  • matlab音频变换,matlab音频处理,matlab源码.rar
  • matlab音频变换,matlab音频处理,matlab源码.zip
  • matlab录音与音频处理GUI界面。。。。
  • play(player) % 要终止播放的时候只需 clear sound % 或者 clear player 给一段音频添加指定的噪声 function [Y, NOISE] = add_noise(X, filepath_name, SNR, fs_X) % add_noisem add determinated noise to a ...

    保存.wav

    audiowrite(filename,y,Fs)
    audiowrite(filename,y,Fs,Name,Value)
    

    播放.wav

    %方法1
    [filename,pathname]=uigetfile('.wav','选择原始声音文件');
    file=[pathname,filename];
    fs = audioinfo(file).SampleRate;
    [x,fs] = audioread(file);
    sound(x,fs);
    
    % 方法2
    filename=strcat('doing_the_dishes.wav');
    [x,fs]=audioread(filename);
    ainfo = audioinfo(filename);
    nbits = 8;
    player=audioplayer(x,fs,nbits);
    play(player)
    
    % 要终止播放的时候只需
    clear sound
    % 或者
    clear player
    

    给一段音频添加指定的噪声

    function [Y, NOISE] = add_noise(X, filepath_name, SNR, fs_X)
        % add_noisem add determinated noise to a signal.
        % X is a signal, and its sample frequency is fs;
        % filepath_name is NOISE's path and name, and the SNR is signal to
        % noise ratio in dB.
        
        [wavin, fs1] = audioread(filepath_name);
        if fs1~=fs_X
            wavin1 = resample(wavin, fs_X, fs1);
        else
            wavin1 = wavin;
        end
        nx = size(X,1);
        NOISE = wavin1(1:nx);
        NOISE = NOISE - mean(NOISE);
        signal_power = 1/nx*sum(X.*X);
        noise_variance = signal_power / (10^(SNR/10));
        NOISE = sqrt(noise_variance)/std(NOISE)*NOISE;
        Y = X + NOISE;
    end
    

    信噪比为10,-3,5如下图所示
    在这里插入图片描述

    展开全文
  • 基于matlab数字音频处理系统,实现音频的频谱分析,去噪,说话人识别
  • matlab 音频处理工具箱

    2014-03-30 10:53:08
    matlab的可视化语音信号处理软件,可以轻松的处理各类语音信号,进行FFT和LPC调制
  • 一个如何操作音频的例子,在这种情况下反转它。
  • Matlab 音频信号处理

    千次阅读 2021-11-28 15:35:43
    Matlab 音频信号处理   现有原始音频文件SunshineSquare.wav,后半段音频被人为加上了多频段的噪音,使用matlab工具对其进行分析并消除噪音还原出无噪音频文件。   Step1:分析原始音频文件 读取 [audio_data...

    Matlab 音频信号处理

      现有原始音频文件SunshineSquare.wav,后半段音频被人为加上了多频段的噪音,使用matlab工具对其进行分析并消除噪音还原出无噪音频文件。

     

    Step1:分析原始音频文件

    读取

    [audio_data, fs] = audioread('../../SunshineSquare.wav');
    L = length(audio_data);
    
    % 听一听该音频
    % soundsc(audio_data, fs);
    

    绘制时域图

      从下面时域图中可以看出,源音频文件时长11秒左右,从第8秒左右开始为一段强噪声。

    figure('Name','Original');
    
    
    tt = (1 : L) * 1/fs;
    subplot(4, 1, 1);plot(tt, audio_data);grid;
    title('Time Domain');xlabel('时间(s)');ylabel('Amp');
    

    image-20211128143420786

    频谱分析

      使用快速傅里叶变换FFT对时域信号进行频谱分析,绘制的频域图反映出有四段噪声频段,后续消除噪声工作就是对这四个频段进行滤波。

    L = 2^nextpow2(L); % 先从原始信号长度确定下一个 2 次幂的新长度,用尾随零填充信号以改善 fft 的性能
    Spectrum = fft(audio_data,L); % 快速傅里叶变换,转换为频域
    f_x = fs*(0:(L/2))/L; % 定义频域,即变换横坐标量纲为频率
    mag_FFT_audio_data = abs(Spectrum / L); % 取幅值,并归一化
    ang_FFT_audio_data = angle(Spectrum)*180/pi;
    
    subplot(4, 1, 2);plot(f_x,mag_FFT_audio_data(1 : L/2+1)) 
    title('Frequency Domain');xlabel('频率(Hz)');ylabel('mag');
    subplot(4, 1, 3);plot(f_x,ang_FFT_audio_data(1 : L/2+1)) 
    title('Frequency Domain');xlabel('频率(Hz)');ylabel('ang');
    

    image-20211128143455368

    绘制声谱图

      声谱图能够以颜色反映各频段信号强度随时间的变化和分布情况,如图所示,从第8秒左右开始有4个频段的强度持续较高,这就是上面频域分析出的4个噪声频段。但需要注意到,在噪声的开始和结束时刻,所有频段的强度都很高,在图中显示为两条垂直的黄线,这两条线仅靠滤波无法消除。

    subplot(4, 1, 4)
    spectrogram(audio_data,hann(256),250,256,fs,'yaxis');
    

    image-20211128143558882

     

     

    Step2:滤波

    滤波法1——手动衰减

      手动衰减各个噪声频段的幅度,注意FFT变换后的频谱图为偶对称,所以共有4对(8个)频段,逐一消除。

    [m, n] = max(Spectrum)
    Spectrum(n-850: n+850) = 0; % 第一个噪声频段
    
    [m, n] = max(Spectrum)
    Spectrum(n-850: n+850) = 0; % 第二个噪声频段
    
    [m, n] = max(Spectrum)
    Spectrum(n-850: n+850) = 0; % 第三个噪声频段
    
    [m, n] = max(Spectrum)
    Spectrum(n-850: n+850) = 0; % 第四个噪声频段
    
    [m, n] = max(Spectrum)
    Spectrum(n-850: n+850) = 0; % 第五个噪声频段
    
    [m, n] = max(Spectrum)
    Spectrum(n-850: n+850) = 0; % 第六个噪声频段
    
    [m, n] = max(Spectrum)
    Spectrum(n: n+850) = 0; % 第七个噪声频段
    
    [m, n] = max(Spectrum)
    Spectrum(n-850: n+850) = 0; % 第八个噪声频段
    
    % 逆fft获得处理后的音频
    ifft_data = real(ifft(Spectrum, L));
    audio_data = ifft_data(1:length(audio_data));
    
    滤波效果

      绘制滤波后音频信号的时域图、频域图、声谱图,可看见时域图上噪声被消除,频谱图上4个频段的信号全部被消除,声谱图有四条水平的消磨痕迹。

    image-20211130213111056

     

    滤波法2——数字滤波器

      设计梳状滤波器,因为有4个噪声频段,所以设计4个带阻滤波器逐一滤波。

    %h1[n] = [1,-2,1];
    h1 = [1,-2,1];
    h2 = [1,-1.24698,1];
    h3 = [1,0.44504,1];
    h4 = [1,1.80194,1];
    a = [1,0,0];
    
    %滤波过程
    audio_data_h1 = filter(h1,a,audio_data);
    audio_data_h2 = filter(h2,a,audio_data_h1);
    audio_data_h3 = filter(h3,a,audio_data_h2);
    audio_data_h4 = filter(h4,a,audio_data_h3);
    
    audio_data = audio_data_h4;
    
    滤波器分析

      绘制4个滤波器的幅频、相频、衰减及每次滤波后的信号时域图。

    image-20211128145815600 image-20211128145835590 image-20211128145856791 image-20211128145920683

     

     

    Step3:后续处理

      上面已分析,在噪声开始和结束时刻都有全频段的高强度信号,不是滤波能消除的,这里采用时域衰减,即在时域采用同第一种滤波方法相同的思想,手动衰减这两个时刻的信号强度。随后输出处理过的音频文件。

    [m, n] = max(audio_data);
    audio_data(n-200: n+200) = 0.0001 * audio_data(n-200: n+200); % 衰减第一个高音时段
    [m, n] = max(audio_data);
    audio_data(n-200: n+200) = 0.0001 * audio_data(n-200: n+200); % 衰减第二个高音频段
    
    % 听一下处理后的音频
    % soundsc(audio_data, fs);
    
    % 输出音频文件
    audiowrite('SunshineSquare_Processed.wav',audio_data,fs); 
    

    使用滤波法2的最终输出信号的分析如下:

    image-20211128150059309

    展开全文
  • 基于matlab的音频识别和音频处理,可以录制60秒以下音频转成文字,或者将某一音频文件转换成文字,利用百度云作为转换的平台,使用时更改密匙和账号ID即可,代码简洁方便,只需要输入Voice2Txt(*,*)或Voice2Txt(*)就...
  • 基于MATLAB音频信号处理.pdf
  • 76 音频处理工具箱 77 nurbs工具箱 78 Nurbs-surface工具箱 79 grabit数据提取工具箱 80 量子信息工具箱QLib 81 DYNAMO工具箱 82 NEDC循环的整车油耗量 83 PlotHub工具箱 84 MvCAT_Ver02.01 85 Regularization Tools...
  • 可实现音频加速变慢、男女声变换等音频处理操作,还可以分析音频的频谱
  • 是一个非常好的数字处理教程,可以从中学到如利用matlab产生各种音频。内含源程序 是一个非常好的数字处理教程,可以从中学到如利用matlab产生各种音频。内含源程序
  • 基于MATLABGUI的音频处理系统 基于MATLABGUI的音频处理系统 基于MATLABGUI的音频处理系统 基于MATLABGUI的音频处理系统 基于MATLABGUI的音频处理系统 基于MATLABGUI的音频处理系统 基于MATLABGUI的音频处理系统 基于...
  • 音频处理.zip

    2019-05-30 16:58:09
    MATLAB数字信号处理音频 绘制频谱图 变声 变频 代码实现
  • 音频处理平台的设计基于 matlab 2019a 版本,可能会有部分代码与其他版本不兼容,请酌情尝试。 平台实现功能: 1. 音频播放和停止播放功能; 2. 音频降噪功能; 3. 音频拼接功能; 4. 音频调频,加减音量,切换声道...
  • matlab音频信号处理GUI

    2021-04-19 22:24:23
    使用谱减法和维纳滤波对音频信号进行处理,有GUI界面
  • matlab处理音频文件

    千次阅读 2021-04-18 09:43:32
    用Audio Precision 2722来检测音频系统的频响曲线,其中有一种方法是利用被检测设备中声音文件发出的频率作为扫频信号源,检测系统的实际频响效果。其中对这个扫频信号是有较为严格的要求。具体要求(参考外部扫描...

    用Audio Precision 2722来检测音频系统的频响曲线,其中有一种方法是利用被检测设备中声音文件发出的频率作为扫频信号源,检测系统的实际频响效果。其中对这个扫频信号是有较为严格的要求。具体要求(参考外部扫描规则设置External Sweep Rules)如下:

    1. 在扫描的源1中,选择模拟信号分析仪的读数值A通道的频率作为信号源。 起始频率为20Hz,终止频率为22kHz,中间频率采用是对数方式增长。但是这些具体的频率是多少呢,需要通过外部规则来设定。因此,需要打开"External Rules..."按钮,做详细设定。

    accbcf4cf13fb27aa1b63bfe811608f3.png

    在 External Sweep Setting窗口,包括起始条件(Start),中间读数(Data)和终止条件(End)三个部分。分别包括了具体设定的数值,允许的读数误差。 在以下几种情况下,才可能开始扫描(AP 2700系列产品用户手册第423页)。

    起始值设置:

    1. 信号源的输出在起始值+/-误差范围内;信号强度要超过设定的阈值;设定的读数1-6都稳定;信号源1的读数稳定超过1s。这几个条件中,所有条件均必须满足,才能开始扫描。

    2. 信号源的输出在起始值+/-误差范围或以上:信号强度要超过设定的阈值;设定的读数1-6都稳定;信号源1的读数稳定在误差范围内或超出误差范围的时间超过1s。

    3. 任意设定的读数点:源1的信号是不相关信号;信号强度要超过设定的阈值;设定的读数1-6都稳定。在此情况下收集的数据可能超出设定的起始值和终止值的范围。

    数据间隔问题:

    1. 源1的读数稳定在前一读数加数据间隔上;

    2. 要采集的信号读数必须大于或等于设定的读数阈值;

    3. 设定的读数1-6都稳定;

    4. 信号源1的读数稳定在误差范围内或超出误差范围的时间超过1s。

    读数阈值设定:此数值的设定主要是用来排除误差干扰信号。对于低于设定值的信号不做处理。

    终止条件设定:

    终止值及误差范围:当源1的测量读数在此范围时,会自动停止扫描。

    从以上信息中得知,对于用作扫描信号的信号波形,并不是连续光滑的扫频曲线,而是基本上以1秒为单位的步长阶梯,并且这些频点是以对数频率步进。如果要扫描的范围是22Hz-22000Hz,则起始范围比1000,常用对数值为3。如果划分为30个频点,每个频点步长为常用对数0.1。如果划分为120个频点,则步长为0.025。如果更进一步,划分到150个频点,则步长为0.02。每个频点的最短时间为1s。假设其为1.1s,则需要扫描165s,外加10s的1kHz标准信号,则整个扫描过程最少需要175s才能完成。

    在matlab上,可以用以下代码实现。

    %以下程序中生成正弦波并播放。

    Fs = 192000; % 采样频率

    %写10s 1kHz数据

    T = 10; % 时间长度

    n = Fs*T; % 采样点数f = 1000; % 声音频率

    nBitSize = 24; %量化精度(位深度)

    y = sin(2*pi*f*T*linspace(0,1,n+1));

    %sound(y,Fs);  %播放音频数据

    nStartFreq =20;  %起始频率

    nEndFreq=22000;  %终止频率

    nSteps=160;     %共扫描160个数据点

    nLastT=1.1;      %每个频点延时1.1秒

    nCount = Fs*nLastT;

    nStepLog = log10(nEndFreq/nStartFreq)/nSteps; %频率增加的对数步距

    for (nFreqLog =0:nSteps-1)

    fFreq = nStartFreq*10^(nFreqLog*nStepLog)            %实际扫描频点

    y1=sin(2*pi*fFreq*nLastT*linspace(0,1,nCount+1)); %生成对应频率的正弦波数据,频率为计算的频点,时间1.1s    y=[y,y1];                   %生成的数据与前面的波形数据合并end

    filename = 'd:\testfiles\Sweep_192K_24bit.wav';

    audiowrite(filename, y, Fs, 'BitsPerSample',nBitSize,'Comment','Sweep_192K_24bit'); %保存声音文件。

    info = audioinfo(filename);

    info               %显示音频文件的主要信息

    msgbox('程序运行结束。');

    程序运行后的显示结果如下(matlab 8.01 64位版本,运行时间7s):

    info =

    Filename: 'D:\TestFiles\Sweep_192K_24bit.wav'

    CompressionMethod: 'Uncompressed'

    NumChannels: 1                           

    SampleRate: 192000

    TotalSamples: 35712161

    Duration: 186.0008                    

    Title: []

    Comment: 'Sweep_192K_24bit'  

    Artist: []

    BitsPerSample: 24

    使用matlab的最大好处在于读取和保存声音文件非常方便。目前使用audioread, audiowrite 和 audioinfo函数替代了早期的wavread和wavwrite等函数,把支持的音频文件的格式扩展到 WAV, OGG, FLAC,M4A,ALC等格式,全面支持24bit,32位,64位量化,以及各种采样率的归一化数据,为音频文件的处理提供了极大的灵活性。

    使用 Audition 对该文件的频谱做分析如下:

    c295414961641145634eb296e5d6c2b6.png

    整体频谱范围在20-22kHz,前面一段10s 1KHz。

    1c8d62988481da212d52cecc51dfe379.png

    局部放大后,可以看到每个频段的持续时间1S。在两个不同频点的连接处,可以看出频谱很广。

    7787e6a9e52f6413a19ef90a96f231ed.png

    对波形数据做局部放大,可以看出,因为波形数据不连续,导致其频谱非常负载。

    通过 matlab的强大运算能力,可以对音频数据的质量做分析。以下的程序段用于将音频数据文件读到系统中,然后进行FFT,获取信号的频谱。

    %用fft方法分析 Wave波形文件的频谱

    %y 为音频数据的存储数组,Fs为音频数据的采样率

    %Pyy 用于保存音频的归一化幅度,Pyy_DB是转换为dBV以后的数值。

    %info用来获取音频文件的详细信息,nBitSize是音频文件的采样率。

    %nNormal 用于做归一化使用的常数,等于2^nBitSize。

    %sigLength是音频文件的总采样个数,halfLength是总采样数的一半值。

    %f是用于显示频率时的具体频点值。

    %##########################################################clear;          %清理当前内存变量clc;          %清理命令窗口filename='D:\testfiles\1kHz_Sine_192kHz_24bit_2ch.wav';

    [y,Fs]=audioread(filename);%读数据文件info = audioinfo(filename); %获取音乐文件信息nBitSize = info.BitsPerSample;%获取文件中采样深度

    nNormal = 2^nBitSize;       %做幅度归一化时的最大值

    y=y(:,1);                  %仅使用双声道数据中的第一列(左声道数据)sigLength = length(y);      %获取数组长度

    %Y1 = y.*hanning(sigLength); %使用Hanning窗变换?操作失败,暂时去掉。

    %完成FFT及获取幅度值,以及幅度值的对数表示法(dBV)Y=fft(y,sigLength);         %做标准FFT变换Pyy = abs(Y)*2/sigLength/nNormal;  %求取变换结果的幅值部分,并做归一化处理Pyy_DB = 10*log10(Pyy);             %取常用对数,变成dBV单位。

    %以下处理画图部分

    halflength = floor(sigLength/2);    %仅使用半长度做显示

    f=Fs*(0:halflength)/sigLength;      %生成索要用的频点

    semilogx(f,Pyy_DB(1:halflength+1));      %画x轴对数曲线

    title('1K-192kHz-24bit-2CH正弦波频谱'); %标题

    xlabel('频率(Hz)');                  %x轴标记

    ylabel('dBV');

    grid on;                        %打开网格

    msgbox('Done');                 %提示结束

    实际运行的结果如下:

    直接用Audition 生成的192KHz,24bit采样的正弦波,其频谱如下:

    2dd235fad8d1679ab10860f00faa1799.png

    对比 44.1kHz采样率,16bit的1KHz Sine的MP3 频谱如下,可以看出增加了很多高次谐波分量。

    86e6c3a8be369f8ead74b8bf5a14be1e.png

    直接用Audition 生成的44.1kHz 16bit, 1KHz Sine 的频谱,相对来说高频分量较MP3好很多。

    567354e05fa2f30fa594a57d74e66f8a.png

    目前这个算法还有一点问题,就是计算出来的幅度值严重偏离正常的设定值,还需要做进一步的修订。

    展开全文
  • 包含以下文件:readwav - 读取WAV文件 writewav - 写WAV文件 readhtk - 读 HTK waveform文件 writehtk - 写 HTK waveform 文件 readsfs - 读 SFS文件 readsph - 读 SPHERE/TIMIT waveform 文件 ...
  • 基于matlab音频信号处理系统.doc 目录第一章基于MATLAB的信号处理系统概述1第二章音频信号处理系统的各单元设计1第一节信号的采集与MATLAB读取1第二节FIR滤波器的设计2第三节滤波后信号4第四节将处理过的信号保存...
  • 音频信号处理的一些常用matlab代码,大约25个(包含help文件),对初学者有一定帮助
  • MATLAB处理音频信号

    2019-04-12 21:51:49
    处理一段MP3音频信号,加高斯白噪声,高频噪声,然后滤除,可以播放比较性能
  • matlab音频信号处理

    千次阅读 2019-11-13 23:44:40
    通过matlab我们可以直接读入一个音频文件,同时直接绘图 但是此时的横坐标和纵坐标是什么呢? >> [y,fs] = audioread('5num.wav'); >> plot(y) 不断放大信号: 得到了这样一幅图 image 这时候纵...
  • 使用matlab进行音频处理

    千次阅读 2019-11-14 11:32:37
    [data1,fs]=audioread('airplane.mp3'); t=(1:length(data1))/fs; figure(1); plot(t,data1); xlabel('时间'); ylabel('幅度');...1.采样率为每秒内的采样点数,所以采样时间=采样点数/采样频率 ......

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,083
精华内容 2,833
关键字:

matlab音频处理

matlab 订阅