目录
【实验目的】
【实验原理】
【实验设备】
【实验内容】
1、用MATLAB 读入一段声音信号,观察其幅频特征和相频特征,并分别设计实现。
(1)对声音信号时域压缩,观察其幅频特性的变换;
(2)对声音信号时域开展,观察其幅频特性的变换。
2、用MATLAB 读入一幅图像,观察其幅频特征和相频特征,并分别设计实现。
(1)仅由图像频谱的幅度谱恢复图像;
(2)仅由图像频谱的相位谱恢复图像;
【实验感悟】
【实验目的】
学习运用MATLAB读入并分析音频信号。
【实验原理】
音频信号是一种连续变化的模拟信号,计算机只能处理和记录二进制的数字信号,由自然音源而得到的音频信号必须经过采样、量化和编码,变成二进制数据后才能送到计算机进行再编辑和存储。
【实验设备】
(1)计算机
(2)MATLAB软件
【实验内容】
1、用MATLAB 读入一段声音信号,观察其幅频特征和相频特征,并分别设计实现。
代码语言:javascript复制clc;clear all;close all;
[x,fs]=audioread('E:test.mp3');%用函数打开文件,获取声音信号的x采样数据fs为采样频率
x=x(:,1);%由于x是双声道,所以取它的左声道
n=length(x);%获取x的采样点数
dt=1/fs;%求采样间隔
time=(0:n-1)*dt;%采样时间点
sound(x,fs);
figure(1)
plot(time,x);grid on
title('声音信号时域波形')
xlabel('时间');
axis([0,max(time),min(x),max(x)]);
X=fft(x,fs);%对采样信号做傅里叶分析X是傅里叶变换
n=length(X);%频域采样点
df=fs/n;%频域采样间隔
f=(0:1:n-1)*df;df=fs/n;%频域采样间隔f=(0:1:n-1)*df;%频域采样点
absX=abs(X); angX=angle(X);
figure(2)
subplot(211)
plot(f,absX);grid on
title('声音信号幅度谱');
xlabel('频率');ylabel('幅度');
axis([0,4000,0,max(absX)]);
subplot(212);
plot(f,angX);grid on
title('声音信号相位谱');
xlabel('频率');ylabel('相位');
axis([0,4000,min(angX),max(angX)]);
a=diff(x);
n=length(a);%获取的x的采样点数
dt=1/fs;%求采样间隔
time=(0:n-1)*dt;%采样时间点
sound(a,fs);
figure(3)
plot(time,a);grid on
title('信号微分后的波形');
A=fft(a,fs);%对采样信号做傅里叶分析,A是傅里叶变换
n=length(X);%获取x的点数
df=fs/n;%频域采样间隔
f=(0:1:n-1)*df;%频域采样点
absA=abs(A);angA=angle(A);%求幅度求相位
figure(4)
subplot(211);
plot(f,absA);grid on
title('声音信号微分后的幅度谱');
xlabel('频率');ylabel('幅度');
axis([0,max(f)/2,0,max(absA)]);
subplot(212);
plot(f,angA);grid on
title('声音信号微分后的相位谱');
xlabel('频率');ylabel('相位');
axis([0,max(f)/2,min(angA),max(angA)]);
运行结果如下:
(1)对声音信号时域压缩,观察其幅频特性的变换;
代码语言:javascript复制clc;clear all;close all;
[x,fs]=audioread('E:test.mp3'); %用函数打开文件,获取声音信号的x采样数据fs为采样频率
x=x(:,1);%由于x是双声道,所以取它的左声道
n=length(x);%获取x的采样点数
fs=fs*4;%将图像压缩的倍数为4
dt=1/fs;%求采样间隔
time=(0:n-1)*dt;%采样时间点
sound(x,fs);
figure(1)
plot(time,x);grid on%绘制图像一
title('时域压缩后声音信号时域波形')
xlabel('时间');
axis([0,max(time),min(x),max(x)]);
X=fft(x,fs);%对采样信号做傅里叶分析,X是傅里叶变换
n=length(X);%获取x的点数
df=fs/n;%频域采样间隔
f=(0:1:n-1)*df;%频域采样点
absX=abs(X); angX=angle(X);%求幅度和相位
figure(2)
subplot(211)%绘制图像二
plot(f,absX);grid on
title('时域压缩后声音信号幅度谱');
xlabel('频率');ylabel('幅度');
axis([0, 3000,0,max(absX)]);
subplot(212);
plot(f,angX);grid on
title('时域压缩后声音信号相位谱');
xlabel('频率');ylabel('相位');
axis([0, 3000,min(angX),max(angX)]);
(2)对声音信号时域开展,观察其幅频特性的变换。
代码语言:javascript复制clc;clear all;close all;
[x,fs]=audioread('E:test.mp3'); %用函数打开文件,获取声音信号的x采样数据fs为采样频率
x=x(:,1);%由于x是双声道,所以取它的左声道
n=length(x);%获取x的采样点数
fs=fs/6;%将图像展开的倍数为6
dt=1/fs;%求采样间隔
time=(0:n-1)*dt;%采样时间点
sound(x,fs);
figure(1)
plot(time,x);grid on%绘制图像一
title('时域展开后声音信号时域波形')
xlabel('时间');
axis([0,max(time),min(x),max(x)]);
X=fft(x,fs);%对采样信号做傅里叶分析,X是傅里叶变换
n=length(X);%获取x的点数
df=fs/n;%频域采样间隔
f=(0:1:n-1)*df;%频域采样点
absX=abs(X); angX=angle(X);%求幅度和相位
figure(2)
subplot(211)%绘制图像二
plot(f,absX);grid on
title('时域展开后声音信号幅度谱');
xlabel('频率');ylabel('幅度');
axis([0,3500,0,max(absX)]);
subplot(212);
plot(f,angX);grid on
title('时域展开后声音信号相位谱');
xlabel('频率');ylabel('相位');
axis([0,3500,min(angX),max(angX)]);
2、用MATLAB 读入一幅图像,观察其幅频特征和相频特征,并分别设计实现。
代码语言:javascript复制clear all
Picture = imread('Einstein.jpeg');
Picture_Gray = rgb2gray(Picture);%灰度处理
Picture_FFT = fft2(Picture_Gray);%傅里叶变换
Picture_FFT_Shift = fftshift(Picture_FFT);%对频谱进行移动,是0频率点在中心
Picture_AM_Spectrum = log(abs(Picture_FFT_Shift));%获得傅里叶变换的幅度谱
Picture_Phase_Specture = log(angle(Picture_FFT_Shift)*180/pi);%获得傅里叶变换的相位谱
Picture_Restructure = ifft2(abs(Picture_FFT).*exp(1j*(angle(Picture_FFT))));%双谱重构
figure(1)
subplot(221)
imshow(Picture_Gray)
title('原图像')
subplot(222)
imshow(Picture_AM_Spectrum,[])%显示图像的幅度谱,参数'[]'是为了将其值线性拉伸
title('图像幅度谱')
subplot(223)
imshow(Picture_Phase_Specture,[]);%显示图像的相位谱
title('图像相位谱')
subplot(224)
imshow(Picture_Restructure,[]);%显示图像的双谱重构图
title('双谱重构图')
(1)仅由图像频谱的幅度谱恢复图像;
代码语言:javascript复制clear all
Picture = imread('Einstein.jpeg');
Picture_Gray = rgb2gray(Picture);%灰度处理
Picture_FFT = fft2(Picture_Gray);%傅里叶变换
Picture_FFT_Shift = fftshift(Picture_FFT);%对频谱进行移动,是0频率点在中心
Picture_AM_Spectrum = log(abs(Picture_FFT_Shift));%获得傅里叶变换的幅度谱
Picture_Phase_Specture = log(angle(Picture_FFT_Shift)*180/pi);%获得傅里叶变换的相位谱
Picture_Restructure = ifft2(abs(Picture_FFT));%幅度谱重构
figure(1)
subplot(221)
imshow(Picture_Gray)
title('原图像')
subplot(222)
imshow(Picture_AM_Spectrum,[])%显示图像的幅度谱,参数'[]'是为了将其值线性拉伸
title('图像幅度谱')
subplot(223)
imshow(Picture_Phase_Specture,[]);%显示图像的相位谱
title('图像相位谱')
subplot(224)
imshow(Picture_Restructure,[]);%显示图像的幅度谱重构图
title('幅度谱重构图')
(2)仅由图像频谱的相位谱恢复图像;
代码语言:javascript复制clear all
Picture = imread('Einstein.jpeg');
Picture_Gray = rgb2gray(Picture);%灰度处理
Picture_FFT = fft2(Picture_Gray);%傅里叶变换
Picture_FFT_Shift = fftshift(Picture_FFT);%对频谱进行移动,是0频率点在中心
Picture_AM_Spectrum = log(abs(Picture_FFT_Shift));%获得傅里叶变换的幅度谱
Picture_Phase_Specture = log(angle(Picture_FFT_Shift)*180/pi);%获得傅里叶变换的相位谱
Picture_Restructure = ifft2(exp(j*(angle(Picture_FFT))));%相位谱重构
figure(1)
subplot(221)
imshow(Picture_Gray)
title('原图像')
subplot(222)
imshow(Picture_AM_Spectrum,[])%显示图像的幅度谱,参数'[]'是为了将其值线性拉伸
title('图像幅度谱')
subplot(223)
imshow(Picture_Phase_Specture,[]);%显示图像的相位谱
title('图像相位谱')
subplot(224)
imshow(Picture_Restructure,[]);%显示图像的相位谱重构图
title('相位谱重构图')
【实验感悟】
在做对声音信号时域压缩,观察其幅频特性的变换的实验时,matlab产生报错Error: Unanticipated host error,通过查阅百度谷歌等帖子,最后在matlab官方英文社区(how to fix port audio error : unanticipated host error - (mathworks.cn))找到了相应的问题解决方法,这让我感受到了做好实验必须要有扎实的英文基础的意义所在。
其次,通过此次实验我对声音信号的幅频和相频信号有了更加形象的认识,也对信号时域的压缩和扩展有了实验层面的操作,包括时域和频域上取采样间隔,采样点等等,同时对图像的幅频和相频分析也让我对于图像的相位谱和幅度谱有了更深层次的认识与理解。此外,通过此次实验,我也掌握了imshow,rgb2gray,fftshift等函数的用法,为将来的数字图像处理课程打下基础,还有关于音频的读取方式[y,FS]=audioread(filename)的理解:filename就是指要读取的文件的名称,其中y是读出数据,Fs为音频文件的采样率,以及图像的读取方式imread等等。
受于文本原因,本文相关实验资源与样例无法展示出来,现已将资源上传,可自行下载,也可在评论区留言邮箱。
信号与系统实验八样例文件及宏定义函数-图像处理文档类资源-CSDN下载本资源为信号与系统实验八样例文件及宏定义函数,借助该文件可以较好地复现实验。更多下载资源、学习资料请访问CSDN下载频道.