首页 技术 正文
技术 2022年11月18日
0 收藏 382 点赞 2,270 浏览 12193 个字

一、图形界面设计

1.新建GUI界面

基于MATLAB的语音信号处理

2.新建空白页

基于MATLAB的语音信号处理

3.命名为”yydsp”,打开界面

基于MATLAB的语音信号处理

4.拖放控件

基于MATLAB的语音信号处理

5.按预定功能修改界面

基于MATLAB的语音信号处理

6.填写Callback函数

未填写前的代码:

function varargout = yydsp(varargin)% YYDSP MATLAB code for yydsp.fig%      YYDSP, by itself, creates a new YYDSP or raises the existing%      singleton*.%%      H = YYDSP returns the handle to a new YYDSP or the handle to%      the existing singleton*.%%      YYDSP('CALLBACK',hObject,eventData,handles,...) calls the local%      function named CALLBACK in YYDSP.M with the given input arguments.%%      YYDSP('Property','Value',...) creates a new YYDSP or raises the%      existing singleton*.  Starting from the left, property value pairs are%      applied to the GUI before yydsp_OpeningFcn gets called.  An%      unrecognized property name or invalid value makes property application%      stop.  All inputs are passed to yydsp_OpeningFcn via varargin.%%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one%      instance to run (singleton)".%% See also: GUIDE, GUIDATA, GUIHANDLES% Edit the above text to modify the response to help yydsp% Last Modified by GUIDE v2. -Oct- ::% Begin initialization code - DO NOT EDITgui_Singleton = ;gui_State = struct('gui_Name',       mfilename, ...                   'gui_Singleton',  gui_Singleton, ...                   'gui_OpeningFcn', @yydsp_OpeningFcn, ...                   'gui_OutputFcn',  @yydsp_OutputFcn, ...                   'gui_LayoutFcn',  [] , ...                   'gui_Callback',   []);})    gui_State.gui_Callback = str2func(varargin{});endif nargout    [varargout{:nargout}] = gui_mainfcn(gui_State, varargin{:});else    gui_mainfcn(gui_State, varargin{:});end% End initialization code - DO NOT EDIT% --- Executes just before yydsp is made visible.function yydsp_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 yydsp (see VARARGIN)% Choose default command line output for yydsphandles.output = hObject;% Update handles structureguidata(hObject, handles);% UIWAIT makes yydsp wait for user response (see UIRESUME)% uiwait(handles.figure1);% --- Outputs from this function are returned to the command line.function varargout = yydsp_OutputFcn(hObject, eventdata, handles)% varargout  cell array for returning output args (see VARARGOUT);% hObject    handle to figure% eventdata  reserved - to be defined in a future version of MATLAB% handles    structure with handles and user data (see GUIDATA)% Get default command line output from handles structurevarargout{} = handles.output;% --- Executes on button press in pushbutton1.function pushbutton1_Callback(hObject, eventdata, handles)% hObject    handle to pushbutton1 (see GCBO)% eventdata  reserved - to be defined in a future version of MATLAB% handles    structure with handles and user data (see GUIDATA)% --- Executes on button press in pushbutton2.function pushbutton2_Callback(hObject, eventdata, handles)% hObject    handle to pushbutton2 (see GCBO)% eventdata  reserved - to be defined in a future version of MATLAB% handles    structure with handles and user data (see GUIDATA)% --- Executes on button press in pushbutton3.function pushbutton3_Callback(hObject, eventdata, handles)% hObject    handle to pushbutton3 (see GCBO)% eventdata  reserved - to be defined in a future version of MATLAB% handles    structure with handles and user data (see GUIDATA)% --- Executes on button press in pushbutton4.function pushbutton4_Callback(hObject, eventdata, handles)% hObject    handle to pushbutton4 (see GCBO)% eventdata  reserved - to be defined in a future version of MATLAB% handles    structure with handles and user data (see GUIDATA)% --- Executes on button press in pushbutton5.function pushbutton5_Callback(hObject, eventdata, handles)% hObject    handle to pushbutton5 (see GCBO)% eventdata  reserved - to be defined in a future version of MATLAB% handles    structure with handles and user data (see GUIDATA)% --- Executes on button press in pushbutton6.function pushbutton6_Callback(hObject, eventdata, handles)% hObject    handle to pushbutton6 (see GCBO)% eventdata  reserved - to be defined in a future version of MATLAB% handles    structure with handles and user data (see GUIDATA)% --- Executes on button press in pushbutton7.function pushbutton7_Callback(hObject, eventdata, handles)% hObject    handle to pushbutton7 (see GCBO)% eventdata  reserved - to be defined in a future version of MATLAB% handles    structure with handles and user data (see GUIDATA)% --- Executes on button press in pushbutton8.function pushbutton8_Callback(hObject, eventdata, handles)% hObject    handle to pushbutton8 (see GCBO)% eventdata  reserved - to be defined in a future version of MATLAB% handles    structure with handles and user data (see GUIDATA)% --- Executes on button press in pushbutton9.function pushbutton9_Callback(hObject, eventdata, handles)% hObject    handle to pushbutton9 (see GCBO)% eventdata  reserved - to be defined in a future version of MATLAB% handles    structure with handles and user data (see GUIDATA)% --- Executes on button press in pushbutton10.function pushbutton10_Callback(hObject, eventdata, handles)% hObject    handle to pushbutton10 (see GCBO)% eventdata  reserved - to be defined in a future version of MATLAB% handles    structure with handles and user data (see GUIDATA)% --- Executes on button press in pushbutton11.function pushbutton11_Callback(hObject, eventdata, handles)% hObject    handle to pushbutton11 (see GCBO)% eventdata  reserved - to be defined in a future version of MATLAB% handles    structure with handles and user data (see GUIDATA)% --- Executes on button press in pushbutton12.function pushbutton12_Callback(hObject, eventdata, handles)% hObject    handle to pushbutton12 (see GCBO)% eventdata  reserved - to be defined in a future version of MATLAB% handles    structure with handles and user data (see GUIDATA)% --- Executes on button press in pushbutton13.function pushbutton13_Callback(hObject, eventdata, handles)% hObject    handle to pushbutton13 (see GCBO)% eventdata  reserved - to be defined in a future version of MATLAB% handles    structure with handles and user data (see GUIDATA)% --- Executes on button press in pushbutton14.function pushbutton14_Callback(hObject, eventdata, handles)% hObject    handle to pushbutton14 (see GCBO)% eventdata  reserved - to be defined in a future version of MATLAB% handles    structure with handles and user data (see GUIDATA)

