信号(语音|MATLAB信号处理——分解信号,双谱重构
编程分析幅度谱和相位谱在图像信号、语音信号中的作用。
一、图像信号
(1)原图像信号如下:
文章图片
文章图片
文章图片
代码如下:
PA0=imread('大头儿子.jpg');
PB0=imread('狗.jpg');
PC0=imread('苹果.jpg');
%灰度处理
PA=rgb2gray(PA0);
PB=rgb2gray(PB0);
PC=rgb2gray(PC0);
%调整为同一大小
[a,b]=size(PA);
PB=imresize(PB,[a,b]);
PC=imresize(PC,[a,b]);
%傅里叶变换
PAf=fft2(double(PA));
PBf=fft2(double(PB));
PCf=fft2(double(PC));
% 获取幅度谱与相位谱
PAf_AM=abs(PAf);
PBf_AM=abs(PBf);
PCf_AM=abs(PCf);
PAf_ph=angle(PAf);
PBf_ph=angle(PBf);
PCf_ph=angle(PCf);
%改变图片的幅度与相位,重组图像
F1=PAf_AM.*cos(PBf_ph)+PAf_AM.*sin(PBf_ph).*1j;
F2=PAf_AM.*cos(PCf_ph)+PAf_AM.*sin(PCf_ph).*1j;
F3=PBf_AM.*cos(PAf_ph)+PBf_AM.*sin(PAf_ph).*1j;
F4=PBf_AM.*cos(PCf_ph)+PBf_AM.*sin(PCf_ph).*1j;
F5=PCf_AM.*cos(PAf_ph)+PCf_AM.*sin(PAf_ph).*1j;
F6=PCf_AM.*cos(PBf_ph)+PCf_AM.*sin(PBf_ph).*1j;
%傅里叶逆变换
P1=abs(ifft2(F1));
P2=abs(ifft2(F2));
P3=abs(ifft2(F3));
P4=abs(ifft2(F4));
P5=abs(ifft2(F5));
P6=abs(ifft2(F6));
%显示图像
figure(1)
subplot(2,3,1);
imshow(PA0,[]);
title('A原图-大头儿子');
subplot(2,3,2);
imshow(PB0,[]);
title('B原图-狗');
subplot(2,3,3);
imshow(PC0,[]);
title('C原图-苹果');
subplot(2,3,4);
imshow(PA,[]);
title('A灰度图-大头儿子');
subplot(2,3,5);
imshow(PB,[]);
title('B灰度图-狗');
subplot(2,3,6);
imshow(PC,[]);
title('C灰度图-苹果');
figure(2)
subplot(2,3,1);
imshow(P1,[]);
title('A幅度B相位');
subplot(2,3,2);
imshow(P2,[]);
title('A幅度C相位');
subplot(2,3,3);
imshow(P3,[]);
title('B幅度A相位');
subplot(2,3,4);
imshow(P4,[]);
title('B幅度C相位');
subplot(2,3,5);
imshow(P5,[]);
title('C幅度A相位');
subplot(2,3,6);
imshow(P6,[]);
title('C幅度B相位');
结果如下:
文章图片
文章图片
【信号(语音|MATLAB信号处理——分解信号,双谱重构】 (2)原图像信号如下:
文章图片
代码如下:
clear all
P0=imread('郁金香.jpg');
PA=rgb2gray(P0);
%转换为灰度图
PAf=fft2(double(PA)/255);
[a,b]=size(PAf);
PAf_am=abs(PAf);
PAf_ph=angle(PAf);
PAf_am1=1000*ones(a,b);
%幅度变为1
PAf_ph1=ones(a,b);
%相位变为1
%重组图片
F1=PAf_am.*cos(PAf_ph1)+PAf_am.*sin(PAf_ph1).*1j;
F2=PAf_am1.*cos(PAf_ph)+PAf_am1.*sin(PAf_ph).*1j;
F3=PAf_am1.*cos(PAf_ph1)+PAf_am1.*sin(PAf_ph1).*1j;
P1=abs(ifft2(F1));
P2=abs(ifft2(F2));
P3=abs(ifft2(F3));
figure(1)
subplot(2,2,1);
imshow(P0);
title('原图');
subplot(2,2,2);
imshow(PA);
title('灰度图');
subplot(2,2,3);
imshow(uint8(PAf_am),[]);
title('幅度谱');
subplot(2,2,4);
imshow(uint8(PAf_ph),[]);
title('相位谱');
figure(2)
subplot(2,2,1);
imshow(P1,[]);
title('幅度不变,相位为1');
subplot(2,2,2);
imshow(P2,[]);
title('幅度为1,相位不变');
subplot(2,2,3);
imshow(P3,[]);
title('幅度为1,相位为1');
处理后的结果为:
文章图片
文章图片
分析:
使用Matlab读取三张不同的图像信号,对图像信号进行傅里叶变换后分别获取三张图像的幅度谱与相位谱,分别用一张图像的幅度谱与另外两张图像的相位谱重组,重构为新的图片。图像信号交换幅度谱与相位谱后,图像显示的内容为来源于相位谱的图像的轮廓。
经过交换图像信号的相位谱与幅度谱之后,反变换之后得到的图像内容与其相位谱对应的图像一致,表明相位谱决定图像结构。而图像中的整体灰度分布的特性,如明暗、灰度的变化趋势等则在比较大的程度上取决于对应的幅度谱。因为幅度谱反应了图像整体上多个方向的频率分量的相对强度。
二、语音信号
代码如下:
clear all
[x,fs]=audioread('我的录音.wav');
%sound(x,fs);
x=double(x)/3000;
N=length(x);
%傅里叶变换
Vf=fft(x,N);
[a,b]=size(Vf);
Vf_am=abs(Vf);
Vf_ph=angle(Vf);
Vf_am1=5*ones(a,b);
%幅度变为1
Vf_ph1=ones(a,b);
%相位变为1
%重组语音信号
FN1=double(Vf_am1.*exp(1j*Vf_ph));
%幅度改变
FN2=double(Vf_am.*exp(1j*Vf_ph1));
%相位改变
FN3=double(Vf_am.*exp(-1j*Vf_ph));
%相位取共轭
FN4=double(Vf_am1.*exp(1j*Vf_ph1));
%幅度相位均改变
V1=real(ifft(FN1));
V2=real(ifft(FN2)).*3000;
V3=real(ifft(FN3)).*3000;
V4=real(ifft(FN4)).*3000;
%播放改变后的语音信号
%sound(V1,fs);
%sound(V2,fs);
%sound(V3,fs);
%sound(V4,fs);
figure(1);
subplot(1,3,1);
plot(x);
xlabel('时间');
ylabel('幅度');
title('原信号波形');
subplot(1,3,2);
plot(Vf_am);
xlabel('频率');
ylabel('幅度');
title('原信号幅值谱');
subplot(1,3,3);
plot(Vf_ph);
xlabel('频率');
ylabel('相位');
title('原信号相位谱');
figure(2)
subplot(2,2,1);
plot(V1);
title('幅度为1,相位不变');
subplot(2,2,2);
plot(V2);
title('幅度不变,相位为1');
subplot(2,2,3);
plot(V2);
title('幅度不变,相位取共轭');
subplot(2,2,4);
plot(V4);
title('幅度相位均改变');
信号波形如下:
文章图片
文章图片
分析:
语音信号改变幅度谱与相位谱后,出现了下列变化:
①幅度谱值有1—5的过程中,语音信号的音量逐渐增大,清晰读逐渐增强;
②幅度谱无论为一定值,相位谱的值变为1后,听到的声音无法辨别;
③相位发转后,听到的声音无法辨别;
④幅度相位均改变后,无声音。
改变语音信号的幅度值后,语音信号的音量改变,语音信号的内容与原信号一致;改变语音信号的相位值后,语音信号的内容无法辨识,与原信号的内容差异很大。表明对于语音信号来说,幅度谱决定语音信号的音量大小,相位谱决定语音信号的内容。
推荐阅读
- hough变换检测的matlab程序
- 学会养生
- 语音朗读|语音朗读 自我点评
- matlab|嵌入均衡池的黏菌优化算法
- MATLAB智慧车库计时计费系统GUI设计
- MATLAB图形界面|基于Matlab的汽车出入库计时计费系统
- 趋势,结构,位置,信号的完全分类
- 《数字图像处理—使用MATLAB分析与实现》高清带标签PDF电子书下载
- 语音篇?重读位置(七)
- Matlab旅程|MATLAB的结构化程序设计