筆記十是音頻信號(hào)處理,首先加載音頻信號(hào),分析其時(shí)頻域,然后加入單頻噪聲干擾,最后選擇濾波器進(jìn)行濾波處理。
一、音頻信號(hào)時(shí)頻域分析
1. 打開GUI
選擇Blank GUI,然后更改保存路徑
2. 點(diǎn)擊1個(gè)面板和2個(gè)坐標(biāo)區(qū),然后拖動(dòng)出來
3. 雙擊面板查看它的屬性
改變字體大小和顯示內(nèi)容
4. 再拖動(dòng)一個(gè)按鈕
5. 雙擊按鈕查看它的屬性
更改字體大小和顯示內(nèi)容
6. 右鍵打開文件按鈕,選擇查看回調(diào),點(diǎn)擊callback
注意:以下代碼中的部分變量使用global,是全局變量,這樣別的控件callback函數(shù)也能調(diào)用該變量。
global x; % 信號(hào)的時(shí)域
global Fs; % 信號(hào)的采樣頻率
global tl; % 信號(hào)的時(shí)域坐標(biāo)范圍
global x2; % 信號(hào)的時(shí)域
% 獲取文件的路徑和名稱,注意文件格式為.wav格式
[filename, pathname] = uigetfile('*.wav', '音頻信號(hào)路徑');
% 如果沒有選擇文件,則返回0,顯示未選擇文件
if isequal(filename,0)
disp('未選擇文件')
else
% 如果選擇了文件,保存文件的路徑
path = fullfile(pathname, filename); % 將文件的所處文件夾路徑和文件名拼接成文件路徑
[handles.x,handles.Fs]=audioread(path);% 將文件讀取出來,輸出信號(hào)的時(shí)域和采樣頻率并保存在handle中
x=handles.x; % 信號(hào)的時(shí)域
Fs=handles.Fs; % 信號(hào)的采樣頻率
axes(handles.axes1); % 將當(dāng)前繪圖區(qū)設(shè)置為axes1
tl=[0:1/Fs:(length(handles.x)-1)/Fs]; % 信號(hào)時(shí)域波形的坐標(biāo)范圍,間隔為采樣頻率的倒數(shù)
plot(tl,handles.x); % 繪制信號(hào)時(shí)域波形
axis([-inf inf -1.2 1.2]); % 坐標(biāo)軸的范圍
title('音頻信號(hào)時(shí)域波形'); % 標(biāo)題
xlabel('時(shí)間/s'); % 橫坐標(biāo)標(biāo)簽
ylabel('幅度'); % 縱坐標(biāo)標(biāo)簽
grid on; % 網(wǎng)格線打開
N=length(handles.x); % 信號(hào)的長(zhǎng)度
df=Fs/N; % 頻譜分辨率
w=[0:df:df*(N-1)] - Fs/2; % 頻譜范圍,-fs/2至fs/2
X=fft(handles.x); % 對(duì)信號(hào)做FFT
X=fftshift(X); % 將FFT之后的頻譜中心化,將0-fs頻譜轉(zhuǎn)換成-fs/2至fs/2頻譜
axes(handles.axes2); % 設(shè)置當(dāng)前坐標(biāo)區(qū)為axes2
plot(w,abs(X)/max(abs(X))); % 繪制信號(hào)頻譜
axis([-10000,10000,0,1]); % 坐標(biāo)軸范圍
title('音頻信號(hào)頻域波形'); % 標(biāo)題
xlabel('頻率/Hz'); % 橫坐標(biāo)標(biāo)簽
ylabel('歸一化幅度'); % 縱坐標(biāo)標(biāo)簽
grid on; % 打開網(wǎng)格線
x2=x;
end
7. 原始信號(hào)展示
二、播放音頻和關(guān)閉音頻
8. 拖動(dòng)兩個(gè)按鈕
9. 雙擊按鈕查看它的屬性
可以更改字體大小和顯示內(nèi)容
10. 右鍵播放音頻按鈕,選擇查看回調(diào),點(diǎn)擊callback
global x2; % 音頻信號(hào)
global Fs; % 信號(hào)的采樣頻率
sound(x2,Fs); % 播放音頻
11. 右鍵關(guān)閉音頻按鈕,選擇查看回調(diào),點(diǎn)擊callback
clear sound; % 關(guān)閉音頻
三、加入單頻干擾后的視頻域分析
13. 雙擊按鈕和可編輯文本
查看屬性并更改字體大小和顯示內(nèi)容
14. 右鍵加入單頻噪聲干擾按鈕,查看回調(diào),點(diǎn)擊callback
global x; % 信號(hào)時(shí)域波形
global Fs; % 信號(hào)采樣頻率
global tl; % 信號(hào)時(shí)域范圍
global x2; % 信號(hào)時(shí)域波形
axes(handles.axes1); % 將當(dāng)前坐標(biāo)區(qū)設(shè)置為axes1
t=0:1/Fs:(length(x)-1)/Fs; % 單頻干擾信號(hào)的時(shí)域范圍
Au=0.07; % 單頻干擾信號(hào)幅度
fn = get(handles.edit1,'string'); % 獲取輸入的單頻干擾頻率值
fn = str2double(fn); % 將string轉(zhuǎn)換成double型
noise=Au*cos(2*pi*fn*t)'; % 單頻干擾信號(hào)的波形,加轉(zhuǎn)置是因?yàn)橐纛l信號(hào)x是列向量,需要統(tǒng)一
x=x+noise; % 將音頻信號(hào)和單頻干擾相加
plot(tl,x); % 繪制加入噪聲后音頻信號(hào)時(shí)域波形
title('加入噪聲后時(shí)域波形'); % 標(biāo)題
xlabel('時(shí)間/s'); % 橫軸標(biāo)簽
ylabel('幅度'); % 縱軸標(biāo)簽
grid on; % 打開網(wǎng)格線
N=length(x); % 信號(hào)長(zhǎng)度
df=Fs/N; % 信號(hào)頻譜分辨率
w=[0:df:df*(N-1)] - Fs/2; % 信號(hào)頻率范圍
X=fft(x); % 對(duì)信號(hào)做FFT
X=fftshift(X); % 將0-fs頻譜搬移到-fs/2-fs/2
axes(handles.axes2); % 將當(dāng)前坐標(biāo)區(qū)設(shè)置為axes2
plot(w,abs(X)/max(abs(X))); % 繪制信號(hào)頻譜
axis([-10000,10000,0,1]); % 坐標(biāo)軸范圍
title('加入噪聲后頻域波形'); % 標(biāo)題
xlabel('頻率/Hz'); % 橫軸標(biāo)簽
ylabel('幅度'); % 縱軸標(biāo)簽
grid on; % 打開網(wǎng)格線
x2=x;
15. 單頻干擾信號(hào)展示
四、濾波后信號(hào)時(shí)頻域分析
16. 拖動(dòng)3個(gè)坐標(biāo)區(qū)、1個(gè)面板、4個(gè)單選按鈕、4個(gè)按鈕、2個(gè)靜態(tài)文本和2個(gè)可編輯文本
17 雙擊它們,更改字體大小和顯示內(nèi)容以及標(biāo)簽
面板
單選按鈕
按鈕
靜態(tài)文本
可編輯文本
18. 右鍵低通按鈕,查看回調(diào)函數(shù),點(diǎn)擊callback
global x; % 音頻信號(hào)
global Fs; % 采樣頻率
global tl; % 音頻信號(hào)時(shí)域范圍
global x2; % 音頻信號(hào)
x1=x;
fp = get(handles.edit2,'string'); % 截止頻率1
fp = str2double(fp)*2; % 將截止頻率轉(zhuǎn)換成double,然后乘以2,乘以2是為了歸一化化成數(shù)字頻率
if get(handles.radiobutton1,'value')% 如果選中了第一個(gè)單選按鈕,矩形窗按鈕
b2=fir1(30, fp/Fs, boxcar(31)); % 生成fir濾波器系統(tǒng)函數(shù)中分子多項(xiàng)式的系數(shù)
% fir1函數(shù)三個(gè)參數(shù)分別是階數(shù),數(shù)字截止頻率,濾波器類型
% 這里是生成了30階(31個(gè)抽頭系數(shù))的矩形窗濾波器
axes(handles.axes3); % 設(shè)置當(dāng)前坐標(biāo)區(qū)為axes3
[h,w]=freqz(b2, 1,512); % 生成fir濾波器的頻率響應(yīng)
% freqz函數(shù)的三個(gè)參數(shù)分別是濾波器系統(tǒng)函數(shù)的分子多項(xiàng)式的系數(shù),分母多項(xiàng)式的系數(shù)(fir濾波器分母系數(shù)為1)和采樣點(diǎn)數(shù)(默認(rèn))512
plot(w/pi*Fs/2,20*log(abs(h))); % 繪制濾波器的幅頻響應(yīng)
xlabel('頻率'); % 橫軸標(biāo)簽
ylabel('幅度'); % 縱軸標(biāo)簽
title('濾波器頻譜'); % 標(biāo)題
x1=fftfilt(b2,x1); % 對(duì)信號(hào)進(jìn)行濾波,x1是等待濾波的信號(hào),b2是fir濾波器的系統(tǒng)函數(shù)的分子多項(xiàng)式系數(shù)
elseif get(handles.radiobutton2,'value')% 如果選中了第二個(gè)單選按鈕,三角窗按鈕
b2=fir1(30, fp/Fs, triang(31)); % 生成fir濾波器系統(tǒng)函數(shù)中分子多項(xiàng)式的系數(shù)
% fir1函數(shù)三個(gè)參數(shù)分別是階數(shù),數(shù)字截止頻率,濾波器類型
% 這里是生成了30階(31個(gè)抽頭系數(shù))的三角窗濾波器
axes(handles.axes3); % 設(shè)置當(dāng)前坐標(biāo)區(qū)為axes3
[h,w]=freqz(b2, 1,512); % 生成fir濾波器的頻率響應(yīng)
% freqz函數(shù)的三個(gè)參數(shù)分別是濾波器系統(tǒng)函數(shù)的分子多項(xiàng)式的系數(shù),分母多項(xiàng)式的系數(shù)(fir濾波器分母系數(shù)為1)和采樣點(diǎn)數(shù)(默認(rèn))512
plot(w/pi*Fs/2,20*log(abs(h))); % 繪制濾波器的幅頻響應(yīng)
xlabel('頻率'); % 橫軸標(biāo)簽
ylabel('幅度'); % 縱軸標(biāo)簽
title('濾波器頻譜'); % 標(biāo)題
x1=fftfilt(b2,x1); % 對(duì)信號(hào)進(jìn)行濾波,x1是等待濾波的信號(hào),b2是fir濾波器的系統(tǒng)函數(shù)的分子多項(xiàng)式系數(shù)
elseif get(handles.radiobutton3,'value')% 如果選中了第三個(gè)單選按鈕,漢明窗按鈕
b2=fir1(30, fp/Fs, hamming(31)); % 生成fir濾波器系統(tǒng)函數(shù)中分子多項(xiàng)式的系數(shù)
% fir1函數(shù)三個(gè)參數(shù)分別是階數(shù),數(shù)字截止頻率,濾波器類型
% 這里是生成了30階(31個(gè)抽頭系數(shù))的漢明窗濾波器
axes(handles.axes3); % 設(shè)置當(dāng)前坐標(biāo)區(qū)為axes3
[h,w]=freqz(b2, 1,512); % 生成fir濾波器的頻率響應(yīng)
% freqz函數(shù)的三個(gè)參數(shù)分別是濾波器系統(tǒng)函數(shù)的分子多項(xiàng)式的系數(shù),分母多項(xiàng)式的系數(shù)(fir濾波器分母系數(shù)為1)和采樣點(diǎn)數(shù)(默認(rèn))512
plot(w/pi*Fs/2,20*log(abs(h))); % 繪制濾波器的幅頻響應(yīng)
xlabel('頻率'); % 橫軸標(biāo)簽
ylabel('幅度'); % 縱軸標(biāo)簽
title('濾波器頻譜'); % 標(biāo)題
x1=fftfilt(b2,x1); % 對(duì)信號(hào)進(jìn)行濾波,x1是等待濾波的信號(hào),b2是fir濾波器的系統(tǒng)函數(shù)的分子多項(xiàng)式系數(shù)
elseif get(handles.radiobutton4,'value')% 如果選中了第四個(gè)單選按鈕,凱撒窗按鈕
b2=fir1(30,fp/Fs, kaiser(31)); % 生成fir濾波器系統(tǒng)函數(shù)中分子多項(xiàng)式的系數(shù)
% fir1函數(shù)三個(gè)參數(shù)分別是階數(shù),數(shù)字截止頻率,濾波器類型
% 這里是生成了30階(31個(gè)抽頭系數(shù))的凱撒窗濾波器
axes(handles.axes3); % 設(shè)置當(dāng)前坐標(biāo)區(qū)為axes3
[h,w]=freqz(b2, 1,512); % 生成fir濾波器的頻率響應(yīng)
% freqz函數(shù)的三個(gè)參數(shù)分別是濾波器系統(tǒng)函數(shù)的分子多項(xiàng)式的系數(shù),分母多項(xiàng)式的系數(shù)(fir濾波器分母系數(shù)為1)和采樣點(diǎn)數(shù)(默認(rèn))512
plot(w/pi*Fs/2,20*log(abs(h))); % 繪制濾波器的幅頻響應(yīng)
xlabel('頻率'); % 橫軸標(biāo)簽
ylabel('幅度'); % 縱軸標(biāo)簽
title('濾波器頻譜'); % 標(biāo)題
x1=fftfilt(b2,x1); % 對(duì)信號(hào)進(jìn)行濾波,x1是等待濾波的信號(hào),b2是fir濾波器的系統(tǒng)函數(shù)的分子多項(xiàng)式系數(shù)
end;
axes(handles.axes4); % 設(shè)置當(dāng)前坐標(biāo)區(qū)為axes4
plot(tl,x1); % 繪制濾波后的時(shí)域波形
title('濾波后時(shí)域波形'); % 標(biāo)題
xlabel('時(shí)間/s'); % 橫軸標(biāo)簽
ylabel('幅度'); % 縱軸坐標(biāo)
axis([-inf,inf,-1.2,1.2]); % 坐標(biāo)軸范圍
N=length(x1); % 時(shí)域波形長(zhǎng)度
df=Fs/N; % 濾波后信號(hào)的頻譜分辨率
w=[0:df:df*(N-1)] - Fs/2; % 頻率范圍
X=fft(x1); % 對(duì)濾波后的信號(hào)做FFT
X=fftshift(X); % 將0-fs頻譜,轉(zhuǎn)換到-fs/2-fs/2頻譜
axes(handles.axes5); % 設(shè)置當(dāng)前坐標(biāo)區(qū)為axes4
plot(w,abs(X)/max(abs(X))); % 繪制頻譜
axis([-10000,10000,0,1]); % 坐標(biāo)軸范圍
title('濾波后頻譜'); % 標(biāo)題
xlabel('頻率/Hz'); % 橫軸標(biāo)簽
ylabel('幅度'); % 縱軸坐標(biāo)
grid on; % 打開網(wǎng)格線
x2=x1;
19. 同樣,更改高通,帶通和帶阻的callback函數(shù)
高通
global x; % 音頻信號(hào)
global Fs; % 采樣頻率
global tl; % 音頻信號(hào)時(shí)域范圍
global x2; % 音頻信號(hào)
x1=x;
fp = get(handles.edit2,'string'); % 截止頻率1
fp = str2double(fp)*2; % 將截止頻率轉(zhuǎn)換成double,然后乘以2,乘以2是為了歸一化化成數(shù)字頻率
if get(handles.radiobutton1,'value')% 如果選中了第一個(gè)單選按鈕,矩形窗按鈕
b2=fir1(30, fp/Fs,'high',boxcar(31)); % 生成fir濾波器系統(tǒng)函數(shù)中分子多項(xiàng)式的系數(shù)
% fir1函數(shù)四個(gè)參數(shù)分別是階數(shù)、數(shù)字截止頻率、類型、濾波器類型
% 這里是生成了30階(31個(gè)抽頭系數(shù))的矩形窗高通濾波器
axes(handles.axes3); % 設(shè)置當(dāng)前坐標(biāo)區(qū)為axes3
[h,w]=freqz(b2, 1,512); % 生成fir濾波器的頻率響應(yīng)
% freqz函數(shù)的三個(gè)參數(shù)分別是濾波器系統(tǒng)函數(shù)的分子多項(xiàng)式的系數(shù),分母多項(xiàng)式的系數(shù)(fir濾波器分母系數(shù)為1)和采樣點(diǎn)數(shù)(默認(rèn))512
plot(w/pi*Fs/2,20*log(abs(h))); % 繪制濾波器的幅頻響應(yīng)
xlabel('頻率'); % 橫軸標(biāo)簽
ylabel('幅度'); % 縱軸標(biāo)簽
title('濾波器頻譜'); % 標(biāo)題
x1=fftfilt(b2,x1); % 對(duì)信號(hào)進(jìn)行濾波,x1是等待濾波的信號(hào),b2是fir濾波器的系統(tǒng)函數(shù)的分子多項(xiàng)式系數(shù)
elseif get(handles.radiobutton2,'value')% 如果選中了第二個(gè)單選按鈕,三角窗按鈕
b2=fir1(30, fp/Fs, 'high',triang(31)); % 生成fir濾波器系統(tǒng)函數(shù)中分子多項(xiàng)式的系數(shù)
% fir1函數(shù)四個(gè)參數(shù)分別是階數(shù)、數(shù)字截止頻率、類型、濾波器類型
% 這里是生成了30階(31個(gè)抽頭系數(shù))的三角窗高通濾波器
axes(handles.axes3); % 設(shè)置當(dāng)前坐標(biāo)區(qū)為axes3
[h,w]=freqz(b2, 1,512); % 生成fir濾波器的頻率響應(yīng)
% freqz函數(shù)的三個(gè)參數(shù)分別是濾波器系統(tǒng)函數(shù)的分子多項(xiàng)式的系數(shù),分母多項(xiàng)式的系數(shù)(fir濾波器分母系數(shù)為1)和采樣點(diǎn)數(shù)(默認(rèn))512
plot(w/pi*Fs/2,20*log(abs(h))); % 繪制濾波器的幅頻響應(yīng)
xlabel('頻率'); % 橫軸標(biāo)簽
ylabel('幅度'); % 縱軸標(biāo)簽
title('濾波器頻譜'); % 標(biāo)題
x1=fftfilt(b2,x1); % 對(duì)信號(hào)進(jìn)行濾波,x1是等待濾波的信號(hào),b2是fir濾波器的系統(tǒng)函數(shù)的分子多項(xiàng)式系數(shù)
elseif get(handles.radiobutton3,'value')% 如果選中了第三個(gè)單選按鈕,漢明窗按鈕
b2=fir1(30, fp/Fs,'high',hamming(31)); % 生成fir濾波器系統(tǒng)函數(shù)中分子多項(xiàng)式的系數(shù)
% fir1函數(shù)四個(gè)參數(shù)分別是階數(shù)、數(shù)字截止頻率、類型、濾波器類型
% 這里是生成了30階(31個(gè)抽頭系數(shù))的漢明窗高通濾波器
axes(handles.axes3); % 設(shè)置當(dāng)前坐標(biāo)區(qū)為axes3
[h,w]=freqz(b2, 1,512); % 生成fir濾波器的頻率響應(yīng)
% freqz函數(shù)的三個(gè)參數(shù)分別是濾波器系統(tǒng)函數(shù)的分子多項(xiàng)式的系數(shù),分母多項(xiàng)式的系數(shù)(fir濾波器分母系數(shù)為1)和采樣點(diǎn)數(shù)(默認(rèn))512
plot(w/pi*Fs/2,20*log(abs(h))); % 繪制濾波器的幅頻響應(yīng)
xlabel('頻率'); % 橫軸標(biāo)簽
ylabel('幅度'); % 縱軸標(biāo)簽
title('濾波器頻譜'); % 標(biāo)題
x1=fftfilt(b2,x1); % 對(duì)信號(hào)進(jìn)行濾波,x1是等待濾波的信號(hào),b2是fir濾波器的系統(tǒng)函數(shù)的分子多項(xiàng)式系數(shù)
elseif get(handles.radiobutton4,'value')% 如果選中了第四個(gè)單選按鈕,凱撒窗按鈕
b2=fir1(30,fp/Fs,'high',kaiser(31)); % 生成fir濾波器系統(tǒng)函數(shù)中分子多項(xiàng)式的系數(shù)
% fir1函數(shù)四個(gè)參數(shù)分別是階數(shù)、數(shù)字截止頻率、類型、濾波器類型
% 這里是生成了30階(31個(gè)抽頭系數(shù))的凱撒窗高通濾波器
axes(handles.axes3); % 設(shè)置當(dāng)前坐標(biāo)區(qū)為axes3
[h,w]=freqz(b2, 1,512); % 生成fir濾波器的頻率響應(yīng)
% freqz函數(shù)的三個(gè)參數(shù)分別是濾波器系統(tǒng)函數(shù)的分子多項(xiàng)式的系數(shù),分母多項(xiàng)式的系數(shù)(fir濾波器分母系數(shù)為1)和采樣點(diǎn)數(shù)(默認(rèn))512
plot(w/pi*Fs/2,20*log(abs(h))); % 繪制濾波器的幅頻響應(yīng)
xlabel('頻率'); % 橫軸標(biāo)簽
ylabel('幅度'); % 縱軸標(biāo)簽
title('濾波器頻譜'); % 標(biāo)題
x1=fftfilt(b2,x1); % 對(duì)信號(hào)進(jìn)行濾波,x1是等待濾波的信號(hào),b2是fir濾波器的系統(tǒng)函數(shù)的分子多項(xiàng)式系數(shù)
end;
axes(handles.axes4); % 設(shè)置當(dāng)前坐標(biāo)區(qū)為axes4
plot(tl,x1); % 繪制濾波后的時(shí)域波形
title('濾波后時(shí)域波形'); % 標(biāo)題
xlabel('時(shí)間/s'); % 橫軸標(biāo)簽
ylabel('幅度'); % 縱軸坐標(biāo)
axis([-inf,inf,-1.2,1.2]); % 坐標(biāo)軸范圍
N=length(x1); % 時(shí)域波形長(zhǎng)度
df=Fs/N; % 濾波后信號(hào)的頻譜分辨率
w=[0:df:df*(N-1)] - Fs/2; % 頻率范圍
X=fft(x1); % 對(duì)濾波后的信號(hào)做FFT
X=fftshift(X); % 將0-fs頻譜,轉(zhuǎn)換到-fs/2-fs/2頻譜
axes(handles.axes5); % 設(shè)置當(dāng)前坐標(biāo)區(qū)為axes4
plot(w,abs(X)/max(abs(X))); % 繪制頻譜
axis([-10000,10000,0,1]); % 坐標(biāo)軸范圍
title('濾波后頻譜'); % 標(biāo)題
xlabel('頻率/Hz'); % 橫軸標(biāo)簽
ylabel('幅度'); % 縱軸坐標(biāo)
grid on; % 打開網(wǎng)格線
x2=x1;
帶通
global x; % 音頻信號(hào)
global Fs; % 采樣頻率
global tl; % 音頻信號(hào)時(shí)域范圍
global x2; % 音頻信號(hào)
x1=x;
fp = get(handles.edit2,'string'); % 截止頻率1
fp = str2double(fp)*2; % 將截止頻率轉(zhuǎn)換成double,然后乘以2,乘以2是為了歸一化化成數(shù)字頻率
fs = get(handles.edit3,'string'); % 截止頻率2
fs = str2double(fs)*2; % 將截止頻率轉(zhuǎn)換成double,然后乘以2,乘以2是為了歸一化化成數(shù)字頻率
if get(handles.radiobutton1,'value')% 如果選中了第一個(gè)單選按鈕,矩形窗按鈕
b2=fir1(30, [fp/Fs fs/Fs], boxcar(31)); % 生成fir濾波器系統(tǒng)函數(shù)中分子多項(xiàng)式的系數(shù)
% fir1函數(shù)三個(gè)參數(shù)分別是階數(shù),數(shù)字截止頻率,濾波器類型
% 這里是生成了30階(31個(gè)抽頭系數(shù))的矩形窗帶通濾波器
axes(handles.axes3); % 設(shè)置當(dāng)前坐標(biāo)區(qū)為axes3
[h,w]=freqz(b2, 1,512); % 生成fir濾波器的頻率響應(yīng)
% freqz函數(shù)的三個(gè)參數(shù)分別是濾波器系統(tǒng)函數(shù)的分子多項(xiàng)式的系數(shù),分母多項(xiàng)式的系數(shù)(fir濾波器分母系數(shù)為1)和采樣點(diǎn)數(shù)(默認(rèn))512
plot(w/pi*Fs/2,20*log(abs(h))); % 繪制濾波器的幅頻響應(yīng)
xlabel('頻率'); % 橫軸標(biāo)簽
ylabel('幅度'); % 縱軸標(biāo)簽
title('濾波器頻譜'); % 標(biāo)題
x1=fftfilt(b2,x1); % 對(duì)信號(hào)進(jìn)行濾波,x1是等待濾波的信號(hào),b2是fir濾波器的系統(tǒng)函數(shù)的分子多項(xiàng)式系數(shù)
elseif get(handles.radiobutton2,'value')% 如果選中了第二個(gè)單選按鈕,三角窗按鈕
b2=fir1(30, [fp/Fs fs/Fs], triang(31)); % 生成fir濾波器系統(tǒng)函數(shù)中分子多項(xiàng)式的系數(shù)
% fir1函數(shù)三個(gè)參數(shù)分別是階數(shù),數(shù)字截止頻率,濾波器類型
% 這里是生成了30階(31個(gè)抽頭系數(shù))的三角窗帶通濾波器
axes(handles.axes3); % 設(shè)置當(dāng)前坐標(biāo)區(qū)為axes3
[h,w]=freqz(b2, 1,512); % 生成fir濾波器的頻率響應(yīng)
% freqz函數(shù)的三個(gè)參數(shù)分別是濾波器系統(tǒng)函數(shù)的分子多項(xiàng)式的系數(shù),分母多項(xiàng)式的系數(shù)(fir濾波器分母系數(shù)為1)和采樣點(diǎn)數(shù)(默認(rèn))512
plot(w/pi*Fs/2,20*log(abs(h))); % 繪制濾波器的幅頻響應(yīng)
xlabel('頻率'); % 橫軸標(biāo)簽
ylabel('幅度'); % 縱軸標(biāo)簽
title('濾波器頻譜'); % 標(biāo)題
x1=fftfilt(b2,x1); % 對(duì)信號(hào)進(jìn)行濾波,x1是等待濾波的信號(hào),b2是fir濾波器的系統(tǒng)函數(shù)的分子多項(xiàng)式系數(shù)
elseif get(handles.radiobutton3,'value')% 如果選中了第三個(gè)單選按鈕,漢明窗按鈕
b2=fir1(30, [fp/Fs fs/Fs], hamming(31)); % 生成fir濾波器系統(tǒng)函數(shù)中分子多項(xiàng)式的系數(shù)
% fir1函數(shù)三個(gè)參數(shù)分別是階數(shù),數(shù)字截止頻率,濾波器類型
% 這里是生成了30階(31個(gè)抽頭系數(shù))的漢明窗帶通濾波器
axes(handles.axes3); % 設(shè)置當(dāng)前坐標(biāo)區(qū)為axes3
[h,w]=freqz(b2, 1,512); % 生成fir濾波器的頻率響應(yīng)
% freqz函數(shù)的三個(gè)參數(shù)分別是濾波器系統(tǒng)函數(shù)的分子多項(xiàng)式的系數(shù),分母多項(xiàng)式的系數(shù)(fir濾波器分母系數(shù)為1)和采樣點(diǎn)數(shù)(默認(rèn))512
plot(w/pi*Fs/2,20*log(abs(h))); % 繪制濾波器的幅頻響應(yīng)
xlabel('頻率'); % 橫軸標(biāo)簽
ylabel('幅度'); % 縱軸標(biāo)簽
title('濾波器頻譜'); % 標(biāo)題
x1=fftfilt(b2,x1); % 對(duì)信號(hào)進(jìn)行濾波,x1是等待濾波的信號(hào),b2是fir濾波器的系統(tǒng)函數(shù)的分子多項(xiàng)式系數(shù)
elseif get(handles.radiobutton4,'value')% 如果選中了第四個(gè)單選按鈕,凱撒窗按鈕
b2=fir1(30,[fp/Fs fs/Fs], kaiser(31)); % 生成fir濾波器系統(tǒng)函數(shù)中分子多項(xiàng)式的系數(shù)
% fir1函數(shù)三個(gè)參數(shù)分別是階數(shù),數(shù)字截止頻率,濾波器類型
% 這里是生成了30階(31個(gè)抽頭系數(shù))的凱撒窗帶通濾波器
axes(handles.axes3); % 設(shè)置當(dāng)前坐標(biāo)區(qū)為axes3
[h,w]=freqz(b2, 1,512); % 生成fir濾波器的頻率響應(yīng)
% freqz函數(shù)的三個(gè)參數(shù)分別是濾波器系統(tǒng)函數(shù)的分子多項(xiàng)式的系數(shù),分母多項(xiàng)式的系數(shù)(fir濾波器分母系數(shù)為1)和采樣點(diǎn)數(shù)(默認(rèn))512
plot(w/pi*Fs/2,20*log(abs(h))); % 繪制濾波器的幅頻響應(yīng)
xlabel('頻率'); % 橫軸標(biāo)簽
ylabel('幅度'); % 縱軸標(biāo)簽
title('濾波器頻譜'); % 標(biāo)題
x1=fftfilt(b2,x1); % 對(duì)信號(hào)進(jìn)行濾波,x1是等待濾波的信號(hào),b2是fir濾波器的系統(tǒng)函數(shù)的分子多項(xiàng)式系數(shù)
end;
axes(handles.axes4); % 設(shè)置當(dāng)前坐標(biāo)區(qū)為axes4
plot(tl,x1); % 繪制濾波后的時(shí)域波形
title('濾波后時(shí)域波形'); % 標(biāo)題
xlabel('時(shí)間/s'); % 橫軸標(biāo)簽
ylabel('幅度'); % 縱軸坐標(biāo)
axis([-inf,inf,-1.2,1.2]); % 坐標(biāo)軸范圍
N=length(x1); % 時(shí)域波形長(zhǎng)度
df=Fs/N; % 濾波后信號(hào)的頻譜分辨率
w=[0:df:df*(N-1)] - Fs/2; % 頻率范圍
X=fft(x1); % 對(duì)濾波后的信號(hào)做FFT
X=fftshift(X); % 將0-fs頻譜,轉(zhuǎn)換到-fs/2-fs/2頻譜
axes(handles.axes5); % 設(shè)置當(dāng)前坐標(biāo)區(qū)為axes4
plot(w,abs(X)/max(abs(X))); % 繪制頻譜
axis([-10000,10000,0,1]); % 坐標(biāo)軸范圍
title('濾波后頻譜'); % 標(biāo)題
xlabel('頻率/Hz'); % 橫軸標(biāo)簽
ylabel('幅度'); % 縱軸坐標(biāo)
grid on; % 打開網(wǎng)格線
x2=x1;
帶阻文章來源:http://www.zghlxwxcb.cn/news/detail-488632.html
global x; % 音頻信號(hào)
global Fs; % 采樣頻率
global tl; % 音頻信號(hào)時(shí)域范圍
global x2; % 音頻信號(hào)
x1=x;
fp = get(handles.edit2,'string'); % 截止頻率1
fp = str2double(fp)*2; % 將截止頻率轉(zhuǎn)換成double,然后乘以2,乘以2是為了歸一化化成數(shù)字頻率
fs = get(handles.edit3,'string'); % 截止頻率2
fs = str2double(fs)*2; % 將截止頻率轉(zhuǎn)換成double,然后乘以2,乘以2是為了歸一化化成數(shù)字頻率
if get(handles.radiobutton1,'value')% 如果選中了第一個(gè)單選按鈕,矩形窗按鈕
b2=fir1(30, [fp/Fs fs/Fs],'stop', boxcar(31)); % 生成fir濾波器系統(tǒng)函數(shù)中分子多項(xiàng)式的系數(shù)
% fir1函數(shù)三個(gè)參數(shù)分別是階數(shù),數(shù)字截止頻率,濾波器類型
% 這里是生成了30階(31個(gè)抽頭系數(shù))的矩形窗帶阻濾波器
axes(handles.axes3); % 設(shè)置當(dāng)前坐標(biāo)區(qū)為axes3
[h,w]=freqz(b2, 1,512); % 生成fir濾波器的頻率響應(yīng)
% freqz函數(shù)的三個(gè)參數(shù)分別是濾波器系統(tǒng)函數(shù)的分子多項(xiàng)式的系數(shù),分母多項(xiàng)式的系數(shù)(fir濾波器分母系數(shù)為1)和采樣點(diǎn)數(shù)(默認(rèn))512
plot(w/pi*Fs/2,20*log(abs(h))); % 繪制濾波器的幅頻響應(yīng)
xlabel('頻率'); % 橫軸標(biāo)簽
ylabel('幅度/dB'); % 縱軸標(biāo)簽
title('濾波器頻譜'); % 標(biāo)題
x1=fftfilt(b2,x1); % 對(duì)信號(hào)進(jìn)行濾波,x1是等待濾波的信號(hào),b2是fir濾波器的系統(tǒng)函數(shù)的分子多項(xiàng)式系數(shù)
elseif get(handles.radiobutton2,'value')% 如果選中了第二個(gè)單選按鈕,三角窗按鈕
b2=fir1(30, [fp/Fs fs/Fs],'stop', triang(31)); % 生成fir濾波器系統(tǒng)函數(shù)中分子多項(xiàng)式的系數(shù)
% fir1函數(shù)三個(gè)參數(shù)分別是階數(shù),數(shù)字截止頻率,濾波器類型
% 這里是生成了30階(31個(gè)抽頭系數(shù))的三角窗帶阻濾波器
axes(handles.axes3); % 設(shè)置當(dāng)前坐標(biāo)區(qū)為axes3
[h,w]=freqz(b2, 1,512); % 生成fir濾波器的頻率響應(yīng)
% freqz函數(shù)的三個(gè)參數(shù)分別是濾波器系統(tǒng)函數(shù)的分子多項(xiàng)式的系數(shù),分母多項(xiàng)式的系數(shù)(fir濾波器分母系數(shù)為1)和采樣點(diǎn)數(shù)(默認(rèn))512
plot(w/pi*Fs/2,20*log(abs(h))); % 繪制濾波器的幅頻響應(yīng)
xlabel('頻率'); % 橫軸標(biāo)簽
ylabel('幅度/dB'); % 縱軸標(biāo)簽
title('濾波器頻譜'); % 標(biāo)題
x1=fftfilt(b2,x1); % 對(duì)信號(hào)進(jìn)行濾波,x1是等待濾波的信號(hào),b2是fir濾波器的系統(tǒng)函數(shù)的分子多項(xiàng)式系數(shù)
elseif get(handles.radiobutton3,'value')% 如果選中了第三個(gè)單選按鈕,漢明窗按鈕
b2=fir1(30, [fp/Fs fs/Fs],'stop', hamming(31)); % 生成fir濾波器系統(tǒng)函數(shù)中分子多項(xiàng)式的系數(shù)
% fir1函數(shù)三個(gè)參數(shù)分別是階數(shù),數(shù)字截止頻率,濾波器類型
% 這里是生成了30階(31個(gè)抽頭系數(shù))的漢明窗帶阻濾波器
axes(handles.axes3); % 設(shè)置當(dāng)前坐標(biāo)區(qū)為axes3
[h,w]=freqz(b2, 1,512); % 生成fir濾波器的頻率響應(yīng)
% freqz函數(shù)的三個(gè)參數(shù)分別是濾波器系統(tǒng)函數(shù)的分子多項(xiàng)式的系數(shù),分母多項(xiàng)式的系數(shù)(fir濾波器分母系數(shù)為1)和采樣點(diǎn)數(shù)(默認(rèn))512
plot(w/pi*Fs/2,20*log(abs(h))); % 繪制濾波器的幅頻響應(yīng)
xlabel('頻率'); % 橫軸標(biāo)簽
ylabel('幅度/dB'); % 縱軸標(biāo)簽
title('濾波器頻譜'); % 標(biāo)題
x1=fftfilt(b2,x1); % 對(duì)信號(hào)進(jìn)行濾波,x1是等待濾波的信號(hào),b2是fir濾波器的系統(tǒng)函數(shù)的分子多項(xiàng)式系數(shù)
elseif get(handles.radiobutton4,'value')% 如果選中了第四個(gè)單選按鈕,凱撒窗按鈕
b2=fir1(30,[fp/Fs fs/Fs],'stop', kaiser(31)); % 生成fir濾波器系統(tǒng)函數(shù)中分子多項(xiàng)式的系數(shù)
% fir1函數(shù)三個(gè)參數(shù)分別是階數(shù),數(shù)字截止頻率,濾波器類型
% 這里是生成了30階(31個(gè)抽頭系數(shù))的凱撒窗帶阻濾波器
axes(handles.axes3); % 設(shè)置當(dāng)前坐標(biāo)區(qū)為axes3
[h,w]=freqz(b2, 1,512); % 生成fir濾波器的頻率響應(yīng)
% freqz函數(shù)的三個(gè)參數(shù)分別是濾波器系統(tǒng)函數(shù)的分子多項(xiàng)式的系數(shù),分母多項(xiàng)式的系數(shù)(fir濾波器分母系數(shù)為1)和采樣點(diǎn)數(shù)(默認(rèn))512
plot(w/pi*Fs/2,20*log(abs(h))); % 繪制濾波器的幅頻響應(yīng)
xlabel('頻率'); % 橫軸標(biāo)簽
ylabel('幅度/dB'); % 縱軸標(biāo)簽
title('濾波器頻譜'); % 標(biāo)題
x1=fftfilt(b2,x1); % 對(duì)信號(hào)進(jìn)行濾波,x1是等待濾波的信號(hào),b2是fir濾波器的系統(tǒng)函數(shù)的分子多項(xiàng)式系數(shù)
end;
axes(handles.axes4); % 設(shè)置當(dāng)前坐標(biāo)區(qū)為axes4
plot(tl,x1); % 繪制濾波后的時(shí)域波形
title('濾波后時(shí)域波形'); % 標(biāo)題
xlabel('時(shí)間/s'); % 橫軸標(biāo)簽
ylabel('幅度'); % 縱軸坐標(biāo)
axis([-inf,inf,-1.2,1.2]); % 坐標(biāo)軸范圍
N=length(x1); % 時(shí)域波形長(zhǎng)度
df=Fs/N; % 濾波后信號(hào)的頻譜分辨率
w=[0:df:df*(N-1)] - Fs/2; % 頻率范圍
X=fft(x1); % 對(duì)濾波后的信號(hào)做FFT
X=fftshift(X); % 將0-fs頻譜,轉(zhuǎn)換到-fs/2-fs/2頻譜
axes(handles.axes5); % 設(shè)置當(dāng)前坐標(biāo)區(qū)為axes4
plot(w,abs(X)/max(abs(X))); % 繪制頻譜
axis([-10000,10000,0,1]); % 坐標(biāo)軸范圍
title('濾波后頻譜'); % 標(biāo)題
xlabel('頻率/Hz'); % 橫軸標(biāo)簽
ylabel('歸一化幅度'); % 縱軸坐標(biāo)
grid on; % 打開網(wǎng)格線
x2=x1;
20. 結(jié)果展示
文章來源地址http://www.zghlxwxcb.cn/news/detail-488632.html
到了這里,關(guān)于MATLAB GUI筆記(十):音頻信號(hào)處理的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!