填写后的代码

  1)打开文件部分

[filename,pathname]=uigetfile({'*.*','ALL FILES'},'选择声音');%显示模态对话框,%列出当前文件夹中的文件,如果文件有效,点击打开时会返回文件名,如果点击取消,返回0,])return;endstr=[pathname filename];%合成路径+文件名[temp,Fs]=audioread(str);%读取音频声音temp=temp(:,);  %取一行提取矩阵temp1=resample(temp,,);%信号降采样处理handles.y=temp1;%降采样的句柄handles.y1=temp;%y1为原声handles.Fs=Fs;%采样频率guidata(hObject,handles);%存储或检索 UI 数据

程序中,resample为信号降采样处理,理解如下:
B=resample(x,90,250); %
采样从250Hz降到90Hz,如果250在前,就是插值从90到250,可以看B的长度,250Hz采样4000个数据等于90hz采样1440个数据,这就是降采样。

2)播放原声,画时频图

fs=handles.Fs;Y=handles.y1;Y=Y(:,);%取单声道t1=:length(Y);t=t1/fs;sound(Y,fs);   %播放原声F = fft(Y);%快速傅里叶变换freq = linspace(-fs/,fs/,length(Y)+);freq(end) = [];plot(handles.axes1,t,Y)xlabel(handles.axes1,'时间');ylabel(handles.axes1,'幅度');title(handles.axes1,'原声音的波形');y1=fft(Y);plot(handles.axes4,abs(y1));xlabel(handles.axes4,'圆频率');ylabel(handles.axes4,'幅度');title(handles.axes4,'未改变坐标轴的频率特性');plot(handles.axes2,freq,abs(fftshift(F)));title(handles.axes2,'原声音的真实频响');xlabel(handles.axes2,'圆频率');ylabel(handles.axes2,'幅度');title(handles.axes2,'频率特性');

