欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報邀請碼778899分享:基于Matlab的語音濾波處理

柚子快報邀請碼778899分享:基于Matlab的語音濾波處理

http://yzkb.51969.com/

??????基于matlab的語音信號處理

摘要

利用所學(xué)習(xí)的數(shù)字信號處理知識,設(shè)計了一個有趣的音效處理系統(tǒng),首先設(shè)計了幾種不同的濾波器對聲音進行濾波處理,分析了時域和頻域的變化,比較了經(jīng)過濾波處理后的聲音與原來的聲音有何變化。同時設(shè)計實現(xiàn)了語音的倒放,變速播放,回響,音調(diào)轉(zhuǎn)換等處理效果,其中音調(diào)轉(zhuǎn)換部分使用了重新采樣改變基頻,再進行時長規(guī)整的算法。

基于MATLAB的語音信號處理

語音信號的采集

?錄制或者截取一段音樂,時間在1分鐘左右,存為.wav的文件。然后利用wavread對語音信號進行采樣。我們一共選擇了3段語音,其中

?d.wav 真心英雄(周華?。新暎?/p>

?man.wav我的歌聲里(自己錄制)(男聲)

?girl.wav看的最遠(yuǎn)的地方(張韶涵)(女聲)

語音信號的頻譜分析

使用matlab畫出語音信號的時域波形;然后對語音號進行快速傅里葉變換,得到信號的頻譜特性,畫出頻譜圖,分析頻率成分。這里我們分析的是d.wav,通過分析知道頻率分布在0—10KHz,主要分布在低頻。

數(shù)字濾波器設(shè)計

這里我們設(shè)計了4種濾波器對語音進行處理,分別為橢圓低通濾波,橢圓高通濾波,等波紋逼近法FIR帶通濾波器,雙線性變換法切比雪夫數(shù)字高通濾波器,繪制出相應(yīng)的幅度、相位譜圖,濾波后的波形、頻譜圖。

各濾波器的設(shè)計如下:

橢圓低通濾波器:fb=1 200 Hz,fc=1 400 Hz,As=100 dB,Ap=1 dB

橢圓高通濾波器:fc=4 800 Hz,fb=5 000 Hz As=100 dB,Ap=1 dB

等波紋逼近法設(shè)計FIR帶通濾波器

fb1=1200Hz,fb2=3000Hz,fc1=1000Hz,fc2=3000Hz,As=100dB,Ap=1dB

雙線性變換法切比雪夫數(shù)字高通濾波器

fc=4 800 Hz,fb=5 000 Hz As=100 dB,Ap=1 dB

????

????濾波處理后,我們用函數(shù)sound()可以對聲音進行回放,調(diào)用格式:sound(x,fs,bits);感覺濾波前后的聲音。語音的低頻部分沉穩(wěn),空間感較強;中頻部分音質(zhì)一般;高頻部分音質(zhì)非常尖銳,略微有尖音。此外中高頻的幅度都不大,回放時音量較低。

語音變速播放

改變語音的播放速度也就是改變采樣間隔(即改變了采樣頻率),但是這個頻實現(xiàn)率依然要在2f(Nyquist rate)之上,否則就會產(chǎn)生失真。

%變速-慢放%

w=0.9;

M=w*fs; ???%w>1為快放,w<1為慢放

sound(x,M,nbits);

語音倒放

????使用flipud()倒置語音矩陣,逆序輸出音頻即可。

回響效果

????回聲在時域上幅值減小了,頻域上的特征不變,只需要把原信號添加一個延時(delay)和對時域的幅度添加一個參數(shù).然后和原信號疊加即可獲得回響效果。 ?

實現(xiàn)男女聲轉(zhuǎn)換音效效果

????我們使用另外寫的voice(x,f)函數(shù)實現(xiàn)音調(diào)轉(zhuǎn)換,x為需要轉(zhuǎn)換的聲音,通過抽取插值更改采樣率來改變基頻,當(dāng)f>1時音調(diào)降低;f<1音調(diào)升高。然后再進行時長整合使語音文件恢復(fù)原來的時長。時長整合使用重疊疊加算法來實現(xiàn)。經(jīng)過我們試聽,轉(zhuǎn)換效果還是很好的。

總結(jié)體會

通過對聲音信號的濾波處理,比較其前后變化,感受到了濾波器在聲音信號處理當(dāng)中的作用,同時在實踐中掌握了濾波器的基本設(shè)計方法,加深了對各種類型的數(shù)字濾波器特性的理解。我們通過對聲音的各種變換,產(chǎn)生了多種不同的音效,也體會到了語音處理的魅力。在課程設(shè)計過程中,我們發(fā)現(xiàn)自己對Matlab的應(yīng)用還是不夠熟練,基礎(chǔ)不夠扎實,花了不少時間編寫調(diào)試。

代碼附錄

%讀取聲音信號%

[y,fs,nbits]=wavread('d'); %讀取聲音文件

x=y(:,1); ??????%讀入的y矩陣有兩列,取第1列

N=length(x);

n=0:N-1;

X= fft(x); ????????????????%傅里葉變換

Fs=2*fs; ??????????????????%2倍頻

T=1/Fs;

f=n/N*Fs; ????????????????

figure;

subplot(2,1,1);

plot(n,x); ????????????????%聲音的時域波形

title('原聲音的波形');

xlabel('t/s');

ylabel('magnitude');

subplot(2,1,2);

plot(f,abs(X)); ???????????%聲音的頻譜

title('原聲音的頻譜');

xlabel('frequency/Hz');

ylabel('magnitude');

% 濾波器設(shè)計%

% 橢圓低通濾波器%

fp1=1200;fs1=1400; ???????????????%低通濾波器通帶截止頻率1200Hz和阻帶截止頻率1400Hz

wp1=2*fp1/Fs; ws1=2*fs1/Fs;rp=1;as=100;

[N1,wp1]=ellipord(wp1,ws1,rp,as); %計算橢圓低通模擬濾波器的階數(shù)和通帶邊界頻率

[B,A]=ellip(N1,rp,as,wp1); ???????%計算低通濾波器模擬濾波器系統(tǒng)函數(shù)系數(shù)

y1=filter(B,A,x); ????????????????%濾波器軟件實現(xiàn)

% 低通濾波器繪圖部分%

?figure;

?freqz(B,A); ?????

?figure;

?subplot(2,1,1);

?t=n*T;

?plot(t,y1);

?xlabel('t/s');ylabel('magnitude');title('低通濾波后的波形');

?axis([0,t(end),min(y1),1.2*max(y1)])%坐標(biāo)范圍

?subplot(2,1,2);

?plot(f,abs(fft(y1)));

%橢圓高通濾波器%

?fp2=4800;fs2=5000; ?????????????????%高通濾波器通帶截止頻率5000Hz和阻帶截止頻率4800Hz

?wp2=2*fp2/Fs; ws2=2*fs2/Fs;rp=1;as=100;

?[N2,wp2]=ellipord(wp2,ws2,rp,as); ???????

?[B2,A2]=ellip(N2,rp,as,wp2,'high'); ?%計算高通濾波器模擬濾波器系統(tǒng)函數(shù)系數(shù)

?y2=filter(B2,A2,x); ???????????????????%濾波器軟件實現(xiàn)

% 高通濾波器繪圖部分%

?figure;

?freqz(B2,A2);

?figure;

?subplot(2,1,1);

?t=n*T;

?plot(t,y2);

?xlabel('t/s');ylabel('magnitude');title('高通濾波后的波形');

?axis([0,t(end),min(y2),1.2*max(y2)])

?subplot(2,1,2);

?plot(f,abs(fft(y2)));

%等波紋逼近法設(shè)計FIR?guī)V波器及濾波

