函数:
1.读取wav声音文件
读取wav声音文件,并将数据返回到向量y
[y,Fs]=audioread('xxx.wav');
Fs不用设置。wav文件需要在同一文件夹下
2.显示输出
disp(y);
disp('result');
disp(['tone freq = ',num2str(fc),', sampling frequency = ',num2str(Fs)]);
3.零极点
生成零极点图
zplane(b,a);
返回零点和极点
[z,p]=tf2zp(b,a);
4.幅频特性
返回有理分式表征的系统h的频谱:
[h,w]=freqz(b,a); %返回有理分式表征的系统h的频谱
绘制幅频特性:
plot(t,abs(h)); %幅度
title('Amplitude of system');
xlabel('\omega/\pi');
ylabel('Amplitude');
plot(t,angle(h)); %相位
title('Phase of system');
xlabel('\omega/\pi');
ylabel('Phase');
5.DFT
DFT逆变换:
%N:DFT的点数
%X:X(omega)
x=ifft(X,N);
6.系统响应
%b1:分子系数
%a1:分母系数
impz(a1,b1,N); %系统的冲激响应
stepz(a1,b1,N); %系统的阶跃响应
算法:
1.用2个N点DFT计算2N点DFT:
知识点:圆周平移的实现,x[an]的实现
N=64;
n=0:N-1;
k=0:2*N-1;
x=cos(14*pi*k/N)+0.5*cos(38*pi*k/N);
g=cos(14*pi*2*n/N)+0.5*cos(38*pi*2*n/N); %g[n]=x[2n]
h=cos(14*pi*(2*n+1)/N)+0.5*cos(38*pi*(2*n+1)/N); %g[n]=x[2n+1]
X1=fft(x,2*N);
G=fft(g,N);
H=fft(h,N);
%算法关键:
for m=1:N
X(m)=G(m)+exp(-1i*2*pi*(m-1)/(2*N))*H(m);
end
for m=(N+1):2*N %G[k]和H[k]实现一次圆周平移
X(m)=G(m-N)+exp(-1i*2*pi*(m-1)/(2*N))*H(m-N);
end