3)男声变女声

FL =   ;               % 帧移WL =  ;               % 窗长    P =  ;                 %预测系数个数    s = handles.y;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);         %汉明窗%滤波器% 依次处理每帧语音: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;:   %增加共振峰poles(p) = poles(p)*exp(1j*deltaOMG);elseif imag(poles(p))<poles(p) = poles(p)*exp(-1j*deltaOMG);endend 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);endY = s_syn_t;F = fft(Y);freq = linspace(-fs/,fs/,length(Y)+);freq(end) = [];plot(handles.axes4,freq,abs(fftshift(F)));     xlabel(handles.axes4,'圆频率');     ylabel(handles.axes4,'幅度');     title(handles.axes4,'频率特性');     handles.y=s_syn_t;     guidata(hObject,handles);plot(handles.axes3,s_syn_t);    t1=:length(s_syn_t);    t=t1/;    plot(handles.axes3,t,s_syn_t);    title(handles.axes3,'时域图');    xlabel(handles.axes3,'时间');    ylabel(handles.axes3,'幅度');    sound(handles.y,);  

4)退出

delete(handles.figure1);

5)快放

fs=handles.Fs;Y=handles.y1;Y=Y(:,);F = fft(Y);freq = linspace(-fs/,fs/,length(Y)+);freq(end) = [];sound(Y,*fs);t1=:length(Y);t=t1/(*fs);plot(handles.axes3,t,Y)title(handles.axes3,'时域图');xlabel(handles.axes3,'时间');ylabel(handles.axes3,'幅度');plot(handles.axes4,freq,abs(fftshift(F)));xlabel(handles.axes4,'圆频率');ylabel(handles.axes4,'幅度');title(handles.axes4,'频率特性');

6)慢放

fs=handles.Fs;Y=handles.y1;Y=Y(:,);sound(Y,0.5*fs);F = fft(Y);freq = linspace(-fs/,fs/,length(Y)+);freq(end) = [];%t1=:length(Y);t=t1/(0.5*fs);plot(handles.axes3,t,Y)title(handles.axes3,'时域图');xlabel(handles.axes3,'时间');ylabel(handles.axes3,'幅度');plot(handles.axes4,freq,abs(fftshift(F)));xlabel(handles.axes4,'圆频率');ylabel(handles.axes4,'幅度');title(handles.axes4,'频率特性');

7)制造回音

fs=handles.Fs;N=length(handles.y1);x1=handles.y1(:N);x2=handles.y1(:N);x1=[x1,zeros(,)];x2=[zeros(,),,)];z=x1+x2;F = fft(z);freq = linspace(-fs/,fs/,length(z)+);freq(end) = [];t1=:length(z);t=t1/fs;plot(handles.axes3,t,z)title(handles.axes3,'含回音波形');xlabel(handles.axes3,'时间');ylabel(handles.axes3,'幅度');plot(handles.axes4,freq,abs(fftshift(F)));xlabel(handles.axes4,'圆频率');ylabel(handles.axes4,'幅度');title(handles.axes4,'频率特性');sound(z,fs);

8)回音还原

fs=handles.Fs;N=length(handles.y1);x1=handles.y1(:N);x2=handles.y1(:N);x3=handles.y1(:N);x1=[x1,zeros(,)];x2=[zeros(,),,)];z=x1+x2;b=;a=zeros(,N);a()=;a()=0.4;z2=filter(b,a,z);F = fft(z2);freq = linspace(-fs/,fs/,length(z2)+);freq(end) = [];t1=:length(z2);t=t1/fs;plot(handles.axes3,t,z2)title(handles.axes3,'滤除回声的波形');xlabel(handles.axes3,'时间');ylabel(handles.axes3,'幅度');plot(handles.axes4,freq,abs(fftshift(F)));xlabel(handles.axes4,'圆频率');ylabel(handles.axes4,'幅度');title(handles.axes4,'频率特性');sound(z2,fs);

