文章目录

  • 0、背景
  • 1、chrip信号
    • 1、matlab帮助文档对chirp的解释
    • 2、非线性调频
      • 1、高斯包络的调频信号
  • 2、spectrogram
    • 利用surf根据spectrogram的返回参数值绘制三维

0、背景

本来这一节其实可以放在《matlab文档查阅使用训练(手把手教你阅读matlab文档)全网首发原创》,但是由于这两个函数非常重要,所以想单独拿出来记录,以便后续使用。

1、chrip信号

A chirp is a signal in which the frequency increases (up-chirp) or decreases (down-chirp) with time. In some sources, the term chirp is used interchangeably with sweep signal. It is commonly used in sonar and radar, but has other applications, such as in spread-spectrum communications.
chirp是频率随时间增加或减小的一种信号。在某些领域中,chirp这个词可以与扫频信号的名词互换使用。通常用于雷达,声呐中,但是也有别的用途,例如扩频通信。

1、matlab帮助文档对chirp的解释



从上面描述可以知道,一般来说我们常用的syntax的第一种形式,其中t是变量,包含了我们的时间点数(采样率),而f0和t1以及f1都是固定的,f0代表了在时间0的瞬时频率,f1代表了在时间t1时刻的瞬时频率。

下面是句法2的用法,method可以指定扫频的选项,也就是说,我们也可以非线性扫频。

第二种扫频模式是quadratic,也就是说要求t,是需要开平方根的。

第三种是对数形式,也就是说要求时间,是需要求对数的。

指定凹凸可以使扫频上凸或者凹的频率上升和下降

2、非线性调频

1、高斯包络的调频信号



w = gausswin(N,Alpha)返回一个N点高斯窗口,Alpha与标准差的倒数成正比。窗口的宽度是α的值成反比。更大的α值产生一个窄窗口。α的值默认为2.5。

% Generate a chirp with linear instantaneous frequency deviation.
% The chirp is sampled at 1 kHz for 2 seconds.
% The instantaneous frequency is 0 at t = 0 and crosses 250 Hz at t = 1 second.clc
clear
close allt = 0:1/1e3:1;      %以1KHZ的频率采样2秒钟
y = chirp(t,0,1,250);
y1=gausswin(length(y),2.5);%默认标准的高斯包络是2.5
y1=y1.';
H=y.*y1;
subplot(3,1,1)
plot(t,y)
subplot(3,1,2)
spectrogram(y,256,250,256,1e3,'yaxis')
subplot(3,1,3)
plot(t,H);

现在,我要产生一个高斯包络的线性调频信号,但是频率逐渐增高,到了中间点,频率达到最高,然后频率在逐渐减小,以中间为对称。

clc
clear
close allt1 = 0:1/1e3:(1-1/1e3)/2;      %以1KHZ的频率采样0.5秒钟
y1 = chirp(t1,0,(1-1/1e3)/2,200);
y2 = chirp(t1,200,(1-1/1e3)/2,0);
y=[y1,y2];
t=[t1,t1+0.499000000000000+1/1e3];
g=gausswin(length(y),2.5);%默认标准的高斯包络是2.5
g=g.';
H=y.*g;
subplot(3,1,1)
plot(t,y)
subplot(3,1,2)
spectrogram(y,256,250,256,1e3,'yaxis')
subplot(3,1,3)
plot(t,H);

2、spectrogram

  • s=spectrogram(x)
    表示将x进行默认的短时傅里叶变换,默认窗口使用海明窗,将x分成8段。
    如果x不能被平分成8段,则会做截断处理。默认情况下,其他参数的默认值为

window—窗函数,默认为nfft长度的海明窗Hamming

noverlap—每一段的重叠样本数,默认值是在各段之间产生50%的重叠

nfft—做FFT变换的长度,默认为256和大于每段长度的最小2次幂之间的最大值。

另外,此参数除了使用一个常量外,还可以指定一个频率向量F

fs—采样频率,默认值归一化频率

案例:
Generate samples of a signal that consists of a sum of sinusoids. The normalized frequencies of the sinusoids are rad/sample and rad/sample. The higher frequency sinusoid has 10 times the amplitude of the other sinusoid.
产生一个正弦曲线,归一化频率都是rad/sample,更高的频率的正弦信号是低正弦信号幅度的10倍。
正弦信号1:2π/5;
正弦信号2: 4π/5;

 N = 1024;
n = 0:N-1;w0 = 2*pi/5;
x = sin(w0*n)+10*sin(2*w0*n);
%Compute the short-time Fourier transform using the function defaults. Plot the spectrogram.s = spectrogram(x);spectrogram(x,'yaxis')

  • Power Spectral Densities of Chirps

