求助:求幅值时的困惑
将一段语音分帧后,求取每帧的幅值的过程是这样的吗先对每个采样点求幅值,再求和?
= wavread('F:\code\music\5.wav');
win=fs*20/1000;%
inc=win*0.5; %
f=enframe(x,hanning(win),inc);
yy=fft(f,[],2);
am=sum(abs(yy),2);
还是先对每个采样点求和,再求幅值呢?
am=abs(sum(yy,2));
相应的功率也存在同样的问题:
先对每个采样点求幅值,求功率,再求和?
= wavread('F:\code\music\5.wav');
win=fs*20/1000;%
inc=win*0.5; %
f=enframe(x,hanning(win),inc);
yy=fft(f,[],2);
am=sum(abs(yy).^2);
还是先对每个采样点求和,再求幅值,功率呢?
am=abs(sum(yy,2)).^2;
请知道的朋友指点
先谢过
[ 本帖最后由 zhangnan3509 于 2007-7-4 10:58 编辑 ] 可能是我的问题很简单
但是我真的没清楚
所以希望大家不啬指点
谢谢 原帖由 playtree 于 2006-12-9 18:34 发表
将一段语音分帧后,求取每帧的幅值的过程是这样的吗
先对每个采样点求幅值,再求和?
= wavread('F:\code\music\5.wav');
win=fs*20/1000;%
inc=win*0.5; %
f=enframe(x,hanning(win),inc);
yy=fft(f,[] ,2);
看了楼主的程序,想问二个问题:
1,对语音信号进行了分帧,为了了解每帧的特性,应对每帧进行FFT分析,但楼主为什么要对整个语音信号进行2维的分析--yy=fft(f,[] ,2)?
2,为什么要对幅值求和,有什么物理意义? 第一个问题:我是在分帧的基础上进行求fft的
第二个问题:我是想求每帧功率谱,所以想在清楚幅值的基础上,求取功率
谢谢 原帖由 playtree 于 2006-12-11 14:04 发表
第一个问题:我是在分帧的基础上进行求fft的
“在分帧的基础上进行求fft”,是对每一帧进行FFT,还是对整个f进行2维的FFT?对每一帧进行FFT实际上是stft,而2维的FFT又是语音的什么呢? 那现在简单的说:在分帧后,对每帧进行如何求其幅值呢?
因为在频谱流的计算时,就是要计算每帧之间的幅值差
谢谢 f是分帧以后的数据,可用yy=fft(f')来计算每一帧的FFT值。因为从wav文件读人的数据往往是一列数组,把列变成行的形式,故作了转置。在yy中是一个2维数组,不同行是代表不同的时间,一行是一组谱值。这样既可比较不同时间时的幅值情况,又能进一步求每一帧的功率密度和功率。 谢谢你的回答
但是有个问题
是yy=fft(f')还是yy=fft(f')‘呢
因为你说的yy中是一个2维数组,不同行是代表不同的时间,一行是一组谱值
所以我个人认为应该是yy=fft(f')‘,这样才能实现不同行是代表不同的时间,一行是一组谱值
因为原先t是一行代表一帧,yy=fft(f')转置后一列代表一帧,再yy=fft(f')‘转置才能是一行是一组谱值
不知道对否 谢谢你的回答
但是有个问题
是yy=fft(f')还是yy=fft(f')‘呢
因为你说的yy中是一个2维数组,不同行是代表不同的时间,一行是一组谱值
所以我个人认为应该是yy=fft(f')‘,这样才能实现不同行是代表不同的时间,一行是一组谱值
因为原先t是一行代表一帧,yy=fft(f')转置后一列代表一帧,再yy=fft(f')‘转置才能是一行是一组谱值
不知道对否 是可以这样。我稍修改了以上的程序,以求每帧幅值和及功率,并用imagesc函数作出谱图:
= wavread('1.wav');
win=fs*20/1000;%
inc=win*0.5; %
f=enframe(x,hanning(win),inc);
yy=fft(f')';
=size(yy);
n2=1:win/2+1;
ff=(n2-1)*fs/win;
imagesc(ff,1:n,abs(yy(:,n2)));
am=sum(abs(yy),2);
zb=abs(yy).^2;
bm=sum(zb,2); 谢谢你
页:
[1]