9)制造噪声

fs=handles.Fs;x=handles.y1;y=x(:,);  %取一行提取矩阵noise=*(:length(y))/fs)+*(:length(y))/fs)...    +*(:length(y))/fs);%噪声 10000rad/s++VNnoise=y+noise';%向量维度一致F = fft(VNnoise);freq = linspace(-fs/,fs/,length(VNnoise)+);freq(end) = [];t1=:length(VNnoise);t=t1/fs;plot(handles.axes3,t,VNnoise)xlabel(handles.axes3,'时间');ylabel(handles.axes3,'幅度');title(handles.axes3,'添加噪声的波形');plot(handles.axes4,freq,abs(fftshift(F)));xlabel(handles.axes4,'圆频率');ylabel(handles.axes4,'幅度');title(handles.axes4,'频率特性');sound(VNnoise,fs);

10)滤除噪声

fs=handles.Fs;x=handles.y1;y=x(:,);  %取一行提取矩阵noise=*(:length(y))/fs)+*(:length(y))/fs)...    +*(:length(y))/fs);%噪声 10000rad/s++VNnoise=y+noise';%向量维度一致%[b,a] = butter(,*/fs,'LOW') ;   %巴特沃斯滤波器%result=filter(b,a,VNnoise);Hd = ditong1;%Fdatool滤波result=filter(Hd,x);result=result(:,);sound(result,fs);F = fft(result);freq = linspace(-fs/,fs/,length(result)+);freq(end) = [];t1=:length(result);t=t1/fs;plot(handles.axes3,t,result)xlabel(handles.axes3,'时间');ylabel(handles.axes3,'幅度');title(handles.axes3,'添加噪声的波形');plot(handles.axes4,freq,abs(fftshift(F)));xlabel(handles.axes4,'圆频率');ylabel(handles.axes4,'幅度');title(handles.axes4,'频率特性');

11)左右声道合唱

fs=handles.Fs;sound(original,fs);a1=;a2=-;b1=;b2=-;Soundleft=original(:,);%左声道Soundright=original(:,);%右声道newleft=Soundleft+Soundright;       %新的左声道为原来的全部声道newright=b1*Soundleft+b2*Soundright; %新的右声道为原来的左声道-原来的右Sound(:,)=newleft;Sound(:,)=newright;bp=fir1(,[,]/(fs/));cutdown=filter(bp,,Sound);Sound_final=Sound-0.6*abs(cutdown);sound(Sound_final,fs)F = fft(Sound_final);freq = linspace(-fs/,fs/,length(Sound_final)+);freq(end) = [];t1=:length(Sound_final);t=t1/fs;plot(handles.axes3,t,Sound_final)xlabel(handles.axes3,'时间');ylabel(handles.axes3,'幅度');title(handles.axes3,'时域波形');plot(handles.axes4,freq,abs(fftshift(F)));xlabel(handles.axes4,'圆频率');ylabel(handles.axes4,'幅度');title(handles.axes4,'频率特性');

12)反放

fs=handles.Fs;y=handles.y1;M=length(y):-:;rever=y(M);sound(rever,fs);%反播F = fft(rever);freq = linspace(-fs/,fs/,length(rever)+);freq(end) = [];t1=:length(rever);t=t1/fs;plot(handles.axes3,t,rever)xlabel(handles.axes3,'时间');ylabel(handles.axes3,'幅度');title(handles.axes3,'反播的波形');plot(handles.axes4,freq,abs(fftshift(F)));xlabel(handles.axes4,'圆频率');ylabel(handles.axes4,'幅度');title(handles.axes4,'频率特性');
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,077
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,552
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,401
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,176
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,813
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,896