C語言的譜減法實現(xiàn)七_第1頁
C語言的譜減法實現(xiàn)七_第2頁
C語言的譜減法實現(xiàn)七_第3頁
C語言的譜減法實現(xiàn)七_第4頁
C語言的譜減法實現(xiàn)七_第5頁
已閱讀5頁,還剩12頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、C語言的譜減法實現(xiàn)七 C語言的譜減法實現(xiàn).txt18擁有誠實就舍棄了虛偽;擁有誠實就舍棄了無聊;擁有踏實就舍棄了浮躁不論是有意的丟棄還是意外的失去只要曾經(jīng)真實擁有在一些時候大度舍棄也是一種境界。C語言的譜減法實現(xiàn).txt12思念是一首詩讓你在普通的日子里讀出韻律來;思念是一陣雨讓你在枯燥的日子里濕潤起來;思念是一片陽光讓你的陰郁的日子里明朗起來。#include <stdio.h> #include <stdlib.h> #include <math.h> #define WL 256 / 窗長#define

2、10 / 預(yù)測系數(shù)#undef i #define i 3.1415926535897932384626434 #define I 3.1415926#define winsize 256#define temsize winsize/2#define buffsize winsize*10tyedef structdouble real;double img;comlex;unsigned int f=0;unsigned int c=0;comlex noisewinsize;double buff_rbuffsize;double buff_wbuffsize;double temtem

3、size;comlex xwinsize;comlex ywinsize;int hr=0;comlex Wwinsize;comlex W1winsize;double x_abswinsize;double y_abswinsize;double noise_abswinsize;void fft(comlex *x,int size_x,comlex *W); /*快速傅里葉變換*/void ifft(comlex *x,int size_x,comlex *W1);double angle(comlex a); /void add(comlex ,comlex ,comlex *);

