基于MATLAB的线性调频信号小波变换及时频分析研究——实现清晰二维色图及多种时频图变换

张开发
2026/4/8 23:43:19 15 分钟阅读

分享文章

基于MATLAB的线性调频信号小波变换及时频分析研究——实现清晰二维色图及多种时频图变换
基于matlab实现的线性调频信号的小波变换可实现信号的时频分析有很清晰的二维色图。 包括连续小波变换和短时傅里叶变换时频图。 程序已调通可直接运行。线性调频信号Chirp Signal这玩意儿在雷达和声呐里特别常见它最带劲的特点就是频率随时间线性变化。今天咱们拿它开刀用MATLAB搞点时频分析的花活——连续小波变换CWT和短时傅里叶变换STFT两手抓看看谁更会看透信号。先整一个线性调频信号热热身fs 1000; % 采样率 t 0:1/fs:2; % 2秒时长 f0 20; f1 300; % 起始20Hz终止300Hz x chirp(t, f0, max(t), f1);这个chirp函数是MATLAB自带的调频信号生成器注意第三个参数是频率变化结束时间咱们这里直接取时间轴的最大值。生成的结果在时域上看起来就像个弹簧被拉开的形状越往后波形越密集。接下来咱们用短时傅里叶变换试试水window 128; % 汉明窗长度 noverlap 120; % 重叠采样点数 nfft 256; % FFT点数 figure spectrogram(x, hamming(window), noverlap, nfft, fs, yaxis) title(STFT时频图)这里有几个门道汉明窗能减少频谱泄露但窗口长度直接决定了时频分辨率。窗口越大频率分辨率越高但时间分辨率就越差这是个零和游戏。我故意把重叠点数设得很高这样滑动时过渡更平滑不过计算量也会上去。重头戏还是连续小波变换figure cwt(x, amor, fs) title(CWT时频图)短短三行代码暗藏玄机amor指定的是Morlet小波这种小波在时频域都有不错的分辨率。CWT不需要像STFT那样纠结窗口长度它通过尺度变化自动适配不同频率成分。不过要注意采样率参数必须给准确否则时频坐标会抽风。基于matlab实现的线性调频信号的小波变换可实现信号的时频分析有很清晰的二维色图。 包括连续小波变换和短时傅里叶变换时频图。 程序已调通可直接运行。跑出来的两张图对比特别有意思STFT的时频图像用刀切出来的豆腐块整整齐齐但棱角分明CWT的结果更像水墨画的渲染效果高频区域300Hz附近虽然时间分辨率下降但频率走向看得更连贯。想要更直观的对比可以加个三维可视化[cfs,frq] cwt(x, amor, fs); figure mesh(t, frq, abs(cfs)) axis tight view(0,90) colorbar这里用mesh画了个伪彩色图view(0,90)把三维图压成二维俯视图。注意频率轴是从高到低排列的这是小波变换的特性如果看着别扭可以用ylim([frq(end) frq(1)])翻转坐标。实际跑代码时会发现CWT比STFT吃资源得多特别是信号时间长的时候。这时候可以改用cwtfilterbank对象预先设置频率范围fb cwtfilterbank(SignalLengthnumel(x), SamplingFrequencyfs,... FrequencyLimits[f0 f150]); % 限制频率范围 cfs wt(fb, x);这么搞不仅能提速还能避免计算无用频段的数据。那个f150是个小技巧给频率上限留点余量防止信号高频成分被截断。最后说个坑MATLAB的cwt函数在2022版本之后改了参数顺序老代码可能会报错。如果遇到参数未识别的错误记得查查版本说明。时频分析这东西参数设置比算法本身更考验经验多摔几次跟头就摸出门道了。

更多文章