一、设计功能

  1. 录制音频,保存音频
  2. 对录制的语音信号进行频谱分析,确定该段语音的主要频率范围;
  3. 利用采样定理,对该段语音信号进行采样,观察不用采样频率(过采样、欠采样、临界采样)对信号的影响;
  4. 实现语音信号的快放、慢放、倒放、男女变声;
  5. 对语音信号加噪,然后进行滤波,分析不同的滤波方式对信号的影响;
  6. 实现两音频的合成、拼接;
  7. 利用MATLAB GUI制作语音信号采集与分析演示系统;

二、设计步骤

1.创建GUI界面

2.新建空白界面

3.拖放控件,双击控件修改tag值和string

4.最后界面布置为图示,右键点击任何一个控件,进入回调函数callback。

5.在OpeningFcn中写入下面程序

% --- Executes just before functionalDSP is made visible.
function functionalDSP_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to functionalDSP (see VARARGIN) % Choose default command line output for functionalDSP
handles.output = hObject; % Update handles structure
guidata(hObject, handles);
h1=gcf;
set(h1,'Name','多功能语音处理器','Resize','on');
h2=uimenu(h1,'label','功能');
h3=uimenu(h2,'label','基本功能');
h4=uimenu(h2,'label','采样定理');
h5=uimenu(h2,'label','快慢放');
h6=uimenu(h2,'label','加噪去噪');
h7=uimenu(h2,'label','滤波器设计');
h8=uimenu(h2,'label','合成拼接');
h12=uimenu(h1,'label','设计人员');
h13=uimenu(h12,'label','孙宁宁');
h14=uimenu(h12,'label','宝历');
h15=uimenu(h12,'label','李佳桐');
h16=uimenu(h12,'label','马宁泽');
h17=uimenu(h12,'label','王璐');
h18=uimenu(h12,'label','王智聪');
% UIWAIT makes functionalDSP wait for user response (see UIRESUME)
% uiwait(handles.h1);

6.编辑“录制1”功能

 --- Executes on button press in record2.
function record2_Callback(hObject, eventdata, handles)
% hObject    handle to record2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
r=audiorecorder(10000,16,1);
recordblocking(r, 3);
g=getaudiodata(r);
m='C:\Users\孙宁宁\Desktop\孙宁宁程序\x1.wav';
audiowrite(m,g,10000);%将音频写入文件

7.编辑“录制2”功能

 --- Executes on button press in record2.
function record2_Callback(hObject, eventdata, handles)
% hObject handle to record2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
r=audiorecorder(,,);
recordblocking(r, );
g=getaudiodata(r);
m='C:\Users\孙宁宁\Desktop\孙宁宁程序\x2.wav';
audiowrite(m,g,);%将音频写入文件

8.编辑“读取”功能

