当前位置:编程学习 > Matlab >>

我这有个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程序哪里有错误,它只能输入一个参数,不能输入两个

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,