草庐IT

matlab信号处理基础(音频和图像)

国际知名观众 2023-07-12 原文

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

【实验目的】
了解音频和图像数据系数特点, 掌握音频和图像文件的离散傅里叶、离散余弦和离散小波变换等基本操作。
【实验环境】
(1) Window 11 操作系统;
(2) Matlab 2020版本软件;
(3) BMP 格式图像文件;
(4) Wav 格式音频文件

一、用离散傅里叶变换分析合成音频和图像

1.分析合成音频文件

①读取音频文件数据

clc;
clear;
len=40000;
[fn,pn]=uigetfile('*.wav','请选择音频文件');
filename=strcat(pn,fn);
[x,fs]=audioread(filename,[1,len]);
 
%新版本的matlab中已经不再支持wavread()函数,替代函数为audioread(filename,N),
%其中N必须为[m,n]格式,如[2,100],且m,n均为正数
%作用:读取微软音频格式 (wav) 文件内容
%输入参数: filename表示音频文件名,字符
%返回值:音频样点,浮点型

②一维离散傅里叶变换

xf=fft(x);%fft()对输入参数进行一维离散傅里叶变换并返回其系数,对应频率从0到fs(采样频率) ,
f1=[0:len-1]*fs/len;
xff=fftshift(xf);%fftshift()将零频对应系数移至中央
h1=floor(len/2);
f2=[-h1:h1]*fs/len;%计算离散样点对应的频率值,以便更好地观察频谱

③一维离散傅里叶逆变换

xsync=ifft(xf);%ifft()对输入参数进行一维离散傅里叶逆变换并返回其系数

④观察结果

figure;%figure(n)表示建第n个图形窗。
subplot(2,2,1);plot(x);title('original audio');
subplot(2,2,2);plot(xsync);title('synthesize audio');
subplot(2,2,3);plot(f1,abs(xf));title('fft coef. of audio');
subplot(2,2,4);plot(f2(1:len),abs(xff));title('fftshift coef. of auio');

结果展示:

2.分析合成图片文件

①读取图像文件数据

[fn,pn]=uigetfile('*.bmp','请选择图像文件');
[x,map]=imread(strcat(pn,fn),'bmp');
I=rgb2gray(x);%rgb2ray()RGB图像转换为灰度图
 
%函数原型 :A=imread(filename,fmt)
%功能:读取 fmt 指定格式的图像文件内容。
%输入参数 :filename 表示图像文件名,字符串。
%fmt表示图像文件格式名,字符串、函数支持的图像格式包括:JPEG,TIFF,GIF,BMP等,
%当参数不包括文件格式名时,函数尝试推断出文件格式
%返回参数:A表示图像数据内容,整型。

②二维离散傅里叶变换

xf=fft2(I);%fft2()对输入参数进行二维离散傅里叶变换并返回其系数
xff=fftshift(xf);%fftshift()将零频对应系数移至中央

③二维离散傅里叶逆变换

xsync=ifft2(xf);%ifft()对输入参数进行二维离散傅里叶逆变换并返回其系数

④观察结果

figure;
subplot(2,2,1);imshow(x);title('original image');
subplot(2,2,2);imshow(uint8(abs(xsync)));title('synthesize image');
subplot(2,2,3);mesh(abs(xf));title('fft coef. of image');
subplot(2,2,4);mesh(abs(xff));title('fftshift coef. of image');
 
%imshow是二维数据绘图函数,mesh通过三维平面显示数据

结果展示:

二、用离散余弦变换分析合成音频和图像

1.分析合成音频文件数据:

①读取音频文件数据

clc;
clear;
len=40000;
[fn,pn]=uigetfile('*.wav','请选择音频文件');
filename=strcat(pn,fn);
[x,fs]=audioread(filename,[1,len]);

②:一维离散余弦变换

xf=dct(x);

③一维离散余弦逆变换

xsync=idct(xf);
[row,col]=size(x);
xff=zeros(row,col);
xff(1:row,1:col)=xf(1:row,1:col);
y=idct(xff);

④观察结果

figure;
 
%xf=fft(x);
f1=[0:len-1]*fs/len;
%xff=fftshift(xf);
h1=floor(len/2);
f2=[-h1:h1]*fs/len;
 
 
subplot(2,2,1);plot(x);title('original audio');
subplot(2,2,2);plot(xsync);title('synthesize audio');
subplot(2,2,3);plot(f1,abs(xf));title('fft coef. of audio');
subplot(2,2,4);plot(f2(1:len),abs(xff));title('fftshift coef. of auio');

结果展示:

2.分析合成图像文件数据:

①读取图像文件数据

[fn,pn]=uigetfile('*.bmp','请选择图像文件');
[x,map]=imread(strcat(pn,fn),'bmp');
I=rgb2gray(x);

②二维离散余弦变换

xf=dct2(I);

③二维离散余弦逆变换

