http://www.chinavib.com/forum/thread-55042-1-82.html
语音信号分析:
wav文件的一次性傅里叶变换 :
选择一个wav文件作为分析的对象,利用一次性傅里叶变换对该文件的第一个声道进行频谱分析,并根据分析的结果进行信号重构,比较重构的信与原信号的区别,并说明原因.
参考程序:
%第一步选定声音文件
[x,fs,bits]=wavread('ding.wav');
%第二步选定声音文件的第一个声道
y=x(:,1);
subplot(311),plot(y);title('第一声道波形')
%求出其长度
L=size(y);
%求出傅立叶变换的最小点数,应大于数据长度
for i=1:100;
if
L<2^i;
break
end
end
N=2^i
%快速傅立叶变换求频谱
k=fft(y,N);
subplot(312),plot(abs(k));title('原频谱图')
%信号重构,求第一个主峰的频率及幅度
[m1,n]=max(abs(k));
f1=(n/N)*fs;
%求第二个主峰的频率及幅度
[m2,n]=max(abs(k(4000:5000)));
f2=((4000+n))/N*fs;
%信号重构,利用傅立叶变换的三角形式
t=[0:0.0001:1];
p=[sin(2*pi*f1*t)+sin(2*pi*f2*t)*(m2/m1)]*0.18;
subplot(313),plot(p);title(‘重构后的波形图')
sound(x,fs,bits);%听原声音
pause
%按任意键听重构后的声音
sound(p,10000);
以上是程序内容,不知是否正确,得出的声音明显感觉失真,请各位高手请教原因,最好有程序注释,以便理解……
谢谢……
---------------------------------
楼主又问: WAV文件的分段傅立叶分析
WAV文件的分段傅立叶分析
由于在实际的应用中,DSP处理的数据长度不可能很大,一般只有1000点左右,因此,当要处理的数据较长时,应采用分段傅立叶变换。
1)用1024点对ding.wav文件进行分段傅立叶变换,再重构与合成
2)用1024点对ding.wav文件进行分段傅立叶变换,再利用傅立叶反变换进行合成
请高手进行帮忙:理解各参数的意义;
完成WAV文件的另一个声道的分段傅立叶分析
[w,fs,bits]=wavread('ding.wav');
v=w(:,1);
k=length(v);
N=1024;
n=ceil(k/N);
z=zeros(n,N);
for i=1:n-1;
z(i,
=(fft(v((N*(i-1)+1):N*i),N))';
end
z(n,
=(fft(v(N*(n-1)+1:k),N))';
[x,y]=meshgrid(1:n,1:200);
figure(1),plot3(x,y,abs(z(:,1:200)'));
[m,i]=max(abs(z(:,1:200)'));
[m2,i2]=max(abs(z(:,100:200)'));
i2=i2+100;
t=[1:N]*fs;
for j=1:n;
u(N*j-N+1:N*j)=m(j)*sin(i(j)/N*fs*t)+m2(j)*sin(i2(j)/N*fs*t);
end
u1=u* max(v) / max(m);
figure(2),plot(u1(1:2:k));
for L=2:n;
u(N*L-N+1:N*L)=Linspace(m(L-1),m(L),N).*sin(i(L)/N*fs*t)+...
Linspace(m2(L-1),m2(j),N).*sin(i2(L)/N*fs*t);
end
u2=u* max(v) / max(m);
figure(3),plot(u2(1:2:k));
for s=1:n;
u(N*s-N+1:N*s)=fliplr(real(ifft(z(s,
,N)));
end
figure(4), plot(u);
sound(u1,fs,bits);
pause
sound(u2,fs,bits);
pause
sound(u,fs,bits);
pause
sound(w,fs,bits);
感觉程序有误,请高手解救,和上面是同一个内容的.
--------------------------------
1.直接FFT法得到谱峰参数很不准确
2.原始的信号恐怕也不止只有两个谱峰,仅用两个重构肯定有问题
3.采用这种非分段时重构,声音的非平稳性体现在何处?
-----------------------------
那具体应该考虑哪些呢
现在是考虑比较短的信号,主要是功能的实现问题,请教高手……
那些参数应该怎么理解?程序你看是不是有什么错误……
这是实验内容,我感觉似乎有些不对,但是又找不出来……
--------------------------------
1,FFT是适用于稳态信号的分析方法,而语音信号不是稳态信号,只是准稳态信号,因此用FFT处理语音信号是不合适的。一般对语音的分析都是分段处理,取每段长为20ms左右;
2,对于语音信号中最重要的信息是基频和共振峰,提取基频和共振峰有许多方法,而重构实际上便是语音的合成,在不少书中都介绍了基本的方法。
--------------------------------
麻烦推荐几本相关书籍,我现在资料比较欠缺……
我是新手,给点建议,指下方向……
现在主要是信号处理基础,用matlab实现……
--------------------------------
如果楼主是做语音信号数字处理的话,一方面要对语音的特点有所了解,还需掌握数字信号处理的方法。有关语音信号处理的书有:
赵力编著,语音信号处理,北京机械工业出版社
易克初等,语音信号处理,国防工业出版社
杨行俊等,语音信号数字处理,电子工业出版社
----------------------------
文章评论(0条评论)
登录后参与讨论