【限免】短时傅里叶变换时频分析【附MATLAB代码】

来源:微信公众号:EW Frontier

简介

一种能够同时对信号时域和频域分析的方法——短时傅里叶变换(STFT),可以在时频二维角度准确地描述信号 的时间、频域的局部特性,与其他算法不同,通过该算法可以得到信号的瞬时频率随时间变化的变化规律,其在雷达信号的脉内 特征分析中的效果明显。本文根据仿真结果,对不同类型信号经短时傅里叶变换后的结果进行统计,形成了基于短时傅里叶变换 的雷达信号脉内特征自动识别流程,对电子侦察情报的获取及应用有重要的意义。

电子侦察面对的电磁环境越来越复杂,这意味着雷达 信号越来越复杂,也就是说雷达信号环境中常规脉冲雷达信 号使用的比例逐渐减小。因此,对线性调频、相位编码、非 线性调频、频率捷变等雷达信号的识别已成为不可忽视重要 环节,同时,高速地对这些信号进行自动识别也是发展的需 求。本文利用短时傅里叶变换对各种复杂信号进行脉内特征 分析,以探索脉内特征自动识别流程。

STFT主要原理

短时傅里叶变换公式为:

式(1)中,m(τ-t)为窗函数在时域窗函数取截信号, 窗函数滤波出来的局部时域数据作FFT,就是在τ时刻得 到该时域窗函数对应信号的傅里叶变换,设置不同的τ值, 窗函数的中心位置会不断移动,这样就得到了不同τ下该信 号的傅里叶变换,这些不同时刻傅里叶变换的集合就是Sx (ω,t)。

从式(1)可以发现,从形式上来看,傅里叶变换和短时傅里叶变换的区别仅在于时间域上少了一个窗函 数。短时傅里叶变换通过采用滑窗处理来弥补传统傅里叶 变换的不足之处。它能够对某一小段时间滑窗内的信号做 傅里叶变换,反映该信号的频域随时间变换的大致规律。 同时,短时傅里叶变换还保留了传统傅里叶变换较好的抗 干扰能力。仿真研究表明,若时域的滑窗时间越短,则变 换后的频率分辨率会越低;若滑窗时间延长,则时域的分 辨率就会降低,这是短时傅里叶变换在时域分辨率、频域 分辨率方面存在的矛盾。

MATLAB代码

function [t, f, S] = stft1(x,N,M,Nfft,Fs,win_type)
%STFT1 Short-Time Fourier Transform (STFT) - Method I.
%
%   [t, f, S] = stft1(x,N,M,Nfft,Fs,win_type) calculates the Short-Time Fourier Transform 
%   (STFT) or in other words the spectrogram of the input signal x.
%
%   Inputs:
%            x is a row vector that contains the signal to be examined.
%            N is the selected length of the window in samples.
%            M is the selected amount of overlap between successive windows in samples.
%            Nfft is the selected number of DFT calculation points (Nfft>=N). 
%            Fs is the signal sampling frequency in Hz.
%            win_type is a string containing one of the windows shown
%                      below. The default value of this variable corresponds to the rectangular window.
%
% Outputs: S is a matrix that contains the complex spectrogram of x.    
%          i.e. S(:,k) = fft(k-th frame) computed on Nfft points.
%          f is a vector of frequency points in Hz where the spectrogram is calculated.
%          t is a vector of time points in sec. Each point corresponds to a
%            signal frame.
%
%   Copyright 2020-2030, Ilias S. Konsoulas.%% Window selection and contruction.
switch win_type case  'cheby'win = chebwin(N).';case 'blackman'win = blackman(N).';case 'hamm'win = hamming(N).';case 'hann'win = hanning(N).';  case 'kaiser'beta = 5;win = kaiser(N,beta).';  case 'gauss'win = gausswin(N).';otherwise  % otherwise use the rectangular windowwin = ones(1,N);
end%% Input Signal Segmentation Params.
x = x(:).';
L = length(x);
% Number of segments (frames) the signal is divided to.
K = floor((L-M)/(N-M)); %% DFT Matrix Construction
n = 0:Nfft-1;
w = exp(-1i*2*pi*n/Nfft);
W = zeros(Nfft,Nfft);
for k=0:Nfft-1W(:,k+1) = w.^k;
end%% Number of Unique FFT Points.
NUPs = Nfft;   
if isreal(x)if mod(Nfft,2)   % if N is odd.NUPs = (Nfft+1)/2;else             % if N is even.NUPs = Nfft/2+1; end
end %% Input Signal Segmentation (Framing)X = zeros(N,K);for k=1:KX(:,k) = x((k-1)*(N-M)+1:k*N - (k-1)*M).*win;
endX = vertcat(X,zeros(Nfft-N,K));  % Zero-Padding each frame. %% DFT Calculation of all frames as a single matrix product.
S = W*X;  S = S(1:NUPs,:);%% Frame Time Points
t = (N-1)/Fs + (0:K-1)*(N-M)/Fs; % Frame Time Points.%% Frequency Points in Hz.
f = (0:NUPs-1)*Fs/Nfft;  %% NOTES:
% When K is an integer then the following equation holds:
% (N-1)*Ts + (K-1)*(N-M)*Ts = (L-1)*Ts = total signal duration in sec.
% or (N-1) + (K-1)*(N-M) = (L-1).
 
