數字信號處理實驗(MATLAB)

1.語音信號處理

利用windous下的錄音機或其他軟件錄製一段自己的語音(規定:語音內容爲自己的名字,以wav格式保存,如wql.wav),時間控制再2秒之內,利用MATLAB提供的函數wavread(Matlab7.0版本,高版本採用audioread函數讀取音頻文件)對語音信號進行採樣,提供sound函數對語音信號進行回放。
[y,fs,nbits]=wavread(file),
採樣值放在向量y中,fs表示採樣頻率,nbits表示採樣位數。Wavread的更多用法請使用help命令自行查詢。
2)語音信號的頻譜分析
利用fft函數對信號進行頻譜分析
3)受白噪聲干擾的語音信號的產生與頻譜分析
①白噪聲的產生:
N1=sqrt(方差值)×randn(語音數據長度,2)(其中2表示2列,是由於雙聲道的原因)
然後根據語音信號的頻譜範圍讓白噪聲信號通過一個帶通濾波器得到一個帶限的白噪聲信號N2;
帶通濾波器的衝激響應爲:
hB(n)= 其中ωc1爲通帶濾波器的下截止頻率,ωc2爲通帶濾波器的上截止頻率。其中下截止頻率由每個人的語音信號的最高頻率確定
濾波器的長度N由濾波器的過渡帶確定,一般不宜太小(大於1000),α=(N-1)/2;
②信號y通過低通濾波器,得到信號爲x1
低通濾波器的衝激響應爲:
其中的ωc1與上面的帶通濾波器的下截止頻率一致,濾波器的長度N也於上面的帶通濾波器一致,α=(N-1)/2
③將N1加上x1得到一個受到噪聲污染的聲音信號
4)用IIR濾波器(採用雙線性法設計)對受污染語音信號進行濾波
5)比較濾波前後信號的波形與頻譜
6)回放濾波後的語音信號

程序:

clc;clear;close;
audioread('GJQ.wav');
[d,fs]=audioread('GJQ.wav');
sound(d,fs); //播放原聲音
plot(d)
y=audioread('GJQ.wav');
Yk=fft(y);
figure(1);plot(abs(Yk));title('原始信號頻譜');
M=2001; //濾波器長度
n=1:M;L=(M-1)/2;
wh=0.9;wl=0.3; //帶通信號上下限
h2=wh*sinc(wh*(n-L))-wl*sinc(wl*(n-L));
h=wl*sinc(wl*(n-L));
H2k=fft(h2);
Hk=fft(h);
figure(2);plot(abs(H2k));title('H2k');
figure(3);plot(abs(Hk));title('HK');
c=5.9;%噪聲的均方值要比語音信號的值大
N1=177151;%也可以通過求取length(y)直接得到N1
V=2;
x=sqrt(c)*randn(N1,V);%N1的長度取決於y的長度,數據長度與語音長度一致,V是維度,雙通道是2,單通道是1
Xk=fft(x);
figure(4),plot(abs(Xk));title('Xk');
s1=fftfilt(h,y);
Ns=fftfilt(h2,x);
Nk=fft(Ns);
figure(5);plot(abs(Nk));title('Nk'); //噪聲頻譜圖
y1=s1+Ns;
sound(y1,fs); //含噪音,比原聲音大
Y1k=fft(y1);
figure(6),plot(abs(Y1k));title('Y1k'); //加噪語音頻譜圖
s=fftfilt(h,y1);
Sk=fft(s);
figure(7),plot(abs(Sk)),title('Sk');
fp=4500;fss=6000;rp=2;rs=30;
wp1=2*pi*fp/fs;% 求出通帶數字角頻率wp1
wss1=2*pi*fss/fs;% 求出阻帶數字角頻率wss1
op1=2*fs*tan(wp1/2)  ;
os1=2*fs*tan(wss1/2)  ; %預畸變處理,求出模擬角頻率op1和os1
[N,wc]=buttord(op1,os1,rp,rs,'s') % 求出最小階數N和截止頻率wc
[z,p,k]=buttap(N);
[ba,aa]=zp2tf(z,p,k);  % 求出歸一化模擬濾波器的分子分母系數ba和aa
[b,a]=lp2lp(ba,aa,wc);  % 求出截止頻率爲wc的模擬濾波器的分子分母系數b和a
[bz,az]=bilinear(b,a,fs);
[H,f]=freqz(bz,az);
ma=20*log10(abs(H));mp=angle(H)*180/pi;
figure(8);
subplot(2,1,1);plot(f/pi,ma)
subplot(2,1,2);plot(f/pi,mp)
s2=filter(bz,az,y1);
S2k=fft(s2);
figure(9);plot(abs(S2k));title('S2k');
sound(s2,fs);//消噪後的

2.信號分析

研究採樣頻率fc和數據持續時間Tp與頻率分辨率的關係,首先給出不同的採樣頻率對於信號頻譜分析的影響,包括滿足採樣定理和不滿足採樣定理的情況下,信號頻譜的變換情況(至少2種數值的情況);其次選擇在滿足採樣定理的情況下,在一定的Tp情況下,f1和f2相差多少的時候可以分辨出來(至少3種數值情況);最後在f1和f2不變的情況下,選擇不同的Tp,看Tp在什麼情況下,不能分辨2個信號的頻譜(至少3種數值的情況),以上都可以與理論值相比較以驗證理論的正確。

fc=1000;Tp=1;
t=0:1/fc:Tp;
f1=100;f2=200;
x=sin(2*pi*f1*t)+cos(2*pi*f2*t);
XK=fft(x);
plot(abs(XK));title('tp=1')

改變各個參數
其次選擇在滿足採樣定理的情況下,在一定的Tp情況下,f1和f2相差多少的時候可以分辨出來(至少3種數值情況);
最後在f1和f2不變的情況下,選擇不同的Tp,看Tp在什麼情況下,不能分辨2個信號的頻譜(至少3種數值的情況),以上都可以與理論值相比較以驗證理論的正確。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章