Compute and display the PSD of each segment of a quadratic chirp that starts at 100 Hz and crosses 200 Hz at t = 1 s. Specify a sample rate of 1 kHz, a segment length of 128 samples, and an overlap of 120 samples. Use 128 DFT points and the default Hamming window.
计算chirp信号的功率谱,chirp信号以频率100HZ到200HZ,指定采样率是1KHZ,一段的采样长度是128个点,overlap是120个点,使用128点的DFT,采用默认的汉明窗。

clc;
clear;
t = 0:0.001:2;
x = chirp(t,100,1,200,'quadratic');spectrogram(x,128,120,128,1e3,'yaxis')
title('Quadratic Chirp')


也就是说,在时间域上,分为了t/8, 这么多个时间段,因为非覆盖部分是128-120。时间片段分的越细,频率随着时间的变化也就越精确。
下面我们来看看,overlap不重叠。下面就是将时间分为了15段。精度是比较差的。

下面再看一个实例
Compute and display the PSD of each segment of a linear chirp that starts at DC and crosses 150 Hz at t = 1 s. Specify a sample rate of 1 kHz, a segment length of 256 samples, and an overlap of 250 samples. Use the default Hamming window and 256 DFT points.

计算并且展示每一段线性chirp信号的PSD,这个信号从直流到在时间1s的时候150HZ,指定采样率是1KHZ,每一段的长度是256个采样点,overlap为250个,使用默认的汉明窗口,做256个点的DFT。

上面我们就已经把基本的用法都讲解完毕了


下面,我们来看返回参数的spectrogram

其实,我们只要会这句有参数返回值的语法就好:
[S,F,T,P]=spectrogram(x,window,noverlap,nfft,fs)

参考:
https://blog.csdn.net/zhuguorong11/article/details/77801977

clc;
clear;
N = 1024;
n = 0:N-1;t = 0:0.001:2-0.001;
x = chirp(t,0,1,150,'li');
[s,f,T,p]=spectrogram(x,128,120,128,1e3,'yaxis');
figure;
plot(x);
figure;
spectrogram(x,128,120,128,1e3,'yaxis');
title('linear Chirp')

k = fix((length(x)-120)/(128-120))
k =235

搞懂参数返回值的意义后,我们再来看如何利用参数返回值进行画图

clc;
clear;
t = 0:0.001:2-0.001;
x = chirp(t,0,1,150,'li');
[s,f,T,p]=spectrogram(x,128,120,128,1e3,'yaxis');
figure;
plot(x);
figure;
surf(T,f,10*log10(p),'edgecolor','none'); axis tight;
title('linear Chirp');
xlabel('Time (Seconds)'); ylabel('Hz');

这里我们要讲解一下,这里我们已经得到了返回参数值S F T P 。这四个参数的含义,就不必多说了,具体参考发的链接。
下面看一下surf这个函数。

利用surf根据spectrogram的返回参数值绘制三维


surf(X,Y,Z) creates a three-dimensional surface plot. The function plots the values in matrix Z as heights above a grid in the x-y plane defined by X and Y. The function also uses Z for the color data, so color is proportional to height.

这个函数用于绘制三维图,这个函数绘制以Z为高度,以X-Y为平面,这个函数使用Z为颜色数据。
surf(___,Name,Value) specifies surface properties using one or more name-value pair arguments. For example, ‘FaceAlpha’,0.5 creates a semitransparent surface. Specify name-value pairs after all other input arguments.
surf(,Name,Value)使用一个或多个名称-值对参数指定表面属性。例如,‘FaceAlpha’,0.5创建一个半透明的表面。在所有其他输入参数之后指定名称-值对。

下图是仅仅使用
surf(T,f,10*log10§);
也就是说以时间轴T为X轴,f为频率轴,功率谱是10log10§.

Use s to access and modify properties of the surface object after it is created. For example, turn off the display of the edges by setting the EdgeColor property.
s.EdgeColor = ‘none’;

使用上述edgecolor可以关闭边缘线。

clc;
clear;
t = 0:0.001:2-0.001;
x = chirp(t,0,1,150,'li');
[s,f,T,p]=spectrogram(x,128,120,128,1e3,'yaxis');
figure;
plot(x);
figure;
Q=surf(T,f,10*log10(p)); axis tight;
Q.EdgeColor='none';
title('linear Chirp');
xlabel('Time (Seconds)'); ylabel('Hz');

