精华内容
下载资源
问答
  • 对现有的音频文件进行傅里叶分析,多个程序,MATLAB编程
  • 在我使用神经网络进行音频信号分析时,我没有在TensorFlow中找到可以处理音频的函数,这给我的项目进度带来了一些困难,所以我决定自己用TensorFlow来写一个音频信号短时傅里叶变换的脚本。在带有音频输入的...

    6249f47c9f1934142817a59d1c5ead33.png

    在我使用神经网络进行音频信号分析时,我没有在TensorFlow中找到可以处理音频的函数,这给我的项目进度带来了一些困难,所以我决定自己用TensorFlow来写一个音频信号短时傅里叶变换的脚本。

    在带有音频输入的TensorFlow中使用人工神经网络进行实验的常用流程是首先对音频进行预处理,然后将其提供给神经网络。TensorFlow附带了快速傅立叶变换的实现,但还不够。在这篇文章中,我将解释我们如何实现它并提供代码,以便可以在计算中的更加方便的使用短时傅里叶变换。

    音频预处理

    在使用深度神经网络开发语音识别引擎时,我们需要将音频提供给神经网络,表示声音有两种常用方法:

    时域:每个样本代表气压的变化。

    频域:在每个时间戳我们指示每个频率的幅度。

    尽管Deep Neural Networks非常擅长自动学习特征,但依靠已知特征来提供我们正在尝试解决的任务所需的信息始终是一个好主意。对于大多数应用,包括语音识别引擎,仍需要对声音的频域进行特征编码提供特征包含的信息量。

    频谱图和短时傅里叶变换

    频谱图是通过对信号的时域计算来显示信号的频率内容如何随时间变化。此操作称为短时傅立叶变换。我可以让神经网络弄清楚如何学习这个操作,但是用1个隐藏层来学习是非常困难的。我可以添加更多层,但我希望保持神经网络的复杂性尽可能小,并且只在最需要的地方学习特征。我使用了开发自动语音识别的例子使用频谱图作为深度神经网络的输入对于涉及非语音音频的类似任务也很常见,如降噪,音乐类型分类,鲸鱼呼叫检测等。

    为何选择TensorFlow?

    我在实现人工神经网络时主要使用TensorFlow,因为我没有在TF中找到短时傅里叶变换的实现,所以我决定实现自己的。

    为了理解如何计算STFT,您需要了解如何计算离散傅立叶变换。离散傅里叶变换 - DFT对于那些不熟悉这些概念的人来说,这部分看起来非常技术性,但我认为重要的是要通过一些数学来完整地理解代码。

    理论:傅立叶分析基本上是一种将函数表示为周期分量之和,以及从这些分量中恢复函数的方法。当函数及其傅里叶变换都被离散化的对应物替换时,它被称为离散傅里叶变换(DFT)。

    给定n个输入幅度的向量x,例如:{x [0],x [1],x [2],x [3],...,x [N-1]}离散傅立叶变换产生一组n个频率幅度。

    DFT由以下等式定义:

    1a834a117d862b95e72d093c7e71cacd.png

    其中:k用于表示频域序数

    n用于表示时域序数

    N是要转换的序列的长度

    快速傅立叶变换

    快速傅立叶变换是一种有效的实现DFT公式。信号必须限制为2的幂。这解释了为什么N(输入到DFT功能的信号的大小)必须是2的幂,以及为什么它必须为零填充。人们可以在python中非常简单地检测x是否是2的幂。

    正弦波可以使用欧拉公式表示为复杂正弦波的总和

    87c5cbab19b6ceaf513df424352fa2a3.png

    因为DFT是线性函数,所以总的DFT是每个正弦波的DFT的总和。因此,对于频谱情况,您将获得2个DFT,一个用于正频率,一个用于负频率,这是对称的。这种对称性发生在真实信号上,可以看作是无限(或在我们的例子中是有限的)正弦波之和。

    零相位填充

    为了使用FFT,输入信号必须具有2长度的功率。如果输入信号的长度不正确,则可以在开始和结束时将零附加到信号本身。
    因为零样本最初位于输入信号的中心,所以我将填充信号分开到中间并交换这两个部分的顺序。

    短时傅里叶变换

    您现在计算DFT以评估信号的频率内容有了大致的了解。当频率内容随时间变化时,STFT用于分析信号的频率内容。
    你可以这样做:

    • 拍摄信号的片段。
    • 将这些信号从信号的其余部分中剔除,并将DFT应用于每个段。
    • 沿每个段滑动此窗口。

    您可以获得DFT系数作为时间和频率的函数。

    完整的代码在2个部分被划分:helpers.py和stft.py。

    代码可参见github

    github地址:https://github.com/dariocazzani/TensorFlow-audio-processing

    结论

    在TensorFlow中进行STFT的可能性允许机器学习从业者在计算图中的任何地方执行从时域到频域的信号转换。新工具总能带来新的想法,我们希望这篇文章将成为开发新的深度学习解决方案的新思路的源泉。

    展开全文
  • 使用Matlab 编写一段傅里叶变换代码,对你所采集的 wav 文件中的一段(1-2s)进行傅里叶变换,并显示频谱。 我使用的音频是琵琶D调Re,文件命名为test.wav。记得修改为自己的文件名哦。 代码如下: [xx,fs]=audioread...

    本博客实验环境是Matlab2018,软件版本不同可能会有些出入,需要稍作修改。

    使用Matlab 编写一段傅里叶变换代码,对你所采集的 wav 文件中的一段(1-2s)进行傅里叶变换,并显示频谱。

    我使用的音频是琵琶D调Re,文件命名为test.wav。记得修改为自己的文件名哦。
    代码如下:

    [xx,fs]=audioread('test.wav');
    x=xx(:,1);
    N=length(x);
    time=(0:N-1)/fs;
    plot(x);
    M=2048;
    nfft=8192;
    win=hanning(M);
    freq=(0:nfft/2)*fs/nfft;
    y=x(9001:9000+M);
    y=y-mean(y);
    Y=fft(y.*win,nfft);
    figure(2)
    subplot 211;plot(y);xlim([0 M]);
    title('一帧信号波形');xlabel('样点');ylabel('幅值')
    subplot 212;plot(freq,20*log10(abs(Y(1:nfft/2+1))));
    grid;axis([0 max(freq) -60 55]);
    title('频谱');xlabel('频率(Hz)');ylabel('幅值')
    
     
    

    运行结果如下所示:

    在这里插入图片描述

    展开全文
  • 然后对音频进行快速傅里叶变换fft(y,N),N取32768,画出信号的频谱特性,加深对频谱特性的理解。(3)根据频谱,反演时域特性,画出时域波形。寻找幅值最大的两个频率,此频率除以fft点数在乘以采样频率就是信号的...
  • 短时傅里叶变换 -> 时频联合分析 双音多频DTMF 对于一个声音,如果能够检测出其中高频和低频的频率,就可以指出对应的按键编码。 现在可以通过专用的数字处理芯片直接获得双音频解码...

    短时傅里叶变换 -> 时频联合分析


    一、双音多频DTMF知识储备

    在这里插入图片描述

    对于一个声音,如果能够检测出其中高频和低频的频率,就可以指出对应的按键编码。

    现在可以通过专用的数字处理芯片直接获得双音频解码,也可以通过计算软件进行解码,后者就是这篇博文将要演示的。


    二、简单的时频联合分析

    最简单的时频联合分析,可通过录制5s的声音,然后可直观看到时域某个时刻对应的频率。

    clc;
    clear;
    
    recObj = audiorecorder;
    recordblocking(recObj, 5);%录音5s
    disp('Press any key to continue playing.');
    pause;
    play(recObj);
    disp('Press any key to continue plot.');
    pause;
    myRecording = getaudiodata(recObj);plot(myRecording);
    disp('Press any key to continue fouier.');
    pause;
    spectrogram(myRecording,2048,1024,1:2000,8000,'yaxis');
    

    在这里插入图片描述

    二、图片在时频联合分析中的显示

    一个做好的图片声音,进行时频联合分析…

    clc;
    clear;
    
    [s fs] = audioread('G:\getvoice.mp3');
    % spectrogram(s(:,1), 2048, 1024, 1:2000, fs, 'yaxis');
    spectrogram(s(:,1), 8192, 4096, 1:2000, fs, 'xaxis');
    % plot((0:length(s)-1)/fs, s);
    

    在这里插入图片描述

    挺有意思一个东西,不是吗。。

    三、制作在时频联合分析中显示的图片的音乐(图片变成音乐)

    图片转音乐的matlab程序,暂时还没有写出来,只能辅助软件了。<链接> 提取码:4g6y

    注意,
    对应的图片分辨率最好设置为
    在这里插入图片描述

    以及要转为256色位图(.bmp格式)
    在这里插入图片描述

    在这里插入图片描述

    clc;
    clear;
    
    [s,fs] = audioread('3.wav');
    h1 = figure;
    spectrogram(s(:,1), 8192, 4096, 1:15000, fs, 'yaxis');
    saveas(h1,'12','jpg');
    I = imread('12.jpg');
    J = imadjust(I,[0.3 0.7],[]);
    imshow(J);
    

    最终图片效果…
    在这里插入图片描述

    展开全文
  • 对一段音频信号进行短时傅里叶变换(或小波变换matlab源码),处理得到含频率和时间成分的语谱图(matlab+python源码)
  • 离散傅里叶,离散余弦和离散小波变换是图像、音频信号常用的基 础操作,时域信号转化到不同变换域以后,... 至于什么是傅里叶变换、有什么作用,虽然学过但是上课划水,不是很了解。看了几篇博客找到一篇讲解生动的...

    离散傅里叶,离散余弦和离散小波变换是图像、音频信号常用的基础操作,时域信号转化到不同变换域以后,会导致不同程度的能量集中,信息隐藏利用这个原理在变换域选择适当位置系数进行 改、嵌入信息,并确保图像、音频信号经处理后感官质量无明显变化。

    至于什么是傅里叶变换、有什么作用,虽然学过但是上课划水,不是很了解。看了几篇博客找到一篇讲解生动的,读后感觉了解了许多:
    简单了解傅里叶变换

    音频

    %声音信号的傅氏变换
    % [x,fs]=audioread('tada.wav'); 
    % fx=fft(x);
    % plot(abs(fftshift(fx)));
    % xlabel('Time');
    % ylabel('Amplitude');
    % title('The Wave form of signal');
    % grid on; 
    %小波变换
    % [a,fs]=audioread('tada.wav'); 
    % [ca1,cd1]=dwt(a(:,1),'db4');%近似,细节
    % a0=idwt(ca1,cd1,'db4',length(a(:,1)));
    % subplot(4,1,1);plot(a(:,1));
    % subplot(4,1,2);plot(cd1);
    % subplot(4,1,3);plot(ca1);
    % subplot(4,1,4);plot(a0);
    %语音信号小波变换三级分解
    % [a,fs]=audioread('tada.wav'); 
    % [c,l]=wavedec(a(:,2),3,'db4');
    % ca3=appcoef(c,l,'db4',3);%提取第3层的近似系数
    % cd3=detcoef(c,l,3);%提取第3层的细节系数
    % cd2=detcoef(c,l,2);
    % cd1=detcoef(c,l,1);
    % a0=waverec(c,l,'db4');
    % 
    % subplot(6,1,1);plot(a(:,2));
    % subplot(6,1,2);plot(cd1);
    % subplot(6,1,3);plot(cd2);
    % subplot(6,1,4);plot(cd3);
    % subplot(6,1,5);plot(ca3);
    % subplot(6,1,6);plot(a0);
    % 离散余弦变换
    % len=40000;
    % [fn,pn]=uigetfile('* .wav','请选择音频文件')
    % [x,fs]=wavread(strcat(pn,fn),len);
    % xsync=idct(xf);
    % [row,col]=size(x);
    % xff=zeros(row,col);
    % xff(1:row,1:col)=xf(1:row,1:col);
    % y=idct(xff);
    clear;
    [x,fs]=audioread('tada.wav');
    len=40000;
    f1=[0:len-1]*fs/len;
    xf=dct(x);
    figure;
    subplot(2,1,1);plot(x);title('original audio');
    subplot(2,1,2);plot(abs(xf));title('DCT');
    
    
    
    

    图像

    % b=imread('lena.jpg');     % 读入图像,像素值在b中
    % b=rgb2gray(b);    % 转换为灰度图像
    % figure(1);
    % I=im2bw(b);
    % imshow(b);
    % title('(a)原图像');
    % figure(2);
    % fa=fft2(I);        % 使用fft函数进行快速傅立叶变换
    % ffa=fftshift(fa);    % fftshift函数调整fft函数的输出顺序,将零频位置移到频谱的中心 
    % imshow(ffa,[200,225]);
    % title('(b)幅度谱');
    % figure(3);
    % image(abs(ffa));
    % l=mesh(abs(ffa));   % 画网格曲面图
    % title('(c)幅度谱的能量分布');
    % lena图像的一级小波变换
    % b=imread('lena.jpg');
    % a=im2bw(b);
    % nbcol=size(a,1);
    % [ca1,ch1,cv1,cd1]=dwt2(a,'db4');
    % cod_ca1=wcodemat(ca1,nbcol);
    % cod_ch1=wcodemat(ch1,nbcol);
    % cod_cv1=wcodemat(cv1,nbcol);
    % cod_cd1=wcodemat(cd1,nbcol);
    % image([cod_ca1,cod_ch1;cod_cv1,cod_cd1]);
    %图像的二级小波变换
    b=imread('lena.jpg');
    a=im2bw(b);
    nbcol=512;
    nbc=256;
    [ca1,ch1,cv1,cd1]=dwt2(a,'db4');
    [ca2,ch2,cv2,cd2]=dwt2(ca1,'db4');
    cod_ca1=wcodemat(ca1,nbc);
    cod_ch1=wcodemat(ch1,nbc);
    cod_cv1=wcodemat(cv1,nbc);
    cod_cd1=wcodemat(cd1,nbc);
    cod_ca2=wcodemat(ca2,nbcol);
    cod_ch2=wcodemat(ch2,nbcol);
    cod_cv2=wcodemat(cv2,nbcol);
    cod_cd2=wcodemat(cd2,nbcol);
    tt=[cod_ca2,cod_ch2;cod_cv2,cod_cd2];
    tt=imresize(tt,[131,131]); %这里要根据cod_ca2更改
    image([tt,cod_ch1;cod_cv1,cod_cd1]);
    %离散余弦变换
    % b=imread('lena.jpg');% 读入图像,像素值在b中
    % b=rgb2gray(b);    % 转换为灰度图像
    % figure(1);
    % imshow(b);
    % title('(a)原图像');
    % 
    % I=im2bw(b);
    % figure(2);
    % c=dct2(I);   % 进行离散余弦变换
    % imshow(c);
    % title('(b)DCT变换系数');
    % 
    % figure(3);
    % mesh(c);     % 画网格曲面图
    % title('(c)DCT变换系数(立体视图)');
    
    %读bmp
    % clear all;
    % [A,M]=imread('d:\matlabcode\lena.bmp','bmp');
    % figure
    % imshow(A);
    % [x,y]=size(A);% x = 512   y = 1536
    % class(A); % ans = uint8
    % gray=rgb2gray(A);
    % size(gray);% ans =   512   512
    % imshow(gray);
    % bw=im2bw(gray);
    % imshow(bw);
    % imwrite(bw,'b.bmp');
    
    
    展开全文
  • MATLAB绘制音频波形及频谱

    千次阅读 2020-12-10 18:22:16
    %对信号进行傅里叶变换 f = Fs/N*(0:round(N/2)-1);%显示实际频点的一半 subplot(211); plot(t,x,'g');%绘制时域波形 xlabel('Time / (s)');ylabel('Amplitude'); title('信号的波形'); grid; s
  • 使用数字滤波器处理音频噪声(附Matlab程序)

    千次阅读 热门讨论 2020-07-18 14:52:41
    使用Matlab软件中的“audioread”函数进行音频的读取,定义读取的音频文件为“signal”并使用“fft”函数把读取的音频进行傅里叶变换,经过傅氏变换之后的音频定义为“signal1”,使用Matlab中的画图工具进行绘图,...
  • 音频录制及保存;将音频进行傅里叶变换;
  • Matlab语音频谱分析,滤波

    千次阅读 2020-06-02 17:30:17
    课程设计写了利用MATLAB进行语音采集的分析的小程序,供大家参考。 :) 注意:音频文件要和Matlab工程文件放在一起。 第一段程序:读取录制的一段音频...%对语音进行傅里叶变换 subplot(2,1,1); plot(yy,'b');%..
  • Matlab信号处理基础

    2019-10-01 21:39:28
    一. 简介  离散傅立叶、离散余弦和离散小波变换是图像、音频信号常用基础操作,时域信号转换到不同变换域以后,会导致不同...一维离散傅里叶变换: 一维离散傅里叶逆变换: 一维离散余弦变换对定义 一维离...
  • 原理简介 离散傅立叶、离散余弦和离散小波变换是图像、音频信号常用基础操作,时 域信号转换到不同变换域...用离散傅里叶变换分析合成音频文件 1、读取音频文件数据 新建一个 m 文件,另存为 a1.m,输入以下命令: clc;
  • 利用MATLAB绘制信号时域波形和信号的频谱

    万次阅读 多人点赞 2015-06-24 10:45:03
    [x,Fs] = wavread('test1');%读取音频数据 x = x(:,1); x = x'; N = length(x);...%对信号进行傅里叶变换 f = Fs/N*(0:round(N/2)-1);%显示实际频点的一半 subplot(211); plot(t,x,'g');%绘制时域
  • 首先一个就是工具的选择,首选就是matlab,优点明显就是有很多可以即用的函数工具,比如很重要的傅里叶变换的函数fft(). 然后就是选一个合适的参数进行验证,音频数据的错误基本都可以在频率错误上得到反应...
  • 语音合成目前比较流行的方案是Tacotron(2) + WaveNet(WaveRNN, LPCNet)等神经网络声码器。这些方案的流程大致相同,先...下图是Matlab计算倒谱的过程可以分成以下几步:音频时域信号分帧对每一帧进行傅里叶变换,并...
  • 语音合成目前比较流行的方案是Tacotron(2) + WaveNet(WaveRNN, LPCNet)等神经网络声码器。这些方案的流程大致相同,先...下图是Matlab计算倒谱的过程可以分成以下几步:音频时域信号分帧对每一帧进行傅里叶变换,并...
  • 首先,用wavread采集wav音频文件,在本设计中我们自己用电脑录入音频“河北科技师范学院”,导入到MATLAB平台上,对此语音信号用fft函数进行傅里叶变换从而得到频谱图。接下来,用随机信号当做噪声信号与原语音信号...
  • fft是傅里叶变换的函数吗?为什么在y1=fft()之后还要 y2=fftshift(y1);对频谱图进行平移? ; margin-right:0cm">fs =22050; ; margin-right:0cm">Nbits =16;  ; margin-right:0cm">...

空空如也

空空如也

1 2
收藏数 21
精华内容 8
关键字:

matlab音频进行傅里叶变换

matlab 订阅