% Short-Time Fourier Transform - Method I (Spectrogram) Demo.
% This demo shows how the custom function stft1.m and is used to
% to produce the spectrogram of an input signal.%   Copyright 2020 - 2030, Ilias S. Konsoulas.%% Workspace Initialization.clc; clear; close all;%% Select and load the signal to be analyzed.
% load('chirp','Fs','y'); x = y;
% load('gong', 'Fs','y'); x = y;
% load timit2.asc;  Fs = 8000; x = timit2; 
% load('train','Fs','y'); x = y;
load('splat','Fs','y'); x = y;
% load('laughter','Fs','y'); x = y;
%  [x Fs] = audioread('andean-flute.wav');%% Play Back the selected audio signal:
soundsc(x,Fs,24);%% Signal Normalization.
x = x.'/max(abs(x));  %% STFT Parameters.
L    = length(x);
N    = 512;   % Selected window size.
M    = 450;   % Selected overlap between successive segments in samples.
Nfft = 512;   % Selected number of FFT points.[t,f,S] = stft1(x,N,M,Nfft,Fs,'hamm');%% Plot the Spectrogram.
h = figure('Name','STFT - Method I Demo');
colormap('jet');[T,F] = meshgrid(t,f/1000); % f in KHz.
surface(T,F,10*log10(abs(S.^2) + eps),'EdgeColor','none');axis tight;
grid on;
title(['Signal Length: ',num2str(L),', Window Length: ', num2str(N),', Overlap: ', num2str(M), ' samples.']);
xlabel('Time (sec)');
ylabel('Frequency (KHz)');
colorbar('Limits',[-80, 40]);
cbar_handle = findobj(h,'tag','Colorbar');
set(get(cbar_handle,'YLabel'),'String','(dB)','Rotation',0);
zlim([-80 40]);

MATLAB仿真结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/15955.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Elasticsearch】Centos7安装Elasticsearch、kibana、IK分词

目录 本文安装包下载地址注意安装elasticsearch1.上传文件2.解压elasticsearch-6.3.1.tar.gz3.开启远程连接权限4.修改其他配置[root用户操作]5.重启虚拟机6.启动es7.外部访问 安装kibana-61.解压2.配置3.启动kibana4.访问5.在开发工具中做数据的增删改查操作 安装IK分词1.wind…

软件安全复习

文章目录 第一章 软件安全概述1.1 信息定义1.2 信息的属性1.3 信息安全1.4 软件安全1.5 软件安全威胁及其来源1.5.1 软件缺陷与漏洞1.5.1.1 软件缺陷1.5.1.2 漏洞1.5.1.3 软件漏洞1.5.1.4 软件缺陷和漏洞的威胁 1.5.2 恶意软件1.5.2.1 恶意软件的定义1.5.2.2 恶意软件的威胁 1.…

携手AI,如何共赢未来?

5/25日参加了一个培训分享会,由博奥研究院、武汉博奕咨询和华工科技联合举办,主题是“携手Ai,共赢未来”。 抱着跟书友线下交流的心态我参与了,参与前我对博奥做了基础了解,他们跟工信部考试和教育中心有合作&#x…

【C语言】指针作为参数(传值调用vs传址调用)

前言 在前面讲了那些指针相关的内容后,是时候探讨一下指针有什么作用了。 在C语言中,指针有多种各不相同的应用,在本篇文章中,我们探讨一下指针作为函数参数的作用(对比传值与传址两种不同函数调用方式)。…

【QGIS入门实战精品教程】10.7: 基于DEM的地形因子分析(坡度、坡向、粗糙度、山体阴影、耐用指数)

文章目录 一、加载dem二、山体阴影三、坡度四、坡向五、地形耐用指数六、地形位置指数七、地表粗糙度一、加载dem 二、山体阴影 方法一:符号系统 利用符号系统中的山体阴影,渲染出阴影效果。 方法二:山体阴影工具 该算法计算输入中的数字化地形模型的山体阴影。根据太阳的位…

2024 年 5 个 GO REST API 框架

什么是API? API是一个软件解决方案,作为中介,使两个应用程序能够相互交互。以下一些特征让API变得更加有用和有价值: 遵守REST和HTTP等易于访问、广泛理解和开发人员友好的标准。API不仅仅是几行代码;这些是为移动开…

kali下载zsteg和stegpy

1.kali下载zsteg 从 GitHub 上克隆zsteg到kali git clone https://github.com/zed-0xff/zsteg 切换目录 cd zsteg 用于安装名为 zsteg 的 Ruby Gem 包 gem install zsteg 2.kali下载stegpy 下载网站内的stegpy-master压缩包GitCode - 开发者的代码家园 并拉到kali中 切换到s…