xsync=uint8(idct(xf));
[row,col]=size(I);
lenr=round(row*4/5);
lenc=round(col*4/5);
xff=zeros(row,col);
xff=zeros(row,col);
xff(1:lenr,1:lenc)=xf(1:lenr,1:lenc);
y=uint8(idct2(xff));

④观察结果

figure;
subplot(2,2,1);imshow(x);title('original image');
subplot(2,2,2);imshow(uint8(abs(xsync)));title('synthesize image');
subplot(2,2,3);imshow(uint8(abs(y)));title('part synthesize image');
subplot(2,2,4);mesh(abs(xff));title('fftshift coef. of image');

结果展示:

三、用离散小波变换分析合成音频和图像

1.分析合成音频文件

①读取音频文件数据

clc;
clear;
len=40000;
[fn,pn]=uigetfile('*.wav','请选择音频文件');
filename=strcat(pn,fn);
[x,fs]=audioread(filename,[1,len]);:一维离散小波变换
x=x(:,1);%将多声道转换为单声道
[C,L]=wavedec(x,2,'db4');

③一维离散小波逆变换

xsync=waverec(C,L,'db4');
cA2=appcoef(C,L,'db4',2);
cD2=detcoef(C,L,2);
cD1=detcoef(C,L,1);

④观察结果

figure;
subplot(2,3,1);plot(x);title('original audio');
subplot(2,3,2);plot(xsync);title('synthesize audio');
subplot(2,3,4);plot(cA2);title('app coef. of audio');
subplot(2,3,5);plot(cD2);title('det coef. of auio');
subplot(2,3,6);plot(cD1);title('det coef. of auio');

结果展示:

2.分析合成图像文件

①读取图像文件数据

[fn,pn]=uigetfile('*.bmp','请选择图像文件');
[x,map]=imread(strcat(pn,fn),'bmp');
I=rgb2gray(x);

②二维离散小波变换

sx=size(I);
[cA1,cH1,cV1,cD1]=dwt2(I,'bior3.7');

③二维离散小波逆变换

xsync=uint8(idwt2(cA1,cH1,cV1,cD1,'bior3.7',sx));
A1=uint8(idwt2(cA1,[],[],[],'bior3.7',sx));
H1=uint8(idwt2([],cH1,[],[],'bior3.7',sx));
V1=uint8(idwt2([],[],cV1,[],'bior3.7',sx));
D1=uint8(idwt2([],[],[],cD1,'bior3.7',sx));

④观察结果

figure;
subplot(2,3,1);imshow(x);title('original image');
subplot(2,3,2);imshow(uint8(abs(xsync)));title('synthesize image');
subplot(2,3,3);mesh(A1);title('app coef. of image');
subplot(2,3,4);mesh(H1);title('hor coef. of image');
subplot(2,3,5);mesh(V1);title('ver coef. of image');
subplot(2,3,6);mesh(D1);title('dia coef. of image');
 

结果展示:

总结

拓展

图像傅立叶变换的物理意义

图像的频率是表征图像中灰度变化剧烈程度的指标,是灰度在平面空间上的梯度。如:大面积的沙漠在图像中是一片灰度变化缓慢的区域,对应的频率值很低;而对于地表属性变换剧烈的边缘区域在图像中是一片灰度变化剧烈的区域,对应的频率值较高。傅立叶变换在实际中有非常明显的物理意义,设f是一个能量有限的模拟信号,则其傅立叶变换就表示f的谱。从纯粹的数学意义上看,傅立叶变换是将一个函数转换为一系列周期函数来处理的。从物理效果看,傅立叶变换是将图像从空间域转换到频率域,其逆变换是将图像从频率域转换到空间域。换句话说,傅立叶变换的物理意义是将图像的灰度分布函数变换为图像的频率分布函数,傅立叶逆变换是将图像的频率分布函数变换为灰度分布函数。

傅立叶变换以前,图像(未压缩的位图)是由对在连续空间(现实空间)上的采样得到一系列点的集合,我们习惯用一个二维矩阵表示空间上各点,则图像可由z=f(x,y)来表示。由于空间是三维的,图像是二维的,因此空间中物体在另一个维度上的关系就由梯度来表示,这样我们可以通过观察图像得知物体在三维空间中的对应关系。为什么要提梯度?因为实际上对图像进行二维傅立叶变换得到频谱图,就是图像梯度的分布图,当然频谱图上的各点与图像上各点并不存在一一对应的关系,即使在不移频的情况下也是没有。傅立叶频谱图上我们看到的明暗不一的亮点,实际上图像上某一点与邻域点差异的强弱,即梯度的大小,也即该点的频率的大小(可以这么理解,图像中的低频部分指低梯度的点,高频部分相反)。一般来讲,梯度大则该点的亮度强,否则该点亮度弱。这样通过观察傅立叶变换后的频谱图,也叫功率图,我们首先就可以看出,图像的能量分布,如果频谱图中暗的点数更多,那么实际图像是比较柔和的(因为各点与邻域差异都不大,梯度相对较小),反之,如果频谱图中亮的点数多,那么实际图像一定是尖锐的,边界分明且边界两边像素差异较大的。对频谱移频到原点以后,可以看出图像的频率分布是以原点为圆心,对称分布的。将频谱移频到圆心除了可以清晰地看出图像频率分布以外,还有一个好处,它可以分离出有周期性规律的干扰信号,比如正弦干扰,一副带有正弦干扰,移频到原点的频谱图上可以看出除了中心以外还存在以某一点为中心,对称分布的亮点集合,这个集合就是干扰噪音产生的,这时可以很直观的通过在该位置放置带阻滤波器消除干扰。

