当前位置:首页 > dsp课程设计-基于MATLAB的数字滤波器的设计
课程设计说明书
fc=1200; fs=22050; As=15; Ap=1;
wb=fb*2*pi/fs; %将数字频率转化为数字角频率 wc=fc*2*pi/fs;
Wb=2*fs*tan(wb/2); %数字角频率转化为模拟角频率 Wc=2*fs*tan(wc/2);
[n,wn]=buttord(Wb,Wc,Ap,As,'s'); %最小阶次为N的巴特沃兹低通滤波器 [b,a]=butter(n,wn,'s'); %截止频率为wn的低通模拟巴特沃兹滤波器 [bd,ad]=bilinear(b,a,fs); %将模拟滤波器转化为数字滤波器 [h,w]=freqz(bd,ad,1024); %数字滤波器的n点复频响应值 axes(handles.axes1)
plot(w*fs/(2*pi),20*log10(abs(h))); %复频特性曲线· title('IIR低通滤波器幅频特性');
[x,fs,bits]=wavread('W.wav'); %读取语音信号 n=length(x); %输入语音信号的长度 f=fs*(0:(n/2-1))/n;
sound(x); %回放输入的语音信号 X=fft(x); %输入信号的傅里叶变换
z=filter(bd,ad,x); %对输入的语音信号进行滤波 axes(handles.axes2) plot(x);
title('原始语音信号的波形'); axes(handles.axes3) plot(z);
title('IIR低通滤波后信号的波形'); sound(z); %回放滤波后的语音信号 axes(handles.axes4) plot(f,abs(X(1:n/2))); title('原始语音信号的频谱'); xlabel('Hz'); Z=fft(z);
axes(handles.axes5) plot(abs(Z(1:n/2)));
title('IIR低通滤波后信号的频谱'); xlabel('Hz');
37
课程设计说明书
% 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) %IIR 高通滤波器: fb = 5000; fc = 4800; fs = 22050; as = 15; ap = 1;
wb = fb*2*pi/fs; %将数字频率转化为数字角频率 wc = fc*2*pi/fs;
Wb = 2*fs*tan(wb/2); %数字角频率转化为模拟角频率 Wc = 2*fs*tan(wc/2);
[n,wn]=buttord(Wb,Wc,ap,as,'s'); %最小阶次为N的巴特沃兹低通滤波器 [b,a]=butter(n,wn,'high','s'); %截止频率为wn的高通模拟巴特沃兹滤波器 [bd,ad]=bilinear(b,a,fs); %将模拟滤波器转化为数字滤波器 [h,w]=freqz(bd,ad,1024); %数字滤波器的n点复频响应值 axes(handles.axes1)
plot(w*fs/(2*pi),20*log10(abs(h))); %复频特性曲线 grid;
title('IIR高通滤波器的幅频特性');
[x,fs,bits]=wavread('W.wav'); %读取语音信号 n=length(x); %输入语音信号的长度 f=fs*(0:(n/2-1))/n;
sound(x); %回放输入的语音信号 X=fft(x); %输入信号的傅里叶变换
z=filter(bd,ad,x); %对输入的语音信号进行滤波 Z=fft(z);
axes(handles.axes2) plot(x);
title('原始语音信号的波形'); axes(handles.axes3) plot(z);
title('IIR高通滤波后的信号波形');
38
课程设计说明书
sound(z); %回放滤波后的语音信号 axes(handles.axes4) plot(f,abs(X(1:n/2))); title('原始语音信号的频谱'); xlabel('Hz');
axes(handles.axes5) plot(f,abs(Z(1:n/2)));
title('IIR高通滤波后的信号频谱');
xlabel('Hz');
% 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) %IIR 带通滤波器: fc1=1000; fb1=1200; fc2=3200; fb2=3000; fs =8000; as =15; ap = 1;
wb =[fb1 fb2]*2*pi/fs; %将数字频率转化为数字角频率 wc =[fc1 fc2]*2*pi/fs;
Wb =2*fs*tan(wb/2); %数字角频率转化为模拟角频率 Wc =2*fs*tan(wc/2);
[n,wn]=buttord(Wb,Wc,ap,as,'s'); %最小阶次为N的巴特沃兹低通滤波器 [b,a]=butter(n,wn,'s'); %通带为wn的模拟带通滤波器
[bd,ad]=bilinear(b,a,fs); %将模拟带通滤波器转换为数字带通滤波器 [h,w]=freqz(bd,ad); %数字带通滤波器的n点复频响应值 axes(handles.axes1)
plot(w*fs/(2*pi),20*log10(abs(h)));
grid; %图上加坐标网络
title('IIR带通滤波器幅频特性'); [x,ft,bits]=wavread('W.wav'); %读取语音信号
39
课程设计说明书
n=length(x); %输入语音信号的长度 f=fs*(0:(n/2-1))/n; sound(x);
X=fft(x); %输入信号的傅里叶变换 z=filter(bd,ad,x); %对输入的语音信号进行滤波 Z=fft(z);
axes(handles.axes2) plot(x);
title('原始信号的波形'); axes(handles.axes3) plot(z);
title('IIR带通滤波后的信号波形');
sound(z);
axes(handles.axes4) plot(f,abs(X(1:n/2))); title('原始信号的频谱'); xlabel('Hz');
axes(handles.axes5) plot(f,abs(Z(1:n/2)));
title('IIR带通滤波后的信号频谱');
xlabel('Hz');
% 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) %FIR 低通滤波器: fb=1000;fc=1200;
Ap=1;As=15;Fs=22050;
ws=2*pi*fc/Fs; %求数字角频率 wp=2*pi*fb/Fs;
N=ceil(12*pi/(ws-wp)); %确定FIR低通滤波器的窗口长度N Wn=(fb+fc)/Fs; %求归一化截止频率
b=fir1(N,Wn,blackman(N+1)); % 得到截止频率为wc且满足线性相位条件的N阶FIR低通滤波器,窗函数为布莱克曼窗
40
共分享92篇相关文档