目錄
1 數字濾波器的概念
2 數字濾波器分類
2.1 經典濾波器與現代濾波器
2.2 無限脈沖響應濾波器和有限長脈沖響應濾波器
2.3 選頻濾波器和其他濾波器
3 濾波器的用途
4 數字濾波器的技術名額
5 數字濾波器設計方法
6 模拟濾波器的設計
6.1 常見的模拟濾波器
6.2 模拟低通濾波器的設計名額及逼近方法
7 巴特沃斯低通濾波器設計
8 設計巴特沃斯濾波器相關的matlab工具箱函數
9 基于Matlab的語音信号濾波器的設計與實作
9.1 原始語音信号的頻譜
9.2 添加高頻餘弦噪聲
9.3 巴特沃斯低通濾波器設計
9.4 利用巴特沃斯低通濾波器對含躁語音信号濾波
1、數字濾波器的概念

2、數字濾波器分類
2.1 經典濾波器與現代濾波器
2.2 無限脈沖響應濾波器和有限長脈沖響應濾波器
2.3 選頻濾波器和其他濾波器
3、濾波器的用途
4、數字濾波器的技術名額
5、數字濾波器設計方法
6、模拟濾波器的設計
6.1 常見的模拟濾波器
6.2 模拟低通濾波器的設計名額及逼近方法
7、巴特沃斯低通濾波器設計
8、設計巴特沃斯濾波器相關的matlab工具箱函數
9、基于Matlab的語音信号濾波器的設計與實作
9.1 原始語音信号的頻譜
1 clc;
2 clear;
3 close all;
4
5 [x1,fs,bits]=wavread(\'qq.wav\'); %讀取語音信号的資料,賦給變量x1
6 L=length(x1);
7 sound(x1,fs); %播放語音信号
8
9 N=L;
10 k=[0:N-1];
11 y1=fft(x1,N); %對信号做L個點FFT變換
12 figure(1);
13 subplot(2,1,1);
14 plot(k(1:20000),abs(y1(1:20000))); %做原始語音信号的FFT頻譜圖
15 title(\'原始語音信号FFT頻譜\');
16
17 f=fs*(0:N-1)/N;
18 subplot(2,1,2);
19 plot(f(1:20000),abs(y1(1:20000)));
20 title(\'原始語音信号頻譜\');
21 xlabel(\'f Hz\');ylabel(\'fuzhi\');
說明:程式第17行的解釋見“四、DFT的周期性”公式四。
說明:上圖是FFT變換的頻譜圖(數字頻率k),下圖是轉換成模拟頻率下的頻譜圖。
9.2 添加高頻餘弦噪聲
1 %給原始的語音信号加上一個高頻餘弦噪聲,頻率為5kHz。畫出加噪後的語音信号時域和頻譜圖,與原始信号對比,可以很明顯的看出差別。
2 t=[0:1/fs:(L-1)/fs]; %将所加噪聲信号的點數調整到與原始信号相同,構造采樣時間點(模拟時間)
3 Au=0.03; %噪聲幅度
4 d=[Au*cos(2*pi*8000*t)]\'; %噪聲為8kHz(2*pi*8000/(2*pi))的餘弦信号(模拟時間)
5 x2=x1+d;
6
7 figure(2);
8 subplot(2,1,1);
9 plot(x1); %做原始語音信号的時域圖形
10 title(\'原始語音信号\');xlabel(\'time n\');ylabel(\'fuzhi\');
11
12 sound(x2,fs); %播放加噪聲後的語音信号
13 subplot(2,1,2);
14 plot(x2); %做原始語音信号的時域圖形
15 title(\'加噪後的信号\');xlabel(\'time n\');ylabel(\'fuzhi\');
16
17 y2=fft(x2,N); %對信号做L個點FFT變換
18 figure(3);
19 subplot(2,1,1);
20 plot(k(1:20000),abs(y2(1:20000))); %做原始語音信号的FFT頻譜圖
21 title(\'加躁語音信号FFT頻譜\');
22
23 subplot(2,1,2);
24 plot(f(1:20000),abs(y2(1:20000)));
25 title(\'加躁語音信号頻譜\');
26 xlabel(\'f Hz\');ylabel(\'fuzhi\');
說明:程式前5行是構造高頻雜波信号,高頻噪聲信号也是按照fs為采樣頻率的,而且采樣點數也是L(與原始信号等長)。
說明:通過頻譜圖就可以看到所加噪聲信号是8Khz。
9.3 巴特沃斯低通濾波器設計
1 wp=2*pi*4000; %通帶邊界角頻率
2 ws=2*pi*5000; %阻帶邊界角頻率
3 Rp=1; %通帶最大衰減
4 Rs=15; %阻帶最小衰減
5 [NN,Wn]=buttord(wp,ws,Rp,Rs,\'s\'); %選擇濾波器的最小階數
6 [Z,P,K]=buttap(NN); %建立butterworth模拟濾波器
7 [Bap,Aap]=zp2tf(Z,P,K);
8 [b,a]=lp2lp(Bap,Aap,Wn);
9 [bz,az]=bilinear(b,a,fs); %用雙線性變換法實作模拟濾波器到數字濾波器的轉換
10
11 [H,W]=freqz(bz,az); %繪制頻率響應曲線
12 figure(4);
13 plot(W*fs/(2*pi),abs(H));
14 grid;
15 xlabel(\'頻率/Hz\');
16 ylabel(\'頻率響應幅度\');
17 title(\'Butterworth\');
說明:
(1)前4行是設定波特沃斯濾波器的名額
(2)第5行是根據前4行的參數計算濾波器的階數NN和3db截止頻率Wn。
(3)第6行根據階數NN計算巴特沃斯歸一化模拟低通原型濾波器系統函數的零、極點和增益因子。
(4)第9行将模拟濾波器轉換到數字濾波器,而bz、az分别是分子和分母的系數。
到此,有了bz、az,濾波器就構造出來了。
(5)第11行計算濾波器的頻率響應,freqz函數的使用見freqz()--matlab函數。
(6)第13行的f(模拟頻率)=W*fs/(2*pi)解釋見“2.2.2采樣後的離散傅裡葉頻譜”。
說明:可以看到巴特沃斯濾波器的特性是與之前設定的參數比對的。
9.4 利用巴特沃斯低通濾波器對含躁語音信号濾波
x3=filter(bz,az,x2);
figure(5);
subplot(2,1,1);
plot(t,x2); %畫出濾波前的時域圖
title(\'濾波前的時域波形\');
subplot(2,1,2);
plot(t,x3); %畫出濾波後的時域圖
title(\'濾波後的時域波形\');
sound(x3,fs); %播放濾波後的信号
y2=fft(x2,N); %對信号做L個點FFT變換
figure(6);
subplot(2,1,1);
plot(f(1:20000),abs(y2(1:20000)));
title(\'加躁語音信号頻譜\');
xlabel(\'f Hz\');ylabel(\'fuzhi\');
y2=fft(x3,N); %對信号做L個點FFT變換
subplot(2,1,2);
plot(f(1:20000),abs(y2(1:20000)));
title(\'去噪語音信号頻譜\');
xlabel(\'f Hz\');ylabel(\'fuzhi\');
說明:程式的第一行“x3=filter(bz,az,x2);”就是調用上邊構造的巴特沃斯低通濾波器對含躁信号x2濾波,其實就是數值運算。
說明:通過對比可以看到,8Khz的高頻噪聲确實是被濾掉了。
附:C調音符與頻率對照表
參考:基于Matlab的語音信号濾波器的設計與實作
西電《數字信号處理》第三版
freqz()--matlab函數