[I,fs,nbits]=wavread('d');

y=I(:,1);

fp1=1200;fp2=3000;fc1=1000;fc2=3200;FS=2*fs;rp=1;rs=100;

f=[fc1,fp1,fp2,fc2];

m=[0,1,0];

dat1=(10^(rp/20)-1)/(10^(rp/20)+1);dat2=10^(-rs/20);

rip=[dat2,dat1,dat2];

[M,fo,mo,w]=remezord(f,m,rip,FS);

M=M+1;

hn=remez(M,fo,mo,w);

figure(1);

freqz(hn);

Y=fft(y);

y1=fftfilt(hn,y); ??????%用remez設(shè)計的濾波器進行濾波

Y1=fft(y1);

n=0:length(y)-1;

figure(2);

subplot(221);plot(y);title('未濾波語音波形');

subplot(222);plot(y1);title('等波紋逼近法濾波后語音波形');

subplot(223);plot(n,Y);title('未濾波語音頻譜');

subplot(224);plot(n,Y1);title('等波紋逼近法濾波后語音頻譜');

sound(y1,fs,nbits); ???????????%濾波后語音回放

%cheby1設(shè)計模擬高通濾波器再經(jīng)雙線性變換法設(shè)計成數(shù)字高通濾波器

fp=5000;fc=4800;rp=1;rs=100;FS=2*fs;

wpz=2*pi*fp/FS;wsz=2*pi*fc/FS;

wp=2*tan(wpz/2)*FS;ws=2*tan(wsz/2)*FS; %預(yù)畸校正轉(zhuǎn)換指標(biāo)

[N,wpo]=cheb1ord(wp,ws,rp,rs,'s');

[BH,AH]=cheby1(N,rp,wpo,'high','s');

[Bz,Az]=bilinear(BH,AH,FS);

w=0:0.01*pi:pi;

[h,w]=freqz(Bz,Az,w);

plot(w/pi,20*log(abs(h)),'k');axis([0,1,-800,100]);

xlabel('w/pi');ylabel('幅度/dB');grid;

title('cheby1數(shù)字高通濾波器');

Y=fft(y);

y1=filter(Bz,Az,y); ??????????????

Y1=fft(y1);

n=0:length(y)-1;

figure(2);

subplot(221);plot(y);title('未濾波語音波形');

subplot(222);plot(y1);title('cheby濾波后語音波形');

subplot(223);plot(n,Y);title('未濾波語音頻譜');

subplot(224);plot(n,Y1);title('cheby濾波后語音頻譜');