%读取信号
function read_Callback(hObject, eventdata, handles)
% hObject    handle to read (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
[filename, pathname]=uigetfile({'.'},'读取音频文件');
%文件打开对话框,返回文件名和文件路径,当文件存在时会成功返回,如果不存在,则返回不存在。
if isequal([filename pathname],[0,0])%用户取消对话框返回0
return;
end
str=[pathname filename];%将文件名和路径名组合为一个字符串,赋值给str。
[x1,Fs]=audioread(str);%读取声音信号,采样值放在向量x1中,fs为采样频率
x=x1(:,1);  %对双声道信号取单声道,如果是x=x1(1:5000,1),则表示取了5000点。
handles.y1=x;%将原先采样的序列向量x给句柄y1
handles.Fs=Fs;%采样频率句柄
guidata(hObject,handles);%储存handles

9.编辑“分析”功能

% --- Executes on button press in original.
function original_Callback(hObject, eventdata, handles)
% hObject    handle to original (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
fs1=handles.Fs;%fs1为原信号的采样频率
Y=handles.y1;%Y为原采样的原信号
Y=Y(:,1);%取单值
sound(Y,fs1);%播放声音
M=length(Y);%M为信号长度
t=0:1/fs1:(M-1)/fs1;%傅里叶变换时间长度(30000个点,变换为以s为单位)
plot(handles.shiyu1,t,Y);%绘制时域图
xlabel(handles.shiyu1,'时间/s');
ylabel(handles.shiyu1,'幅度');
title(handles.shiyu1,'原声时域图');
F=fft(Y,M);%快速傅里叶变换
f=linspace(-fs1/2,fs1/2,length(Y)+1);
f(end) = [];;%频率序列(0~50000个点)
plot(handles.pinyu1,f,abs(F));%绘制频谱图
title(handles.pinyu1,'原声频谱图');
xlabel(handles.pinyu1,'频率/Hz');
ylabel(handles.pinyu1,'幅值');

10.编辑“原信号”功能

function origin_Callback(hObject, eventdata, handles)
% hObject handle to origin (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
wm=;
wc=wm;
Ts=pi/wm;
ws=*pi/Ts;
n=-:;
nTs=n*Ts;
f=sinc(nTs/pi);
t=-:0.2:;
f=sinc(t/pi);
N=length(f);
plot(handles.shiyu1,t,f);%绘制时域图
xlabel(handles.shiyu1,'时间/s');
ylabel(handles.shiyu1,'幅度');
title(handles.shiyu1,'原信号时域图');
F=fft(f);%快速傅里叶变换
f=[:N-]*wc/N;%频率序列
plot(handles.pinyu1,f,abs(F));%绘制频谱图
title(handles.pinyu1,'原信号频谱图');
xlabel(handles.pinyu1,'频率/Hz');
ylabel(handles.pinyu1,'幅值');

11.编辑“欠采样”功能

% --- Executes on button press in qian.
function qian_Callback(hObject, eventdata, handles)
% hObject handle to qian (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
wm=;%带宽
wc=wm;%频率
Ts=*pi/wm;%周期
ws=*pi/Ts;
n=-:;
nTs=n*Ts;
f=sinc(nTs/pi);
N=length(f);
t=-:0.2:;
stem(handles.shiyu4,t,f);%绘制时域图
xlabel(handles.shiyu4,'时间/s');
ylabel(handles.shiyu4,'幅度');
title(handles.shiyu4,'欠采样时域图');
F=fft(f);%快速傅里叶变换
f=[:N-]*wc/N;%频率序列
plot(handles.pinyu4,f,abs(F));%绘制频谱图
title(handles.pinyu4,'欠采样频谱图');
xlabel(handles.pinyu4,'频率/Hz');
ylabel(handles.pinyu4,'幅值');

12.编辑“临界采样”功能

% --- Executes on button press in lincai.
function lincai_Callback(hObject, eventdata, handles)
% hObject handle to lincai (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
wm=;%带宽
wc=wm;%频率
Ts=pi/wm;%周期
ws=*pi/wm;
n=-:;
nTs=n*Ts;
f=sinc(nTs/pi);
t=-:0.2:;
N=length(f);
stem(handles.shiyu3,t,f);%绘制时域图
xlabel(handles.shiyu3,'时间/s');
ylabel(handles.shiyu3,'幅度');
title(handles.shiyu3,'临界采样时域图');
F=fft(f);%快速傅里叶变换
f=[:N-]*wc/N;%频率序列
plot(handles.pinyu3,f,abs(F));%绘制频谱图
title(handles.pinyu3,'临界采样频谱图');
xlabel(handles.pinyu3,'频率/Hz');
ylabel(handles.pinyu3,'幅值');

13.编辑“过采样”功能

% --- Executes on button press in guo.
function guo_Callback(hObject, eventdata, handles)
% hObject handle to guo (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
wm=;
wc=wm;
Ts=0.5*pi/wm;
ws=*pi/Ts;
n=-:;
nTs=n*Ts;
f=sinc(nTs/pi);
t=-:0.2:;
f=sinc(t/pi);
N=length(f);
stem(handles.shiyu2,t,f);%绘制时域图
xlabel(handles.shiyu2,'时间/s');
ylabel(handles.shiyu2,'幅度');
title(handles.shiyu2,'过采样时域图');
F=fft(f);%快速傅里叶变换
f=[:N-]*wc/N;%频率序列
plot(handles.pinyu2,f,abs(F));%绘制频谱图
title(handles.pinyu2,'过采样频谱图');
xlabel(handles.pinyu2,'频率/Hz');
ylabel(handles.pinyu2,'幅值');

14.编辑“倒放”功能

% --- Executes on button press in dao.
function dao_Callback(hObject, eventdata, handles)
% hObject    handle to dao (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
dfs=handles.Fs;
dy=handles.y1;
M=length(dy):-1:1;%M序列颠倒
rY=dy(M);%颠倒后的信号
sound(rY,dfs);%倒放
t=0:1/dfs:(length(rY)-1)/dfs;%时间序列
plot(handles.shiyu2,t,rY);%绘制时域图
xlabel(handles.shiyu2,'时间/s');
ylabel(handles.shiyu2,'幅度');
title(handles.shiyu2,'倒放时域图');
F=fft(rY,length(rY));%快速傅里叶变换
f=[0:length(dy)-1]*dfs/length(dy);%频率序列
plot(handles.pinyu2,f,abs(F));%绘制频谱图
title(handles.pinyu2,'倒放频谱图');
xlabel(handles.pinyu2,'频率/Hz');
ylabel(handles.pinyu2,'幅值');

15.编辑“快放”功能

% --- Executes on button press in kuai.
function kuai_Callback(hObject, eventdata, handles)
% hObject    handle to kuai (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
kfs=3*handles.Fs; %fs2为采样频率
kx=handles.y1;%mx为原信号
sound(kx,kfs);
M=length(kx);%M为信号长度
t=0:1/kfs:(M-1)/kfs;%傅里叶变换时间长度
plot(handles.shiyu3,t,kx);%绘制时域图
xlabel(handles.shiyu3,'时间/s');
ylabel(handles.shiyu3,'幅度');
title(handles.shiyu3,'快放时域图');
F=fft(kx,M);%快速傅里叶变换
f=[0:M-1]*kfs/M;%频率序列
plot(handles.pinyu3,f,abs(F));%绘制频谱图
title(handles.pinyu3,'快放频谱图');
xlabel(handles.pinyu3,'频率/Hz');
ylabel(handles.pinyu3,'幅值');

16.编辑“慢放”功能

% --- Executes on button press in man.
function man_Callback(hObject, eventdata, handles)
% hObject    handle to man (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
mfs=0.7*handles.Fs; %fs2为采样频率
mx=handles.y1;%mx为原信号
sound(mx,mfs);
M=length(mx);%M为信号长度
t=0:1/mfs:(M-1)/mfs;%傅里叶变换时间长度
plot(handles.shiyu4,t,mx);%绘制时域图
xlabel(handles.shiyu4,'时间/s');
ylabel(handles.shiyu4,'幅度');
title(handles.shiyu4,'慢放时域图');
F=fft(mx,M);%快速傅里叶变换
f=[0:M-1]*mfs/M;%频率序列
plot(handles.pinyu4,f,abs(F));%绘制频谱图
title(handles.pinyu4,'慢放频谱图');
xlabel(handles.pinyu4,'频率/Hz');
ylabel(handles.pinyu4,'幅值');

17.编辑“音一”功能

function yin1_Callback(hObject, eventdata, handles)
% hObject handle to yin1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
[filename, pathname]=uigetfile({'.'},'读取音频文件');
%文件打开对话框,返回文件名和文件路径,当文件存在时会成功返回,如果不存在,则返回不存在。
if isequal([filename pathname],[,])%用户取消对话框返回0
return;
end
str=[pathname filename];%将文件名和路径名组合为一个字符串,赋值给str。
[x1,Fs]=audioread(str);%读取声音信号,采样值放在向量x1中,fs为采样频率
x=x1(:,); %对双声道信号取单声道,如果是x=x1(:,),则表示取了5000点。
Y=x;%取单值
fs1=Fs;
sound(Y,fs1);%播放声音
M=length(Y);%M为信号长度
t=:/fs1:(M-)/fs1;%傅里叶变换时间长度(30000个点,变换为以s为单位)
plot(handles.shiyu1,t,Y);%绘制时域图
xlabel(handles.shiyu1,'时间/s');
ylabel(handles.shiyu1,'幅度');
title(handles.shiyu1,'音一时域图');
F=fft(Y,M);%快速傅里叶变换
f=[:M-]*fs1/M;%频率序列(~50000个点)
plot(handles.pinyu1,f,abs(F));%绘制频谱图
title(handles.pinyu1,'音一频谱图');
xlabel(handles.pinyu1,'频率/Hz');
ylabel(handles.pinyu1,'幅值');
handles.y2=x;%将原先采样的序列向量x给句柄y1
handles.Fs2=Fs;%采样频率句柄
guidata(hObject,handles);%储存handles

18.编辑“音二”功能

% --- Executes on button press in yin2.
function yin2_Callback(hObject, eventdata, handles)
% hObject handle to yin2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
[filename, pathname]=uigetfile({'.'},'读取音频文件');
%文件打开对话框,返回文件名和文件路径,当文件存在时会成功返回,如果不存在,则返回不存在。
if isequal([filename pathname],[,])%用户取消对话框返回0
return;
end
str=[pathname filename];%将文件名和路径名组合为一个字符串,赋值给str。
[x1,Fs]=audioread(str);%读取声音信号,采样值放在向量x1中,fs为采样频率
x=x1(:,); %对双声道信号取单声道,如果是x=x1(:,),则表示取了5000点。
Y=x;%取单值
fs1=Fs;
sound(Y,fs1);%播放声音
M=length(Y);%M为信号长度
t=:/fs1:(M-)/fs1;%傅里叶变换时间长度(30000个点,变换为以s为单位)
plot(handles.shiyu2,t,Y);%绘制时域图
xlabel(handles.shiyu2,'时间/s');
ylabel(handles.shiyu2,'幅度');
title(handles.shiyu2,'音二时域图');
F=fft(Y,M);%快速傅里叶变换
f=[:M-]*fs1/M;%频率序列(~50000个点)
plot(handles.pinyu2,f,abs(F));%绘制频谱图
title(handles.pinyu2,'音二频谱图');
xlabel(handles.pinyu2,'频率/Hz');
ylabel(handles.pinyu2,'幅值');
handles.y3=x;%将原先采样的序列向量x给句柄y1
handles.Fs3=Fs;%采样频率句柄
guidata(hObject,handles);%储存handles

19.编辑“合成”功能

% --- Executes on button press in hecheng.
function hecheng_Callback(hObject, eventdata, handles)
% hObject    handle to hecheng (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
y=handles.y2;
fs=handles.Fs2;
y2=handles.y3;
[m,n]=size(y);%查看y的大小
[m2,n2]=size(y2);%查看y2的大小
z=zeros(max(m,m2)-min(m,m2),n);%生成一个零矩阵
if length(y)<length(y2);
y1=[y;z];%将y与零矩阵z组合,变成一个与Y2同等大小的矩阵
new=y1+y2;%生成的新的矩阵与y2相加,得到新的音频的矩阵
sound(new,fs);%播放新的音频
else
    y1=[y2;z];%同上,当y2的长度较小时,将零矩阵和Y2组合
    new=y1+y;%生成新的矩阵和Y相加
    sound(new,fs);%播放
end;
time_new=(1:length(new))/fs;
N=length(new);
plot(handles.shiyu3,time_new,new);
xlabel(handles.shiyu3,'时间/s');
ylabel(handles.shiyu3,'幅度');
title(handles.shiyu3,'拼接信号时域图');
F=fft(new);%快速傅里叶变换
f=[0:N-1]*fs/N;%频率序列
plot(handles.pinyu3,f,abs(F));%绘制频谱图
title(handles.pinyu3,'原信号频谱图');
xlabel(handles.pinyu3,'频率/Hz');
ylabel(handles.pinyu3,'幅值');

20.编辑“拼接”功能

% --- Executes on button press in pj.
function pj_Callback(hObject, eventdata, handles)
% hObject    handle to pj (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
y=handles.y2;
fs=handles.Fs2;
y2=handles.y3;
[m,n]=size(y);%查看y的大小
[m2,n2]=size(y2);%查看y2的大小
z=zeros(max(m,m2)-min(m,m2),n);%生成一个零矩阵
if length(y)<=length(y2);
y1=[y;z];%将y与零矩阵z组合,变成一个与Y2同等大小的矩阵
new=[y1;y2];%生成的新的矩阵与y2相加,得到新的音频的矩阵
sound(new,fs);%播放新的音频
else
    y1=[y2;z];%同上,当y2的长度较小时,将零矩阵和Y2组合
    new=[y1;y2];%生成新的矩阵和Y相加
    sound(new,fs);%播放
end;
time_new=(1:length(new))/fs;
N=length(new);
plot(handles.shiyu4,time_new,new);
xlabel(handles.shiyu4,'时间/s');
ylabel(handles.shiyu4,'幅度');
title(handles.shiyu4,'拼接信号时域图');
F=fft(new);%快速傅里叶变换
f=[0:N-1]*fs/N;%频率序列
plot(handles.pinyu4,f,abs(F));%绘制频谱图
title(handles.pinyu4,'原信号频谱图');
xlabel(handles.pinyu4,'频率/Hz');
ylabel(handles.pinyu4,'幅值');

21.编辑“加噪”功能

% --- Executes on button press in jia.
function jia_Callback(hObject, eventdata, handles)
% hObject    handle to jia (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
fs=handles.Fs;
x=handles.y1;
y=x(:,1);  %取一行提取矩阵
noise=0.2*sin(pi*20000*(1:length(y))/fs)+0.3*sin(pi*21000*(1:length(y))/fs)...
    +0.4*sin(pi*22000*(1:length(y))/fs);%噪声 10000rad/s+10500+11000
VNnoise=y+noise';%向量维度一致
F = fft(VNnoise);
freq = linspace(-fs/2,fs/2,length(VNnoise)+1);
freq(end) = [];
t1=1:length(VNnoise);
t=t1/fs;
plot(handles.shiyu3,t,VNnoise)
xlabel(handles.shiyu3,'时间');
ylabel(handles.shiyu3,'幅度');
title(handles.shiyu3,'加噪的时域图');
plot(handles.pinyu3,freq,abs(fftshift(F)));
xlabel(handles.pinyu3,'圆频率');
ylabel(handles.pinyu3,'幅度');
title(handles.pinyu3,'加噪的频谱图');
sound(VNnoise,fs);

22.编辑“去噪”功能

function qu_Callback(hObject, eventdata, handles)
% hObject handle to qu (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
qfs=handles.Fs;
X=handles.y1;
y=X(:,); %取一行提取矩阵
n=0.2*sin(pi**(:length(y))/qfs)+0.3*sin(pi**(:length(y))/qfs)+0.4*sin(pi**(:length(y))/qfs);%噪声 10000rad/s++
jz=y+n';%向量维度一致
%[b,a] = butter(,*/fs,'LOW') ; %巴特沃斯滤波器
%result=filter(b,a,VNnoise);
Hd = ditong1;%Fdatool滤波
result=filter(Hd,X);
result=result(:,);
sound(result,qfs);
F = fft(result);
freq = linspace(-qfs/,qfs/,length(result)+);
freq(end) = [];
t1=:length(result);
t=t1/qfs;
plot(handles.shiyu4,t,result)
xlabel(handles.shiyu4,'时间');
ylabel(handles.shiyu4,'幅度');
title(handles.shiyu4,'去噪的时域图');
plot(handles.pinyu4,freq,abs(fftshift(F)));
xlabel(handles.pinyu4,'频率');
ylabel(handles.pinyu4,'幅度');
title(handles.pinyu4,'去噪的频谱图');

23.编辑“回声”功能

% --- Executes on button press in hui.
function hui_Callback(hObject, eventdata, handles)
% hObject handle to hui (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
fs=handles.Fs;
y=handles.y1;
x1=[zeros(,);y];
x2=[y;zeros(,)];
z=x1+x2;
sound(*z,fs);
F=fft(z);
f=linspace(-fs/,fs/,length(z)+);
f(end) = [];
t1=:length(z);
t=t1/fs;
plot(handles.shiyu2,t,z);
title(handles.shiyu2,'加入回音时域图');
xlabel(handles.shiyu2,'时间');
ylabel(handles.shiyu2,'幅度');
plot(handles.pinyu2,f,abs(F));
xlabel(handles.pinyu2,'圆频率');
ylabel(handles.pinyu2,'幅度');
title(handles.pinyu2,'加入回音频谱图');
sound(z,fs);

24.编辑“去回声”功能

% --- Executes on button press in lv.
function lv_Callback(hObject, eventdata, handles)
% hObject handle to lv (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
fs=handles.Fs;
y=handles.y1;
N=length(y);
x1=[zeros(,);y];
x2=[y;zeros(,)];
z=x1+x2;
b=;
a=zeros(,N);
a()=;
a()=;
z2=filter(b,a,z);
F=fft(z2);
f=linspace(-fs/,fs/,length(z2)+);
f(end) = [];
t1=:length(z2);
t=t1/fs;
plot(handles.shiyu4,t,z2);
title(handles.shiyu4,'滤除回音时域图');
xlabel(handles.shiyu4,'时间');
ylabel(handles.shiyu4,'幅度');
plot(handles.pinyu4,f,abs(F));
xlabel(handles.pinyu4,'频率');
ylabel(handles.pinyu4,'幅度');
title(handles.pinyu4,'滤除回音频谱图');
sound(z2,fs);

25.编辑“男女声转化”功能

% --- Executes on button press in nv.
function nv_Callback(hObject, eventdata, handles)
% hObject handle to nv (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
FL = ; % 帧移
WL = ; % 窗长
P = ; %预测系数个数
s = handles.y1;
fs = handles.Fs;
% 定义常数
s = s/max(s); % 归一化
L = length(s); % 读入语音长度
FN = floor(L/FL)-; % 计算帧长,floor;向负无穷方向
% 预测和重建滤波器
exc = zeros(L,); % 激励信号,double类零矩阵L行1列
zi_pre = zeros(P,); % 预测滤波器状态
s_rec = zeros(L,); % 重建语音
zi_rec = zeros(P,);
% 变调滤波器
exc_syn_t = zeros(L,); % 合成的激励信号,创建一个L行1列的0脉冲
s_syn_t = zeros(L,); % 合成语音
last_syn_t = ; % 存储上一个段的最后一个脉冲的下标
zi_syn_t = zeros(P,); % 合成滤波器
hw = hamming(WL); %汉明窗
%滤波器
% 依次处理每帧语音
for n = :FN %从第三个子数组开始
% 计算预测系数
s_w = s(n*FL-WL+:n*FL).*hw; %汉明窗加权
[A,E]=lpc(s_w,P); %线性预测计算预测系数
% A是预测系数,E会被用来计算合成激励的能量
s_f=s((n-)*FL+:n*FL); % 本帧语音
%利用filter函数重建语音
[exc1,zi_pre] = filter(A,,s_f,zi_pre);
exc((n-)*FL+:n*FL) = exc1; %计算激励
%利用filter函数重建语音
[s_rec1,zi_rec] = filter(,A,exc1,zi_rec);
s_rec((n-)*FL+:n*FL) = s_rec1; %重建语音
% 下面只有得到exc后才可以
s_Pitch = exc(n*FL-:n*FL);
PT(n) = findpitch(s_Pitch); %计算基音周期pt
G = sqrt(E*PT(n)); %计算合成激励的能量G
PT1 =floor(PT(n)/); %减小基音周期
poles = roots(A);
deltaOMG =**pi/fs; for p=: %增加共振峰
if imag(poles(p))>
poles(p) = poles(p)*exp(1j*deltaOMG);
elseif imag(poles(p))<
poles(p) = poles(p)*exp(-1j*deltaOMG);
end
end
A1=poly(poles);
tempn_syn_t=(:n*FL-last_syn_t);
exc_syn1_t = zeros(length(tempn_syn_t),);
exc_syn1_t(mod(tempn_syn_t,PT1)==) = G;
exc_syn1_t = exc_syn1_t((n-)*FL-last_syn_t+:n*FL-last_syn_t);
[s_syn1_t,zi_syn_t] = filter(,A1,exc_syn1_t,zi_syn_t);
exc_syn_t((n-)*FL+:n*FL) = exc_syn1_t; %合成激励
s_syn_t((n-)*FL+:n*FL) = s_syn1_t; %合成语音
last_syn_t = last_syn_t+PT1*floor((n*FL-last_syn_t)/PT1);
end
Y = s_syn_t;
F = fft(Y);
freq = linspace(-fs/,fs/,length(Y)+);
freq(end) = [];
plot(handles.pinyu2,freq,abs(fftshift(F)));
xlabel(handles.pinyu2,'圆频率');
ylabel(handles.pinyu2,'幅度');
title(handles.pinyu2,'频率特性');
handles.y=s_syn_t;
guidata(hObject,handles);
plot(handles.shiyu2,s_syn_t);
t1=:length(s_syn_t);
t=t1/;
plot(handles.shiyu2,t,s_syn_t);
title(handles.shiyu2,'时域图');
xlabel(handles.shiyu2,'时间');
ylabel(handles.shiyu2,'幅度');
sound(handles.y,);

三、导出GUI界面为可执行文件

1.在命令行中输入“deploytool”

2.在弹出的窗口中选择第一个

3.选择文件,填写信息

4.填写完毕后,package的√会变绿,点击√

5.保存工程

6.等候打包

7.生成.exe文件

8.完成

基于MATLAB的多功能语音处理器的更多相关文章

  1. 基于Matlab的MMSE的语音增强算法的研究

    本课题隶属于学校的创新性课题研究项目.2012年就已经做完了,今天一并拿来发表.   目录: --基于谱减法的语音信号增强算法..................................... ...

  2. 基于MATLAB的GUI(Graphical User Interface)音频实时显示设计

    摘要:本文章的设计主要讲基于matlab的gui音频实时显示设计,此次设计的gui相当于一个简洁的音乐播放器,界面只有”录音“和”播放“两个控件,哈哈,够简洁吧.通过”录音“按钮可以实现声音从电脑的声 ...

  3. 基于英特尔® 至强™ 处理器 E5 产品家族的多节点分布式内存系统上的 Caffe* 培训

    原文链接 深度神经网络 (DNN) 培训属于计算密集型项目,需要在现代计算平台上花费数日或数周的时间方可完成. 在最近的一篇文章<基于英特尔® 至强™ E5 产品家族的单节点 Caffe 评分和 ...

  4. 基于MATLAB的多项式数据拟合方法研究-毕业论文

    摘要:本论文先介绍了多项式数据拟合的相关背景,以及对整个课题做了一个完整的认识.接下来对拟合模型,多项式数学原理进行了详细的讲解,通过对文献的阅读以及自己的知识积累对原理有了一个系统的认识.介绍多项式 ...

  5. 无人机基于Matlab/Simulink的模型开发(连载一)

    "一切可以被控制的对象,都需要被数学量化" 这是笔者从事多年研发工作得出的道理,无论是车辆控制,机器人控制,飞机控制,还是无人机控制,所有和机械运动相关的控制,如果不能被很好的数学 ...

  6. 机器学习技法实现(一):AdaBoost- Decision Stump (AdaBoost - 决策树的基于Matlab的实现)

    经过前面对AdaBoost的总结,下面要基于Matlab实现AdaBoost-Stump进行二维平面数据点的分类的实验. 一. 实验原理 参看 http://blog.csdn.net/lg12591 ...

  7. 基于MATLAB的手写公式识别(2)

    基于MATLAB的手写公式识别 图像的预处理(除去噪声.得到后续定位分割所需的信息.) 预处理其本质就是去除不需要的噪声信息,得到后续定位分割所需要的图像信息.图像信息在采集的过程中由于天气环境的影响 ...

  8. FPGA多功能应用处理器

    FPGA多功能应用处理器 编解码加速卡 概述: 对于H.265/HEVC/VP9编解码处理,FPGA编解码加速卡方案有着完善的功能和preset配置,支持最多的有利于提高画质和降低bitrate的功能 ...

  9. 基于MATLAB的离散小波变换

    申明,本文非笔者原创,原文转载自:  基于Matlab的离散小波变换         http://blog.sina.com.cn/s/blog_725866260100ryh3.html 简介 在 ...

随机推荐

  1. Hibernate注解开发教程

    目录 第一章 类级别注解 1-1 本章简介 一.Hibernate注解简介 二.JPA与Hibernate的关系 三.Hibernate注解的分类 1-2 准备工作 1-3 @Entity注解 1-4 ...

  2. 淘宝信海龙 --PHP系统

    https://yq.aliyun.com/users/1467229535950742?spm=5176.100239.blogrightarea56002.3.RoToxZ

  3. 前台JSON字符串,spring mvc controller也接收字符串

    前台JSON字符串,spring mvc controller也接收字符串 前台: $.post(url, { data : JSON.stringify(obj) }, function(data) ...

  4. [React Testing] Confidently Ship Production React Apps

    We want to make sure that when we ship new code, our users can use the application. The best way we' ...

  5. Windows移动开发(五)——初始XAML

    关于详细的基本功就先说这么多.后面遇到再补充说明,前面说的都是一些代码和原理方面的东西.接下来说的会有界面和代码结合,会有成就感,由于能真正的做出东西来了. Windows移动开发包含Windows ...

  6. songtzu的创业产品的经历

    我的产品是关于卡通头像的东东,也有点照片处理app的感觉.你可能会想到脸萌.或者足迹.可是.我自觉得,我比这两者想做的东西要好. 以下的两张是站点首页的效果图. 图片版权与肖像权全部,非授权不得使用. ...

  7. NS3网络仿真(2):first.py

    1    安装基本模块 11  安装Python 12  安装PTVS 13  加入对python-279的支持 2    在vs2013下编译NS3 3    编译NetAnim 4    在vs2 ...

  8. Java类集-list

    Collection 子接口: ArrayList是List 接口和Collection接口的一个子类,用于实例化两种接口 package leiji; import java.util.ArrayL ...

  9. 使用poi读取word2007(.docx)中的复杂表格

    使用poi读取word2007(.docx)中的复杂表格 最近工作需要做一个读取word(.docx)中的表格,并以html形式输出.经过上网查询,使用了poi. 对于2007及之后的word文档,需 ...

  10. bzoj 1059 [ ZJOI 2007 ] 矩阵游戏 —— 二分图匹配

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1059 每一列选出一个占据一行才可以: 挫败. 代码如下: #include<iostr ...