理想滤波器滤波,音频文件的打开及保存,音频播放控制及均衡器效果设置等。下面仅介绍实现几个主要功能的M代码程序。
(1)理想滤波器滤波。实现的代码及说明如下:
N=handles.N;
if(get(handles.RB_LowPass,'Value')==1) fL=5000; % 设置低通截止频率 % 设置理想低通滤波器的频率特性
Hw=[ones(1,fix(N*fL/fs)),zeros(1,N-2*fix(N*fL/fs)),ones(1,fix(N*fL/fs))]; elseif(get(handles.RB_HighPass,'Value')==1) fH=5000; % 设置高通截止频率 % 设置理想高通滤波器的频率特性
Hw=[zeros(1,fix(N*fH/fs)),ones(1,N-2*fix(N*fH/fs)),zeros(1,fix(N*fH/fs))]; elseif(get(handles.RB_BandDamp,'Value')==1) f0=2500; f1=10000;
Hw=[ones(1,fix(N*f0/fs)),zeros(1,fix(N*(f1-f0)/fs)),ones(1,N-2*fix(N*f1/fs)),zeros(1,fix(N*(f1-f0)/fs)),ones(1,fix(N*f0/fs))]; else
f0=2500; f1=10000;
Hw=[zeros(1,fix(N*f0/fs)),ones(1,fix(N*(f1-f0)/fs)),zeros(1,N-2*fix(N*f1/fs)),ones(1,fix(N*(f1-f0)/fs)),zeros(1,fix(N*f0/fs))]; end
fPyy=Pyy(1:handles.N/2).*Hw(1:handles.N/2); plot(handles.axes4,f,fPyy,'c');
xlabel(handles.axes4,'滤波后信号频谱 Freqency(Hz)','fontweight','bold'); ylabel(handles.axes4,'Amplitude','fontweight','bold');
set(handles.axes4,'Color',[0 0 0],'XColor',[0 0.5 0],'YColor',[0 0.5 0]); grid(handles.axes4);
上面代码为理想滤波器频域滤波的部分代码,前一部分的if …; elseif …; elseif …; else …; end语句用于判断选择的理想滤波器类型,并用zeros和ones函数生成对应的理想滤波器频率特性离散值。后一语句将原始信号经快速傅里叶变换得到的频域特性与滤波器频域特性相乘,即得到滤波后的信号频域特性。然后,将得到的滤波后的信号频谱图输出到axes4坐标轴上。
(2)音频信号的打开和保存。实现的代码如下: I. 打开音频文件
function PB_open_Callback(hObject, eventdata, handles) [filename] = uigetfile('*.wav','选择声音文件');
if(size(filename,2)>1) % 判断是否已打开了声音文件 [s,fs] = wavread(filename);
set(handles.musicname,'string',filename); handles.s=s(:,1); handles.fs=fs; handles.sign=0;
guidata(hObject,handles); end
上面代码为打开音频文件按钮的回调函数。首先利用uigetfile函数打开检索文件对话框,打开一个wav音频文件,然后根据返回的文件名长度判断是否打开成功,若成功,则将获取到的文件名显示到文本框控件上,并用wavread函数读取该文件,获取该音频信号的波形数据和采样率。最后将获取到的波形数据和采样率保存到handles数据中,方便后面的信号处理和播放。
II. 保存音频文件
function PB_save_Callback(hObject, eventdata, handles)
if(size(get(handles.musicname,'string'),2)==12 & get(handles.musicname,'string')
=='请打开一个音频文件...') return; end
[filename] = uiputfile('*.wav','将音频文件另存为'); if(filename==0) return; end
wavwrite(handles.s,handles.fs,filename);
上面代码为保存音频文件按钮的回调函数。首先判断是否已打开了音频文件,若没有打开,则直接返回。然后,用uiputfile函数打开用于保存文件的标准对话框,输入保存后的wav文件名,然后用wavwrite函数将当前播放的音频文件数据写入到该wav音频文件中。
(3)音频播放控制。实现的代码如下: I. 生成声音文件对象
s=handles.s; fs=handles.fs;
handles.p = audioplayer(s, fs);
上面代码是用audioplayer函数,由声音波形信号s和采样率fs创建一个声音播放对象。
II. 声音播放及控制(暂停、继续、停止、快播和慢播)
声音播放及控制的代码语句如下所示:
play(handles.p); %播放声音对象 pause(handles.p); %暂停播放 resume(handles.p); %继续播放 stop(handles.p); %停止播放
快播:首先获取声音对象的采样率,然后将采样率放大到1.5倍,代码如下:
temp=get(handles.p,'SampleRate'); set(handles.p,'SampleRate',1.5*temp);
慢播:首先获取声音对象的采样率,然后将采样率缩小到原来的0.7倍,代码如下:
temp=get(handles.p,'SampleRate'); set(handles.p,'SampleRate',0.7*temp);
III.音量控制
vol=get(handles.slider_vol,'value'); s=vol*s;
handles.p = audioplayer(s, fs); guidata(hObject,handles);
上面代码为声音播放的回调函数中关于音量控制部分的程序。首先获取音量控制滑动条的参数值,然后将它与声音信号相乘得到新的声音信号,并由该声音信号生成声音播放对象。最后将该声音播放对象保存到handles数据中,方便后面的声音播放控制。
(4)均衡器参数设置。实现的代码如下:
j=get(handles.PM_MusicType,'Value'); switch j case 1
case 2
set(handles.slider31,'value',3); set(handles.slider62,'value',1); set(handles.slider125,'value',0); set(handles.slider250,'value',-2); set(handles.slider500,'value',-4); set(handles.slider1k,'value',-4); set(handles.slider2k,'value',-2); set(handles.slider4k,'value',0); set(handles.slider6k,'value',1); set(handles.slider16k,'value',2); case 3
…
case 7
…
end
a31=10.^(round(get(handles.slider31,'value'))/20); a62=10.^(round(get(handles.slider62,'value'))/20); a125=10.^(round(get(handles.slider125,'value'))/20); a250=10.^(round(get(handles.slider250,'value'))/20); a500=10.^(round(get(handles.slider500,'value'))/20); a1k=10.^(round(get(handles.slider1k,'value'))/20); a2k=10.^(round(get(handles.slider2k,'value'))/20); a4k=10.^(round(get(handles.slider4k,'value'))/20); a6k=10.^(round(get(handles.slider6k,'value'))/20); a16k=10.^(round(get(handles.slider16k,'value'))/20); N=size(s,1); k=N/fs; Pf=fft(s);
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库基于MATLAB的数字滤波器和均衡器设计(2)在线全文阅读。
相关推荐: