文章目录
一.语法与参数介绍
spectrogram函数做短时傅立叶变换的频谱图。
调用格式如下:
s = spectrogram(x,window,noverlap,nfft)
使用nfft采样点来计算离散傅立叶变换。
输入参数解释:
x:
x—输入信号 示例:cos(pi/4*(0:159))+randn(1,160)指定嵌入高斯白噪声的正弦曲线。
window:
window—窗口 窗口,指定为整数或行或列向量。使用window的信号划分成段: 1.如果window是整数,则将其spectrogram分成一定x长度的段,window并使2.用该长度的汉明窗对每个段进行窗口化。 如果window是向量,则将其spectrogram划分x为与向量长度相同的段,并使用 对每个段进行窗口化window。 如果x不能将的长度精确地划分为具有noverlap重叠样本的整数个段,则相应地x截断。 如果您指定window为空,则spectrogram使用汉明窗口,将x其划分为具有noverlap重叠样本的八个段。 示例:hann(N+1)并且(1-cos(2*pi*(0:N)'/N))/2都指定了一个长度为N + 1的 Hann 窗口。
noverlap:
noverlap—重叠样本 重叠样本数,指定为正整数。 如果window是标量,则 noverlap必须小于 window。 如果window是向量,则 noverlap必须小于 的长度window。 如果指定noverlap为空,则 spectrogram使用在段之间产生 50% 重叠的数字。如果未指定段长度,则函数设置 noverlap为⌊ N x /4.5⌋,其中N x是输入信号的长度,⌊⌋符号表示楼层函数。
nftt:
nfft— DFT 点数 DFT 点数,指定为正整数标量。如果指定 nfft为空的,则 spectrogram设置参数到最大值(256,2 p),其中p =⌈log 2 Ñ瓦特⌉,所述⌈⌉符号表示上取整函数,并 N w = windowifwindow 是标量。 N w = if是一个向量。length(window)window
fs
fs—采样率 采样率,指定为正标量。采样率是单位时间内的采样数。如果时间单位是秒,则采样率以赫兹为单位。
二.频谱图的默认值
生成 N X = 1024 个由正弦曲线和组成的信号样本。正弦波的归一化频率为 2π/5 rad/sample 和 4π/5 rad/sample。较高频率的正弦波幅度是另一个正弦波的幅度的 10 倍。
N = 1024; n = 0:N-1; w0 = 2*pi/5; x = sin(w0*n)+10*sin(2*w0*n);
使用函数默认值计算短时傅立叶变换。绘制频谱图。
s = spectrogram(x); spectrogram(x,'yaxis')
返回:
重复计算:
- 将信号分成不同长度的部分 nsc=[Nx/4.5]。
- 使用汉明窗口对部分进行窗口化。
- 指定连续部分之间的 50% 重叠。
- 要计算 FFT,请使用 max(256,2^p ) 点,其中 p=[log2nsc]。
验证两种方法是否给出相同的结果:
Nx = length(x); nsc = floor(Nx/4.5); nov = floor(nsc/2); nff = max(256,2^nextpow2(nsc)); t = spectrogram(x,hamming(nsc),nov,nff); maxerr = max(abs(abs(t(:))-abs(s(:))))
返回:
将信号分成 8 个等长的部分,部分之间有 50% 的重叠。指定与上一步相同的 FFT 长度。计算短时傅立叶变换并验证它给出与前两个过程相同的结果。
ns = 8; ov = 0.5; lsc = floor(Nx/(ns-(ns-1)*ov)); t = spectrogram(x,lsc,floor(ov*lsc),nff); maxerr = max(abs(abs(t(:))-abs(s(:))))
返回:
三.沿 x 轴的频率
t = 0:0.001:2; x = chirp(t,100,1,200,'quadratic');
计算并显示 x 的频谱图
- 将信号分成长度为 128 的部分,用汉明窗加窗。
- 指定相邻部分之间重叠的 120 个样本。
- 评估在[128/2+1]=65 频率和 [(length(x)−120)/(128−120)]=235 频率的频谱。
spectrogram(x,128,120,128,1e3)
返回:
用布莱克曼窗替换汉明窗。将重叠减少到 60 个样本。绘制时间轴,使其值从上到下增加。
spectrogram(x,blackman(128),60,128,1e3) ax = gca; ax.YDir = 'reverse';
返回:
四.频谱图和瞬时频率
使用频谱图功能测量和跟踪信号的瞬时频率。生成以 1 kHz 采样的二次线性调频脉冲,持续两秒。指定线性调频,使其频率最初为 100 Hz,一秒后增加到 200 Hz
fs = 1000; t = 0:1/fs:2-1/fs; y = chirp(t,100,1,200,'quadratic');
使用频谱图函数中实现的短时傅立叶变换来估计跳频的频谱。将信号分成长度为 100 的部分,使用汉明窗口进行窗口化。指定相邻部分之间重叠的 80 个样本,并评估 [100/2+1]=51 频率处的频谱。
spectrogram(y,100,80,100,fs,'yaxis')
返回:
通过找到[(2000−80)/(100−80)]=96 个时间点具有最高能量的时频率来跟踪调频频率。在频谱图上叠加瞬时频率。
[~,f,t,p] = spectrogram(y,100,80,100,fs); [fridge,~,lr] = tfridge(p,f); hold on plot3(t,fridge,abs(p(lr)),'LineWidth',4) hold off
返回:
暂时讲到这,后续需要的时候我再补充。