2.9 chirp Z变换
序列x(n)的Z变换为,我们将带入可以得到,定义,则,将以上运算转换为卷积运算,采用FFT进行运算。系统的单位冲激响应与频率随时间成线性增加的线性调频信号相似,因此称为Chrip Z变换,Chrip Z变换类似于移频,补零的DFT。
MATLAB提供了Chrip Z变换的函数czt,使用方法为y = czt(x,m,w,a),改函数计算由z=a*w.^(-(0:m-1))定义的z平面螺旋线上各点的在变换,a规定了起点,w规定了相邻点的比例,m规定了变换的长度,后三个变量默认值为a=1,w=exp(j*2*pi/m),m =length(x)。
例1 czt函数实现频谱细化(频谱细化就是对频谱中的某一频段进行局部放大)
clear all;
fs = 256;
N = 512;
nfft = 512;
n = 0:N-1;
n1 = fs*(0:nfft/2-1)/nfft;
x = sin(2*pi*100*n/fs)+sqrt(2)*cos(2*pi*120*n/fs)+sqrt(3)*sin(2*pi*145*n/fs);
subplot(221)
plot(n,x)
title('原始信号时域图');
xk = fft(x,nfft);
subplot(222)
plot(n1,abs(xk(1:(N/2))));
title('fft频谱')
f1 = 100;
f2 = 110;
m = 256;
w = exp(-j*2*pi*(f2-f1)/(fs*m));
a = exp(j*2*pi*f1/fs);
xk2 = czt(x,m,w,a);
h = 0:m-1;
f0 = (f2-f1)/m*h+100;
subplot(223)
plot(f0,abs(xk2));
title('czt细化频谱')
例2 比较czt函数和fft函数
clear all
fs = 2048;
N = 2048;
nfft = 2048;
n = 0:N-1;
n1 = fs*(0:nfft/2-1)/nfft;
x = sqrt(2)*sin(2*pi*198.56*n/fs)+sqrt(5)*cos(2*pi*103.42*n/fs)+sqrt(7)*sin(2*pi*145.23*n/fs);
subplot(311)
plot(n,x)
title('原始信号时域图');
y = fft(x,nfft);
subplot(312)
plot(n1,abs(y(1:N/2)));
title('fft')
f1 = 100;
f2 = 250;
m = 2048;
w = exp(-j*2*pi*(f2-f1)/(fs*m));
a = exp(j*2*pi*f1/fs);
z = czt(x,m,w,a);
h = 0:m-1;
f0 = (f2-f1)/m*h+100;
subplot(313)
plot(f0,abs(z));
title('czt')
参考资料——《MATLAB信号处理》沈再阳
百度百科
MATLAB帮助文档