4、/*復(fù)數(shù)加法*/void mul(comlex ,comlex ,comlex *); /*復(fù)數(shù)乘法*/void sub(comlex ,comlex ,comlex *); /*復(fù)數(shù)減法*/void change(comlex *x,int size_x); /*數(shù)組轉(zhuǎn)置*/double abs1(comlex a);void hamming(comlex hw);/*int ReadWaveFile( char*fn,int*fs,short *dat); int ReadWaveFile( char*fn,/ I: 文件名 int*fs,/ O: 文件大小 short*dat/ O: 語

5、音數(shù)據(jù) ) FILE*f; intdsize; if (f = foen(fn, "rb+") = NULL) frintf(stderr, "%s: No such file n", fn);return(-1); fseek(f, 0L, SEEK_END); dsize = ftell(f)/2; fseek(f, 0L, SEEK_SET); if (*dat = (short *)malloc(sizeof(short)*dsize) = NULL) frintf(stderr, "Memory

6、 Error n");return(-1); if (fread(*dat, sizeof(short), dsize, f) != (unsigned int)dsize) free(*dat); return(-1); fclose(f); *fs = dsize; return(0); */void hamming(comlex hw)double x;int i;for(i=0;i<WL;i+)double cos(x);x=2*i*i/(WL-1);hwi.real=hwi.real*(0.54-0.46*cos(x);/*32768; void ff

7、t(comlex *x,int size_x,comlex *W)int i=0,j=0,k=0,l=0,jk=0;comlex u,down,roduct;change(x,size_x);for(i=0;i<log(size_x)/log(2);i+) /*一級蝶形運算*/l=1<<i;for(j=0;j<size_x;j+= 2*l ) /*一組蝶形運算*/for(k=0;k<l;k+) /*一個蝶形運算*/jk=j+k;mul(xjk+l,Wsize_x*k/2/l,&am;roduct);u.real=xj

8、k.real+roduct.real;u.img=xjk.img+roduct.img;d own.real=xjk.real-roduct.real;down.img=xjk.img-roduct.img;xjk=u;xjk+l=down;/*變址計算將x(n)碼位倒置*/void change(comlex *x,int size_x)comlex tem;unsigned short i=0,j=0,k=0;double t;for(i=0;i<size_x;i+)k=i;j=0;t=(log(size_x)/log(2);while( (t-)>0 )j=j

9、<<1;j|=(k &am; 1);k=k>>1;if(j>i)tem=xi;xi=xj;xj=tem;void ifft(comlex *x,int size_x,comlex *W1)int i=0,j=0,k=0,l=0,jk=0;comlex u,down,roduct;change(x,size_x);for(i=0;i< log(size_x)/log(2) ;i+) /*一級蝶形運算*/l=1<<i;for(j=0;j<size_x;j+= 2*l

10、 ) /*一組蝶形運算*/ for(k=0;k<l;k+) /*一個蝶形運算*/jk=j+k;mul(xjk+l,W1size_x*k/2/l,&am;roduct);u.real=xjk.real+roduct.real;u.img=xjk.img+roduct.img;down.real=xjk.real-roduct.real;down.img=xjk.img-roduct.img;xjk=u;xjk+l=down;for(i=0;i<size_x;i+)xi.img=xi.img/size_x;xi.real=xi.real/size_x;doubl

11、e angle(comlex a)double m;m=tan(a.img/(a.real+0.00001);return m;void add(comlex a,comlex b,comlex *c)c->real=a.real+b.real;c->img=a.img+b.img;void mul(comlex a,comlex b,comlex *c)c->real=a.real*b.real - a.img*b.img;c->img=a.real*b.img + a.img*b.real;void sub(comlex a,coml

12、ex b,comlex *c)c->real=a.real-b.real;c->img=a.img-b.img;double abs1(comlex a)double t;t = (a.real)*(a.real)+(a.img)*(a.img);return (double) sqrt(t);/*主程序*/void main(void) double wavin7680, wavout7680;comlex S60256,voice256;comlex noise1256;double noise_foward15frame15256;double am_nois

13、e256;int fs=8000;double sum15256,voice_timedomain60256;double hase256;double am_signal256;double am_voice256;int frame_len=256,ste_len=128,n_frame=15,wav_length=7680,i,j,size_x=256,nifrm,ifrm;int kk=0,n=1;for(i=0;i<wav_length;i+)wavini=i;switch (fs) case 8000:frame_len=256;ste_len=128;break;c

14、ase 10000:frame_len=400;ste_len=200;break;case 12000:frame_len=480;ste_len=240;break;case 16000:frame_len=640;ste_len=320;break;case 44100:frame_len=1800;ste_len=900;break;default:frame_len=1800;ste_len=900;break;n_frame=(wav_length-frame_len)/ste_len+1; for(i=0;i<n_frame;i+) /分幀 int n1,n2; n

15、1=i*ste_len;n2=i*ste_len+frame_len;for(j=n1;j<=n2;j+)Sij-n1.real=wavinj;Sij-n1.img=0.0;for(i=0 ;i<winsize;i+) /初始化W數(shù)組Wi.real=cos(2*I/size_x*i);Wi.img=-1*sin(2*I/size_x*i); for(i=0;i<winsize;i+) /初始化W數(shù)組W1i.real=cos(2*I/size_x*i);W1i.img=sin(2*I/size_x*i); for(nifrm=0;nifrm&lt

16、;15;nifrm+)hamming(Snifrm);for(i=0;i<frame_len;i+) noise1i.real=Snifrmi.real;noise1i.img=0.0;fft(noise1,256,W); for( i=0;i<frame_len;i+)noise_foward15framenifrmi=abs1(noise1i); /noise_foward15frame保存前15幀的噪音短時傅立葉變換幅度結(jié)果 for(j=0;j<frame_len;j+)double w=0.0;for(i=0;i<15;i+)w=

17、w+noise_foward15frameij;am_noisej=w/15; for(ifrm=0;ifrm<n_frame;ifrm+) hamming(Sifrm);for( i=0;i<frame_len;i+)sumifrmi=Sifrmi.real; /sum_timedomain保存整個語音信號的時域和的結(jié)果fft(Sifrm,256,W); /快速傅里葉變換參數(shù)for(i=0;i<frame_len;i+)hasei=angle(Sifrmi); ; /保存這幀語音信號的傅立葉變換的結(jié)果的相位for(i=0;i<frame

18、_len;i+)am_signali=abs1(Sifrmi); / 保存這幀語音信號的傅立葉變換的結(jié)果的幅度 for( i=0;i<frame_len;i+)am_voicei=am_signali;/-am_noisei; /譜減 %用信號的幅度減去噪聲的幅度得到純凈語音的幅度for (i=0;i<frame_len;i+)if(am_voicei<0)am_voicei=0.0;for(i=0;i<frame_len;i+)voicei.real=am_voicei; /組合相位與幅度得到去噪后的純凈語音信號voicei.img=hasei*voicei.real;ifft(voice,frame_len,W1);for(i=0;i<frame_len;i+)voice_timedomainifrmi=voicei.real; / 求這幀純凈語音信號的傅立葉反變換的實

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論