音频信号处理的目的:时域–>频域,便于进一步处理。

有关matlab信号处理基础(音频和图像)的更多相关文章

  1. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  2. ruby-on-rails - 添加回形针新样式不影响旧上传的图像 - 2

    我有带有Logo图像的公司模型has_attached_file:logo我用他们的Logo创建了许多公司。现在,我需要添加新样式has_attached_file:logo,:styles=>{:small=>"30x15>",:medium=>"155x85>"}我是否应该重新上传所有旧数据以重新生成新样式?我不这么认为……或者有什么rake任务可以重新生成样式吗? 最佳答案 参见Thumbnail-Generation.如果rake任务不适合你,你应该能够在控制台中使用一个片段来调用重新处理!关于相关公司

  3. Matlab imread()读到了什么 (浅显 当复习文档了) - 2

    matlab打开matlab,用最简单的imread方法读取一个图像clcclearimg_h=imread('hua.jpg');返回一个数组(矩阵),往往是a*b*cunit8类型解释一下这个三维数组的意思,行数、数和层数,unit8:指数据类型,无符号八位整形,可理解为0~2^8的数三个层数分别代表RGB三个通道图像rgb最常用的是24-位实现方法,即RGB每个通道有256色阶(2^8)。基于这样的24-位RGB模型的色彩空间可以表现256×256×256≈1670万色当imshow传入了一个二维数组,它将以灰度方式绘制;可以把图像拆分为rgb三层,可以以灰度的方式观察它figure(1

  4. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  5. 软件测试基础 - 2

    Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功

  6. MIMO-OFDM无线通信技术及MATLAB实现(1)无线信道:传播和衰落 - 2

     MIMO技术的优缺点优点通过下面三个增益来总体概括:阵列增益。阵列增益是指由于接收机通过对接收信号的相干合并而活得的平均SNR的提高。在发射机不知道信道信息的情况下,MIMO系统可以获得的阵列增益与接收天线数成正比复用增益。在采用空间复用方案的MIMO系统中,可以获得复用增益,即信道容量成倍增加。信道容量的增加与min(Nt,Nr)成正比分集增益。在采用空间分集方案的MIMO系统中,可以获得分集增益,即可靠性性能的改善。分集增益用独立衰落支路数来描述,即分集指数。在使用了空时编码的MIMO系统中,由于接收天线或发射天线之间的间距较远,可认为它们各自的大尺度衰落是相互独立的,因此分布式MIMO

  7. ruby-on-rails - 在 Ruby (on Rails) 中使用 imgur API 获取图像 - 2

    我正在尝试使用Ruby2.0.0和Rails4.0.0提供的API从imgur中提取图像。我已尝试按照Ruby2.0.0文档中列出的各种方式构建http请求,但均无济于事。代码如下:require'net/http'require'net/https'defimgurheaders={"Authorization"=>"Client-ID"+my_client_id}path="/3/gallery/image/#{img_id}.json"uri=URI("https://api.imgur.com"+path)request,data=Net::HTTP::Get.new(path

  8. python ffmpeg 使用 pyav 转换 一组图像 到 视频 - 2

    2022/8/4更新支持加入水印水印必须包含透明图像,并且水印图像大小要等于原图像的大小pythonconvert_image_to_video.py-f30-mwatermark.pngim_dirout.mkv2022/6/21更新让命令行参数更加易用新的命令行使用方法pythonconvert_image_to_video.py-f30im_dirout.mkvFFMPEG命令行转换一组JPG图像到视频时,是将这组图像视为MJPG流。我需要转换一组PNG图像到视频,FFMPEG就不认了。pyav内置了ffmpeg库,不需要系统带有ffmpeg工具因此我使用ffmpeg的python包装p

  9. ES基础入门 - 2

    ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear

  10. ruby - 是否有将图像文件转换为 ASCII 艺术的命令行程序或库? - 2

    有这样的事吗?我想在Ruby程序中使用它。 最佳答案 试试这个http://csl.sublevel3.org/jp2a/此外,Imagemagick可能还有一些东西 关于ruby-是否有将图像文件转换为ASCII艺术的命令行程序或库?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6510445/

随机推荐