• 线性调频Z变换(CZT)


    已知有限长序列x(n)的Z变换

    由上式中可知z=e^(s*Ts)=e^(a+jΩ)Ts=e^(a*Ts)*e^(jΩTs)=Ae^(jΩ*Ts),,s为拉普拉斯变量,A=e^(aTs)为实数,w=ΩTs,为一角度(角频率),现在对上式z的表示进行修改,令

    A。、W。为任意的正实数,给定A。、W。、θ。、φ。当r=0,1,…,∞时,可以得到z平面上的一个个点z0,z1,…,z∞,取这些点上的Z变换有

    这就是线性调频Z变换(CZT)的定义。

    在MATLAB中自带线性调频Z变换函数为czt,简介如下。
    名称:czt
    功能:线性调频Z变换
    调用格式:
    Y = czt(x)
    y = czt(x,m,w,a)
    说明:输入变量x是待处理的数据序列,长为N,m是CZT变换后的点数,默认时m=N,a和w分别为A=A。e^(jθ。)和W=W。e^(-jφ。),其中A。=W。=1,默认时A=1,W=e^(-j2π/m)。

    在实际应用中,我们经常是对频率在f1-f2的区间作CZT,所以相应的a和w分别设置为
    a= exp(j*2*pi* f1/fs);
    w=exp(-j*2*pi*(f2-f1)/(m*fs));

    做CZT时在单位圆上取的频率刻度间隔可以小于DFT时的频率间隔,这样是否可以细化频谱?只有满足一定的条件才能细化频谱,但不是能无条件地任意细化频谱。

    只有在单频率成分或者谱线之间相距较远的多频率成分时才可以进行细化分析,而当谱线之间发生
    严重的干涉现象时,谱峰产生迁移,频率、幅值和相位的误差都很大时想用CZT进行细化是不可能的,将会产生很大的误差。下表说明在不同的窗函数下CZT能细化不产生严重干涉的最小频率间隔。
    △f2是原始的分辨率,即△f2=fs/N;fs是采样频率;N是数据长度。

    不同窗函数对应的CZT不发生比较严重谱线干涉现象的最小频率间隔

    案例、设信号由两个正弦信号组成,频率分别为431.1Hz和433.3Hz,幅值分别为3和5,采样频率为2048Hz,数据长为4096。用FFT和CZT分别处理该信号并进行比较。程序如下:

    1. clear all; clc; close all;
    2. fs=2048; % 采样频率
    3. N=4096; % 信号长度
    4. df1=fs/N; % 分辨率
    5. n=1:N; % 样点索引
    6. t=(n-1)/fs; % 时间序列
    7. f1=431.1; f2=433.3; % 信号频率
    8. s=3*cos(2*pi*f1*t)+5*cos(2*pi*f2*t-0.4); % 构成信号序列
    9. wind=hanning(N)'; % 窗函数
    10. S=abs(fft(s.*wind))*4/N; % FFT并求幅值
    11. n1=1:N/2; % 正频率部分索引
    12. fre1=(n1-1)*fs/N; % FFT变换后的正频率刻度
    13. [K,V]=findpeakm(S(n1),'minpeakheight',1); % 寻找FFT频谱幅值的峰值并显示
    14. fprintf('%5.2f %5.2f %5.2f %5.2f\n',fre1(K(1)),V(1),fre1(K(2)),V(2))
    15. % CZT
    16. f0=428; DELf=0.01; M=N/4; % 设置CZT的参数f0,DELf和M
    17. n2=f0:DELf:f0+(M-1)*DELf; % 设置CZT中的频率区间
    18. A=exp(1j*2*pi*f0/fs); % 设置A和W
    19. W=exp(-1j*2*pi*DELf/fs);
    20. G=czt(s.*wind,M,W,A); % CZT变换
    21. GX=abs(G)*4/N; % 求出CZT后的频谱幅值
    22. [K,V]=findpeakm(GX,'minpeakheight',1); % 寻找CZT频谱幅值的峰值并显示
    23. fprintf('%5.2f %5.2f %5.2f %5.2f\n',n2(K(1)),V(1),n2(K(2)),V(2))
    24. % 作图
    25. subplot 211; plot((n1-1)*df1,S(n1),'k');
    26. title('FFT得到的全景幅值谱图')
    27. xlabel('频率/Hz'); ylabel('幅值');
    28. grid on; xlim([0 fs/2])
    29. subplot 212; plot(n2,abs(GX),'k');
    30. title('CZT得到的幅值谱图')
    31. xlabel('频率/Hz'); ylabel('幅值');
    32. grid on; xlim([428 438]); hold on
    33. stem(n2(K(5)),V(5),'k');
    34. stem(n2(K(7)),V(7),'k');
    35. set(gcf,'color','w');

    运行结果如下:

    虽然我们也把CZT说成是细化分析,但CZT和ZFFT本质是不同的,ZFFT是把发生干涉的频率成分先拉开再细化,而CZT只是对分析频带的局部放大。因此,对于发生严重干涉现象的频率成分的分离能力是有很大差别的:ZFFT经增大细化倍数、滤波和重抽样后能分离出不同频率成分;而CZT对谱峰重叠一起时是无法分离的。这告诉我们,在使用CZT时需要特别注意(同时也应注意到使用CZT和ZFFT时原始数据长度是不同的)。

    参考文献:MATLAB数字信号处理85个实用案例精讲——入门到进阶;宋知用(编著)

  • 相关阅读:
    在小程序中对flex布局的理解
    应用实践 | 10 亿数据秒级关联,货拉拉基于 Apache Doris 的 OLAP 体系演进
    KEIL 5.38的ARM-CM3/4 ARM汇编设计学习笔记10 - STM32的SDIO学习2
    ubuntu20 安装 cmake 3.27
    C++入门
    【云原生之Docker实战】部署docker管理平台shipyard
    webRtc架构与目录结构
    XML详解--语法、DTD、schema
    Win10垃圾清理?3个方法有效解决空间不足问题!
    亿级异构任务调度框架设计与实践
  • 原文地址:https://blog.csdn.net/qq_42233059/article/details/126482658