matlab---spectrogram短时傅里叶变换与chrip信号相关推荐

  1. 2021-02-28 Matlab绘制短时傅里叶变换的频谱图和时间-频率-幅值三维图

    Matlab绘制短时傅里叶变换的频谱图和时间-频率-幅值三维图 function [t,frequency,f_spectrum]=fft_s(y,windowlength,Fs) % 输入 : % ...

  2. matlab中短时傅里叶变换tfrstft函数用法

    [TFR,T,F]=TFRSTFT(X,T,N,H,TRACE) X : 信号. T : 时间序列 (默认值 :1:length(X)). N : 频率点数 (默认值: length(X)). H : ...

  3. matlab时频分析之短时傅里叶变换 spectrogram

    matlab时频分析之短时傅里叶变换 spectrogram 短时傅里叶变换常用于缓慢时变信号的频谱分析,可以观察沿时间变化的频谱信号. 其优点如下图所示,弥补了频谱分析中不能观察时间的缺点,也弥补了 ...

  4. 时频分析:短时傅里叶变换应用

    目录: 前言 实验环境 Matlab spectrogram函数 1语法 2举栗子: 2.1跟踪声音信号里的鸟声轨迹 2.2谱图3d可视化 参考: 前言 之前讲了时频分析的原理,和matlab里面的相 ...

  5. MATLAB 长度和像素_Matlab中短时傅里叶变换 spectrogram和stft的用法

    在Matlab中,做短时傅里叶变换需要使用函数spectrogram,而在Matlab2019中,引入了一个新的函数stft,下面我们就来看下这两个函数都如何使用. 短时傅里叶变换的基本原理就是将数据 ...

  6. 2021-05-10 Matlab短时傅里叶变换和小波变换的时频分析

    Matlab短时傅里叶变换和小波变换的时频分析 简介 本文主要给定一小段音频,通过短时傅里叶变换和小波变换制作时频图.音频的采样率为44100, 短时傅里叶变换 在matlab中,短时傅里叶变换的分析 ...

  7. matlab 时频分析(短时傅里叶变换、STFT)

    短时傅里叶变换,short-time fourier transformation,有时也叫加窗傅里叶变换,时间窗口使得信号只在某一小区间内有效,这就避免了传统的傅里叶变换在时频局部表达能力上的不足, ...

  8. 短时傅里叶变换原理及其MATLAB实现(Short Time Fourier Transform,STFT)

    短时傅里叶变换原理及其MATLAB实现(Short Time Fourier Transform,STFT) 1.短时Fourier变换原理(STFT原理) 信号x(t)短时Fourier变换定义为: ...

  9. 短时傅里叶变换(STFT)及matlab

    笔记~自用版~ 短时傅里叶变换的基础理论 短时傅里叶变换(Short-Time Fourier Transform, STFT)是一种时频分析方法,它将信号在时间域上分成若干个短时段,对每个短时段进行 ...

最新文章

  1. 面试:URI中的 “//” 有什么用?
  2. Java集合的使用:List与Map
  3. (*长期更新)软考网络工程师学习笔记——Section 11 Linux操作系统简介
  4. python第一条入门程序_Python语言函数代码的执行流程
  5. dropify,不错的图片上传预览插件
  6. linux进程上下文切换的具体过程,Linux实验三 结合中断上下文切换和进程上下文切换分析Linux内核一般执行过程...
  7. python附件发送到邮箱_python – 如何发送电子邮件附件?
  8. NOI 1.13编程基础之综合应用 45十进制到八进制
  9. android 会话 java_java – Android会话管理
  10. VS编辑代码时使用正则表达式去掉行号
  11. 设计模式(8)装饰模式
  12. WCF把书读薄(3)——数据契约、消息契约与错误契约
  13. WIN7系统下Mapgis6.7常见的两个问题及解决办法
  14. java工作日和节假日判断
  15. vue计算本周是今年的第几周
  16. TDChat国内ChatGPT镜像网站最新网站入口地址
  17. 在Scrapy中使用爬虫动态代理IP
  18. 【LaTex】LaTex 的使用与写作(快速入门,尾附:简洁的论文模板代码)
  19. NHibernate Mapping Attribute实现复合主键映射
  20. 生产者消费者ReentrantLock实现以及BlockingQueue实现

热门文章

  1. instanceof不是根据构造函数进行判断,而是原型链
  2. 正则表达式实现将html文本转换为纯文本格式(将html字符串转换为纯文本方法)
  3. WP7应用《OOK随心系列》字体和电子书上传方法说明
  4. 动态改变select 宽度
  5. 单引号(')和双引号()
  6. 通过超图在网页中加载3dmax模型
  7. 达梦数据库的基本使用
  8. 绕过web认证学习总结
  9. 修改Thickbox,预加载图片和点击图片前后浏览
  10. vue 自定义封装组件 使用 model 选项