我这有个matlab程序 短时傅立叶变换的 希望有高手可以给加上详细注解
[y,Fs,bits]=wavread('D:\6.wav');
y=y(:,1);
sound(y,Fs,bits);
sigLength=length(y);
Fs=50000;
d=100;%连续段的重叠长度
L=512;
k=L-d;
t=fix(sigLength/k);
frame_length=512;
r=(rectwin(frame_length));
for a=1:t
n1=(L-d)*(a-1)+1;
n2=(L-d)*(a-1)+frame_length;
s=y(n1:n2);
sf=fft(s'.*r',512 );
X1(n1:n2)=sf(1:frame_length);
end
SIZE=8000;
Y=zeros(SIZE,1);
Y=20*log10(abs(X1));
figure,plot(Y(1:4000));title('频谱图');
figure,plot(y);title('时域图');
答案:[y,Fs,bits]=wavread('D:\6.wav'); %读取一段标题为6.wav的音频信号,该音频信号采样率为Fs,精度为bits,bits一般取值为8或者16位
y=y(:,1);
sound(y,Fs,bits); %播放该段音频
sigLength=length(y); %获取音频y的长度值
Fs=50000;%采样频率为50000Hz
d=100;%连续段的重叠长度
L=512;%傅立叶变换点数512
k=L-d;%每次变化取音频y的长度为k
t=fix(sigLength/k);%音频y可以分为t段来分别求取傅立叶变换
frame_length=512; %窗口长度为512
r=(rectwin(frame_length));%设定长度为512的矩形窗口
for a=1:t %开始做傅立叶变换,共做t次
n1=(L-d)*(a-1)+1;%获取第a次傅立叶变换的数据的起始值坐标
n2=(L-d)*(a-1)+frame_length;%获取第a次傅立叶变换数据的尾端数据值的坐标
s=y(n1:n2);%做第a次傅立叶变换的原始信号值
sf=fft(s'.*r',512 );%512点的傅立叶变换
X1(n1:n2)=sf(1:frame_length);%把傅立叶变换后的值赋给矩阵X1
end
SIZE=8000;
Y=zeros(SIZE,1); %生成一个8000X1的矩阵
Y=20*log10(abs(X1));%获取傅立叶变换的幅值的对数值
figure,plot(Y(1:4000));title('频谱图');%画出傅立叶变换后的频谱谱
figure,plot(y);title('时域图');%画出傅立叶变换前的原始音频时域图
上一个:这个matlab程序无法运行,请教高手指点。
下一个:帮我看下这个matlab程序哪里有错误,它只能输入一个参数,不能输入两个