[x,fs]=audioread('红高粱九儿.wav'); s1=x(2500:2820); N=320; A=[]; for k=1:320 sum=0; for m=1:N-k+1 sum=sum+s1(m)*s1(m+k-1); end A(k)=sum end for k=1:320 A1(k)=A(k)/A(1); end f=zeros(1,320); n=1,j=1; while j<=320 f(1,j)=x(n)*[0.54-0.46*cos(2*pi*n/319)]; j=j+1; n=n+1; end B=[]; for k=1:320 sum=0; for m=1:N-k+1 sum=sum+s1(m)*s1(m+k-1); end B(k)=sum end for k=1:320 B1(k)=B(k)/B(1); end %画图 s2=s1/max(s1); figure(1) subplot(3,1,1) plot(s2) title('一帧语音信号'); xlabel('样点数'); ylabel('幅度'); axis([0,320,-1,1]); subplot(3,1,2) plot(A1) title('加矩形窗的自相关函数') xlabel('延时k') ylabel('自相关函数R(k)') axis([0,320,-1,1]); subplot(3,1,3) plot(B1) title('加汉明窗的自相关函数') xlabel('延时k') ylabel('自相关函数R(k)') axis([0,320,-1,1]);帮我解释一下代码
时间: 2024-04-05 11:31:00 浏览: 145
这段代码主要是对音频信号进行帧处理,加窗和自相关分析,并画出其自相关函数曲线。
首先,使用`audioread`函数读取名为"红高粱九儿.wav"的音频文件,将其存储到`x`变量中,返回采样率`fs`。
然后,从音频信号`x`中截取一段长度为`320`的数据,存储到变量`s1`中。接着,使用帧长为`320`,帧移为`160`的方式将音频信号进行分帧处理,即每次取`320`个采样点,相邻两帧之间重叠部分为`160`个采样点,将其进行加窗操作。这里使用的是汉明窗,加窗后的结果存储到变量`f`中。
接着,对每一帧数据进行自相关分析,分别采用加矩形窗和加汉明窗的方式计算其自相关函数,将结果存储到`A`和`B`变量中,并将其归一化处理后存储到`A1`和`B1`中。
最后,使用`subplot`函数在同一张图中画出三幅图像,分别表示原始语音信号、加矩形窗的自相关函数曲线和加汉明窗的自相关函数曲线,并对图像进行标注和调整。
需要注意的是,这段代码中自相关函数的计算方式和前面的代码有所不同,这里使用的是`for`循环嵌套的方式计算。同时,加窗操作是为了减少自相关函数的边缘效应,使得计算结果更加准确。
相关问题
[x,fs]=audioread('红高粱九儿.wav'); s1=x(2500:3140); b=s1; %窗长640,自相关运算取320个点。 b1=b(1:640); N=320; A=[]; for k=1:320 sum=0; for m=1:N sum=sum+b1(m)*b1(m+k-1); end A(k)=sum; end for k=1:320 A1(k)=A(k)/A(1); end %画图 figure(1) subplot(3,1,1) plot(A1); xlabel('延时k') ylabel('R(k)') legend('N=320') axis([0,320,-0.5,1]) %窗长320,自相关运算取160个点。 b2=b(1:300); N=150; A=[]; for k=1:150 sum=0; for m=1:N sum=sum+b2(m)*b2(m+k-1); end B(k)=sum; end for k=1:150 B1(k)=B(k)/B(1); end %画图 figure(1) subplot(3,1,2) plot(B1); xlabel('延时k') ylabel('R(k)') legend('N=150') axis([0,320,-0.5,1]) %窗长140,自相关运算取70个点。 b3=b(1:160); N=80; A=[]; for k=1:80 sum=0; for m=1:N sum=sum+b3(m)*b3(m+k-1); end C(k)=sum; end for k=1:80 C1(k)=C(k)/C(1); end %画图 figure(1) subplot(3,1,3) plot(C1); xlabel('延时k') ylabel('R(k)') legend('N=80') axis([0,320,-0.5,1])帮我解释这段代码
这段代码主要是对音频信号进行自相关分析,并画出其自相关函数曲线。
首先,使用`audioread`函数读取名为"红高粱九儿.wav"的音频文件,将其存储到`x`变量中,返回采样率`fs`。
然后,从音频信号`x`中截取一段长度为`640`的数据,存储到变量`s1`中。接着,使用窗口长度为`640`,自相关运算取`320`个点的方式计算其自相关函数,将结果存储到`A`变量中,并将其归一化处理后存储到`A1`中。
接着,使用窗口长度为`300`,自相关运算取`150`个点的方式计算其自相关函数,将结果存储到`B`变量中,并将其归一化处理后存储到`B1`中。
最后,使用窗口长度为`160`,自相关运算取`80`个点的方式计算其自相关函数,将结果存储到`C`变量中,并将其归一化处理后存储到`C1`中。
最后,使用`subplot`函数在同一张图中画出三条曲线,分别表示窗口长度为`640`、`300`和`160`时的自相关函数曲线,并对图像进行标注和调整。
阅读全文