非平稳信号的频谱分析方法---(短时傅立叶变换)
2017-01-29 20:17
435 查看
非平稳信号又称时变信号。对这一类信号,其一阶、二阶统计量和功率谱的估计显然不能简单的使用平稳信号的估计方法,必须考虑它们的时变因素。
基本原理
对非平稳信号,人们希望能有一种分析方法把时域分析和频域分析结合起来,即找到一个二维函数,它既能反映信号的频率内容,也能反映出该频率内容随时间变化的规律。研究这一问题的信号处理理论称为信号的联合时频分布。其中最重要的是以Cohen类为代表的双线性时频分布,此分布可表示为
式中
是一个二维的窗函数,给定不同的窗函数可以得到不同的时频分布。在上式中x(t)出现了两次,且是相乘的形式,这一特点称为双线性。
若
式中w是一个一维的窗函数,则(1)式可以简化成如下的谱图
式中
称为信号x(t)的短时傅里叶变换,它反映了信号的频谱随时间和频率的分布。
Matlab仿真分析
生成的信号两个LFM信号,一个频率随时间由小变大,另一个由大变小,中心频率都为150KHz。
Matlab代码为:
f0 = 150e3; %定义LFM信号的中心频率
d_f = 100e3; %定义LFM信号的频率变化大小
fs = 5*f0; %定义采样率
points = 2^15; %采样点数
SNR = 40; %信噪比
nTs = (0:points-1)/fs;
Delta_f = (0:points-1)*fs/points;
%生成LFM信号
signal = sin(2*pi*(f0 + (d_f*fs)/(2*points)*(nTs - points/(2*fs))).*(nTs - points/(2*fs))) + ... %频率由小变大
sin(2*pi*(f0 + (-d_f*fs)/(2*points)*(nTs - points/(2*fs))).*(nTs - points/(2*fs))); %频率由大变小
%加入一定功率的白噪声
signal_noise = signal + 10^(-SNR/20)*randn(1,points);
运行一下得到如下图:
调整一下得到如下的俯视图
基本原理
对非平稳信号,人们希望能有一种分析方法把时域分析和频域分析结合起来,即找到一个二维函数,它既能反映信号的频率内容,也能反映出该频率内容随时间变化的规律。研究这一问题的信号处理理论称为信号的联合时频分布。其中最重要的是以Cohen类为代表的双线性时频分布,此分布可表示为
式中
是一个二维的窗函数,给定不同的窗函数可以得到不同的时频分布。在上式中x(t)出现了两次,且是相乘的形式,这一特点称为双线性。
若
式中w是一个一维的窗函数,则(1)式可以简化成如下的谱图
式中
称为信号x(t)的短时傅里叶变换,它反映了信号的频谱随时间和频率的分布。
Matlab仿真分析
生成的信号两个LFM信号,一个频率随时间由小变大,另一个由大变小,中心频率都为150KHz。
Matlab代码为:
f0 = 150e3; %定义LFM信号的中心频率
d_f = 100e3; %定义LFM信号的频率变化大小
fs = 5*f0; %定义采样率
points = 2^15; %采样点数
SNR = 40; %信噪比
nTs = (0:points-1)/fs;
Delta_f = (0:points-1)*fs/points;
%生成LFM信号
signal = sin(2*pi*(f0 + (d_f*fs)/(2*points)*(nTs - points/(2*fs))).*(nTs - points/(2*fs))) + ... %频率由小变大
sin(2*pi*(f0 + (-d_f*fs)/(2*points)*(nTs - points/(2*fs))).*(nTs - points/(2*fs))); %频率由大变小
%加入一定功率的白噪声
signal_noise = signal + 10^(-SNR/20)*randn(1,points);
N = 2^8; %截取信号片段点数 window = hanning(N); %窗函数类型 Noverlap = N - N/2; %相邻两段之间重叠的点数 [S,F,T] = specgram(signal_noise,N,fs,window,Noverlap); abs_S = abs(S); max_abs_S = max(max(abs_S)); abs_S = abs_S/max_abs_S; log10_abs_S = 20*log10(abs_S); [tt,ff] = meshgrid(T,F/1000); figure; surf(tt,ff,log10_abs_S); xlabel('时间/s'); ylabel('频率KHz'); zlabel('归一化功率谱P(w,t)/dB'); string = ['短时傅里叶变换,采样点数=',num2str(points),',LFM信号中心频率f0=',num2str(f0/1000),... 'KHz,信号频率变化量d_f=',num2str(d_f/1000),'KHz,采样率fs=',num2str(fs/1000),'KHz,信噪比SNR=',... num2str(SNR),'dB']; title(string);
运行一下得到如下图:
调整一下得到如下的俯视图
相关文章推荐
- 开关电源主要有小信号与大信号分析两种建模方法
- 算法--傅里叶变换,非周期信号频谱分析,周期信号的功率谱
- 用Unity3D内部频谱分析方法做音乐视觉特效的原理说明
- 三极管小信号电路快速分析方法
- 离散信号频谱分析
- 基于信号完整性分析的高速数字PCB 的设计方法
- 第21章 信号频谱分析
- 用MATLAB对信号做频谱分析
- Matlab信号提取、频谱分析、滤波、阈值设定、寻找极值点
- matlab 频谱分析方法总结
- 基于matcom的仿真信号采集与频谱分析
- 如何采用fft分析信号的频谱
- 连续信号在有限区间上频谱分析实例、实验
- 正余弦信号的DFT频谱分析
- MATLAB信号与系统分析(五)——连续时间信号的频谱分析
- OTDR维修中频谱矢量信号分析
- 连续信号在有限区间上频谱分析实例、实验
- 信号完整性分析—数字信号的频谱与带宽
- 基于EEMD的信号处理方法分析和实现
- 第1章信号完整性分析概论----新设计方法和仿真测量