sound(y1,fs,nbits); ??????????%濾波后語音回放

%播放聲音%

sound(x,fs,nbits); ????%原聲

sound(5*y1,fs,nbits); ?%低通

sound(5*y2,fs,nbits); ?%高通

%變速-慢放%

w=0.9;

M=w*fs; ???%w>1為快放,w<1為慢放

sound(x,M,nbits);

%語音倒放%

y0=flipud(x);

sound(y0);

%回聲%

z=[zeros(5000,1);x]; ????%延時5000個點

x1=[x;zeros(5000,1)]; ???%使原聲音長度與延時后相等

y1=x1+0.4*z; ????????????%原聲+延時衰減

figure;

plot(y1);

title('加入回聲的波形');

sound(5*y1,fs,nbits);

%調(diào)用函數(shù)voice()實現(xiàn)音調(diào)轉(zhuǎn)換%

%男聲轉(zhuǎn)換為女聲%

[y,fs,nbits]=wavread('man'); %讀取聲音文件

x=y(:,1); ????%讀入的y矩陣有兩列,取第1列

y1=voice(x,0.71); ????%調(diào)整voice()第2個參數(shù)轉(zhuǎn)換音調(diào),>1降調(diào),<1升調(diào),y1為x轉(zhuǎn)換后的聲音

N=length(x); M=length(y1);

n=0:N-1; m=0:M-1;

X= fft(x); ???Y=fft(y1); ?%傅里葉變換

Fs=2*fs; ??????????????????%2倍頻

T=1/Fs; T1=1/Fs*0.71;

f=n/N*Fs; ??f1=m/M*Fs/0.71;

t=n*T; t1=m*T1;

figure;

subplot(2,1,1);

plot(t,x);

?xlabel('t/s');ylabel('magnitude');title('轉(zhuǎn)換前的波形');

subplot(2,1,2);

plot(t1,y1);

?xlabel('t/s');ylabel('magnitude');title('轉(zhuǎn)換后的波形');

figure;

subplot(2,1,1);

plot(f,abs(X)); ??????????

?xlabel('frequency/Hz');ylabel('magnitude');title('轉(zhuǎn)換前的頻譜');

subplot(2,1,2);

plot(f1,abs(Y)); ??????????

?xlabel('frequency/Hz');ylabel('magnitude');title('轉(zhuǎn)換后的頻譜');

sound(y1,fs,nbits);

%女聲轉(zhuǎn)換為男聲%

[y,fs,nbits]=wavread('girl'); %讀取聲音文件

x=y(:,1); ????%讀入的y矩陣有兩列,取第1列

sound(voice(x,1.3),fs,nbits);

%調(diào)整voice()第2個參數(shù)轉(zhuǎn)換音調(diào),>1降調(diào),<1升調(diào)

function?Y=voice(x,f)

%更改采樣率使基頻改變 f>1降低;f<1升高

f=round(f*1000);

d=resample(x,f,1000);

%時長整合使語音文件恢復(fù)原來時長

W=400;

Wov=W/2;

Kmax=W*2;

Wsim=Wov;

xdecim=8;

kdecim=2; X=d';

F=f/1000;

Ss =W-Wov;

xpts = size(X,2);

ypts = round(xpts / F);

Y = zeros(1, ypts);

xfwin = (1:Wov)/(Wov+1);

ovix = (1-Wov):0; newix = 1:(W-Wov);

simix = (1:xdecim:Wsim) - Wsim;

padX = [zeros(1, Wsim), X, zeros(1,Kmax+W-Wov)];

Y(1:Wsim) = X(1:Wsim); lastxpos = 0; km = 0; ????

for?ypos = Wsim:Ss:(ypts-W) ??????

????xpos = round(F * ypos); ????????

????kmpred = km + (xpos - lastxpos); ????????

????lastxpos = xpos; ???????

????if?(kmpred <= Kmax) ???????????

????????km = kmpred; ???????

????else

????????ysim = Y(ypos + simix); ????????????

????????rxy = zeros(1, Kmax+1); ????????????

????????rxx = zeros(1, Kmax+1); ????????????

????????Kmin = 0; ???????????

????????for?k = Kmin:kdecim:Kmax ????????????????

????????????xsim = padX(Wsim + xpos + k + simix); ????????????????

????????????rxx(k+1) = norm(xsim); ????????????????

????????????rxy(k+1) = (ysim * xsim'); ????????????

????????end

????????Rxy = (rxx ~= 0).*rxy./(rxx+(rxx==0)); ???????????

????????km = min(find(Rxy == max(Rxy))-1); ????????

????end

????xabs = xpos+km;

????Y(ypos+ovix) = ((1-xfwin).*Y(ypos+ovix)) + (xfwin.*padX(Wsim+xabs+ovix)); ???????

????Y(ypos+newix) = padX(Wsim+xabs+newix); ????

end

end

柚子快報邀請碼778899分享:基于Matlab的語音濾波處理

http://yzkb.51969.com/

相關(guān)鏈接

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19606518.html

發(fā)布評論

您暫未設(shè)置收款碼

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機訪問

文章目錄