python数据分析——数据可视化(图形绘制)

数据可视化(图形绘制基础) 前言一、图形绘制基础Matplotlib简介使用过程sin函数示例 二、常用图形绘制折线图的绘制plot示例 散点图的绘制scatter()示例 柱状图的绘制bar示例 箱型图绘制plot.box示例 饼状图的绘制pie示例 三、图形绘制的组合情况多个折线…

Sql Sever删除数据库时提示数据库正在被使用,解决办法

报错解释: 当您尝试删除SQL Server中的某个对象(如数据库、表等)时,如果有程序或进程正在使用该对象,您可能会收到一个错误信息,提示该对象正被使用。这通常是因为还有一个或多个数据库连接仍然保持着对该…

易备数据备份软件: 快速备份 MySQL\SQL Server\Oracle\泛微 OA 数据库

易备数据备份软件支持对 SQL Server、Oracle、MySQL、PostgreSQL、MariaDB、泛微 OA 等数据库进行快速备份,备份过程不会对任何服务造成中断。 使用一份授权,可以备份无限量的数据库,不管数据库服务器是否在本机、本地网络、或是远程网络。可…

Vitis HLS 学习笔记--控制驱动TLP-处理deadlock

目录 1. 简介 2. 代码解析 2.1 HLS kernel代码 2.2 查看接口报告 2.3 TestBench 2.4 Dataflow 报告 3. Takeaways 4. 总结 1. 简介 本文是对《Hardware Acceleration Tutorials: FIFO Sizing for Performance and Avoiding Deadlocks》实验内容的详细解释。 首先需要…

自动驾驶场景中的长尾问题怎么解决?

自动驾驶长尾问题是指自动驾驶汽车中的边缘情况,即发生概率较低的可能场景。感知的长尾问题是当前限制单车智能自动驾驶车辆运行设计域的主要原因之一。自动驾驶的底层架构和大部分技术问题已经被解决,剩下的5%的长尾问题,逐渐成了制约自动驾…

huggingface 笔记:查看GPU占用情况

0 准备部分 0.1 创建虚拟数据 import numpy as npfrom datasets import Datasetseq_len, dataset_size 512, 512 dummy_data {"input_ids": np.random.randint(100, 30000, (dataset_size, seq_len)),"labels": np.random.randint(0, 1, (dataset_size…

【代码随想录训练营】【Day 29】【回溯-3】| Leetcode 39, 41, 131

【代码随想录训练营】【Day 29】【回溯-3】| Leetcode 39, 41, 131 需强化知识点 startInex作用:一是处理是否可以有重复值,二是实现纵向遍历(不能没有)去重要在数组有序的前提下进行分割问题 题目 39.…

工业控制2D组态界面,丑是丑了点,但非常实用。

工业控制的2D组态界面是用于监控和控制工业过程的界面。它通常具有以下特征: 实时数据显示:2D组态界面能够实时显示传感器和设备的数据,如温度、压力、流量等。这些数据以图表、仪表盘、数字显示等形式呈现,使操作人员能够实时了解…

Android:使用Kotlin搭建MVVM架构模式

一、简介Android MVVM架构模式 MVVM全称:Model、View、ViewModel; Model:负责数据的请求、解析、过滤等数据层操作,其中Repository: 提供数据的 API(从本地或者网络)。View:负责视图部分展示Vie…

快速幂求逆元与逆元

我上一篇博客链接写的是多个数求乘法逆元而快速幂求逆元用于单个数求乘法逆元 逆元是对分数取模用的 对于除法取模不成立,即(a/b)%p≠(a%p/b%p)%p。求逆元的思路:(一般ACM的题目都是对1e97这种素数取模,所以gcd(a,p)1)a*b1(mod p) > b1/a…

[Algorithm][动态规划][简单多状态DP问题][按摩师][打家劫舍Ⅱ][删除并获得点数][粉刷房子]详细讲解

目录 1.按摩师1.题目链接2.算法思路详解3.代码实现 2.打家劫舍 II1.题目链接2.算法思路详解3.代码实现 3.删除并获得点数1.题目链接2.算法思路详解3.代码实现 4.粉刷房子1.题目链接2.算法思路详解3.代码实现 1.按摩师 1.题目链接 按摩师 2.算法思路详解 思路: 确…

大模型提示词Prompt学习

引言 关于chatGPT的Prompt Engineer,大家肯定耳朵都听起茧了。但是它的来由?,怎么能用好?很多人可能并不觉得并不是一个问题,或者说认定是一个很快会过时的概念。但其实也不能说得非常清楚(因为觉得没必要深…

Redis第18讲——Redis和Redission实现延迟消息

即使不是做电商业务的同学,也一定知道订单超时关闭这种业务场景,这个场景大致就是用户下单后,如果在一定时间内未支付(比如15分钟、半小时),那么系统就会把这笔订单给关闭掉。这个功能实现的方式有很多种&a…