信号处理基础——傅里叶变换与短时傅里叶变换

2023-11-04

目录

信号处理基础——傅里叶变换与短时傅里叶变换

1.FT与STFT概述

2.短时傅里叶变换(Short-time Fourier Transform,STFT)

3.spectrogram函数

4.注意事项

5.实例分析

6.Chirp信号及其生成

7.时频分析实战代码


信号处理基础——傅里叶变换与短时傅里叶变换

1.FT与STFT概述

对于大多数信号而言, 傅立叶分析绝对是非常有用的,因为频率分析在大多数情况下都非常重要。 那么为什么我们还需要研究短时傅里叶变换呢(STFT)?

原因是因为傅立叶分析有一个非常严重的缺点, 在将信号从时间域变换到频率域去的时候,把时间信息丢失了。 当我们在用傅立叶变化去分析一个具体信号的时候, 我们不知道哪个频率是对应在哪个时间点出现的,在哪个时间点消失的。

如果一个信号的频率并不随着时间变化, 那么我们称它为平稳信号。 那么知道哪一个频率的信号在哪一个时间点出现的就不那么重要了。 可是如果现实生活中我们研究的大多数信号都是非平稳信号,他们都许多非常短暂变化的特性, 这些特点对于我们信号分析的特点, 傅立叶分析并不适合去做这种分析,而短时傅里叶变换则可以。

如上图所示,最上边的是频率始终不变的平稳信号。而下边两个则是频率随着时间改变的非平稳信号,它们同样包含和最上信号相同频率的四个成分。做FFT后,我们发现这三个时域上有巨大差异的信号,频谱(幅值谱)却非常一致。尤其是下边两个非平稳信号,我们从频谱上无法区分它们,因为它们包含的四个频率的信号的成分确实是一样的,只是出现的先后顺序不同。

可见,傅里叶变换处理非平稳信号有天生缺陷。它只能获取一段信号总体上包含哪些频率的成分,但是对各成分出现的时刻并无所知。因此时域相差很大的两个信号,可能频谱图一样。

然而平稳信号大多是人为制造出来的,自然界的大量信号几乎都是非平稳的,所以在比如生物医学信号分析等领域的论文中,基本看不到单纯傅里叶变换这样naive的方法。

2.短时傅里叶变换(Short-time Fourier Transform,STFT)

一个简单可行的方法就是——加窗。 “把整个时域过程分解成无数个等长的小过程,每个小过程近似平稳,再傅里叶变换,就知道在哪个时间点上出现了什么频率了。”这就是短时傅里叶变换。

3.spectrogram函数

      [S,F,T,P]=spectrogram(x,window,noverlap,nfft,fs) %有返回值
      spectrogram(x,window,noverlap,nfft,fs,'yaxis')     %无返回值调用,直接输出频谱图

matlab中的spectrogram函数来做短时傅里叶变换,下面是其参数的解释。

语法:

[S,F,T,P]=spectrogram(x,window,noverlap,nfft,fs)

[S,F,T,P]=spectrogram(x,window,noverlap,F,fs)

说明:当使用时无输出参数,会自动绘制频谱图;有输出参数,则会返回输入信号的短时傅里叶变换。当然也可以从函数的返回值S,F,T,P绘制频谱图,具体参见例子。

参数:

x---输入信号的向量。默认情况下,即没有后续输入参数,x将被分成8段分别做变换处理,

如果x不能被平分成8段,则会做截断处理。默认情况下,其他参数的默认值为

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

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

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

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

Window---窗函数,如果window为一个整数,x将被分成window段,每段使用Hamming窗函数加窗。

如果window是一个向量,x将被分成length(window)段,每一段使用window向量指定的

窗函数加窗。所以如果想获取specgram函数的功能,只需指定一个256长度的Hann窗.

4.注意事项

nfft越大,频域的分辨率就越高(分辨率=fs/nfft),但离瞬时频率就越远;

noverlap影响时间轴的分辨率,越接近nfft,分辨率越高,相应的冗余就越多,计算量越大,但计算机只要能承受,问题不大。

[S,F,T,P]=spectrogram(x,window,noverlap,nfft,fs) %有返回值
spectrogram(x,window,noverlap,nfft,fs,'yaxis')     %无返回值调用,直接输出频谱图

需要注意的是,上述调用方式中,若输入参数为缺省值,则会以默认参数(见Note中推荐文档)进行计算。以MATLAB自带的非平稳信号quadratic chirp为例,对其进行时频分析,测试代码如下:

Nw = 128; 							%窗函数长度
window = hamming(128);  			% 使用海明窗(默认窗函数)
noverlap = 120; 					%重叠长度
nfft = 2^nextpow2(length(window)); 	%DFT点数
fs = 1000; 							%采样率
t=0:1/fs:2;                                          % 2 secs @ 1kHz sample rate
y=chirp(t,100,1,200,'q');                   		 % Start @ 100Hz, cross 200Hz at t=1sec 
spectrogram(y, window, noverlap, nfft,fs, 'yaxis');  % Display the spectrogram
h=colorbar;
h.Label.String = 'Power/Frequency(dB/Hz)'
title('Quadratic Chirp: start at 100Hz and cross 200Hz at t=1sec');

1. 如何分析这个图?

  • 颜色:首先最重要的一点是,该图像不同颜色区域表示的是对应频率下信号功率谱密度的分贝值,即单位为Power/Frequency(dB/Hz);

  • 时间轴: 其次,时间轴表示的是信号时长,其长度n为

      该数值表示在这信号时长内进行了多少次快速傅里叶变换,该数值由窗函数的宽度和重叠区域长度共同决定;

      频率轴:频率轴以模拟频率表示,其显示范围为采样频率的一半。 为什么呢?由傅里叶变换和采样定理知识我们可以知道,信号经过傅里叶变换后频谱对称,实际信号频率范围其实只有采样频率一半。由于频率轴只显示采样频率一半,故其长度为nfft/2+1或(nfft+1)/2,分别对应nfft为even和odd。频率轴的分辨率受nfft的影响,为1/nfft*fs。

2. DFT点数nfft的选择
      这个值的选择与快速傅里叶变换中一致,通常取最接近信号长度的2的整数次幂,即 nfft = 2^nextpow2(length(window)) ,这里的信号长度即窗函数长度,因为是对每个加窗信号的快速傅里叶变换。缺省值为

3. noverlap对输出结果的影响
       noverlap表示窗函数在移动过程中与前一个窗口位置的重叠区域大小,从前面对时间轴的分析公式可以看到,该参数会影响时间轴的分辨率。当该参数为0时,信号被窗函数进行无间隔无重叠分配,可以想象执行该过程时,时间轴上每一个数据长度(Nw)对应一个持续的fft显示,图像上表现为时间轴上出现明显的“拉伸”。而随着noverlap参数的引入,增大了时间轴分辨率,即每隔(Nw - noverlap)长度进行一次频率轴的更新,随着noverlap逐渐接近Nw,图像上表现为时间轴更加“细腻”,但随之而来的肯定是计算次数的增加。

        窗口长度Nw对输出结果的影响
        窗口长度对短时傅里叶变换的影响不言而喻,窗口大则频域分辨率越高,相应的时间上分辨率下降。该值的正确选择是短时傅里叶算法的一个难题,故引出了小波变换等方法。

        如何由带返回值的调用形式得到一致的频谱图呢?
        [S,F,T,P]=spectrogram(x,window,noverlap,nfft,fs)
      1. 参数S和P的关系
       S为信号x进行n次快速傅里叶变换后的结果,为一复数矩阵,横向按时间递增,纵向按频率递增。包含nfft/2+1或(nfft+1)/2行、n列,推导见前述。P为信号的功率谱密度,为一实矩阵,维数与S保持一致。
由信号分析的知识可以知道,功率谱密度可以由信号的快速傅里叶变换结果的绝对值平方除以信号长度表示,但是在这里,为了弥补窗函数的影响,还需要添加一个变换系数k。即

      当函数spectrogram()直接调用时输出的是以分贝值表示的PSD,由上面的讨论,我们可以利用S或者P得到一致的谱图

clear 
Nw = 128;
window = hamming(128);
noverlap = 120;
nfft = 2^nextpow2(length(window));
fs = 1000;
t=0:1/fs:2;                                         % 2 secs @ 1kHz sample rate
y=chirp(t,100,1,200,'q');                   % Start @ 100Hz, cross 200Hz at t=1sec 

subplot(131)
spectrogram(y, window, noverlap, nfft,fs, 'yaxis');  % Display the spectrogram
title('Call directly')
h=colorbar;
h.Label.String = 'Power/Frequency(dB/Hz)'

[S, F, T, P] = spectrogram(y, window, noverlap, nfft,fs);
subplot(132)
imagesc(T,F,10*log10(P));
title('Draw with P')
h=colorbar;
h.Label.String = 'Power/Frequency(dB/Hz)'

subplot(133)
k = 2/(fs*(window'*window))
imagesc(T,F,10*log10(abs(S).*abs(S)*k));
title('Draw with S')
h=colorbar;
h.Label.String = 'Power/Frequency(dB/Hz)'

2.关于参数T的认识
       我们已经知道输出的图像时间轴分辨率受制于窗口大小Nw和重叠长度noverlap,其长度为k。T中的数值为每个segment的中间值,什么意思呢?这里的segment理解为加的窗口,以本文中的程序为例,我使用的是采样频率为1000Hz的2s chirp信号,窗口长度Nw为128,noverlap为120。那么T的第一个数据该是多少?即1/1000 * 128/2 = 0.064s,而后每次递增1/1000 *(Nw - noverlap)= 0.008s。
了解了T的含义后,我们便可以根据结果(S、P)分别得到各个时间segment的频谱,例如我想查看信号1秒附近(±Nw/1000/2 s)的功率谱,只需要输入plot(P(:, find(T==1)))。
 

f = 100:0.05:300;
[S, F, T, P] = spectrogram(y, window, noverlap, f,fs);
spectrogram(y, window, noverlap, f,fs, 'yaxis');

%   [S,F,T] = SPECTROGRAM(X,WINDOW,NOVERLAP,F,Fs) where F is a vector of 
%   frequencies in Hz (with 2 or more elements) computes the spectrogram at 
%   those frequencies using the Goertzel algorithm. The specified 
%   frequencies in F are rounded to the nearest DFT bin commensurate with 
%   the signal's resolution. 

该调用方式下,nfft由具体的频率范围取代,频率轴显示范围由f上下限决定,频率分辨率由其间隔决定。

5.实例分析

例.计算并显示二次扫频信号的PSD图,扫频信号的频率开始于100Hz,在1s时经过200Hz

T = 0:0.001:2;
X = chirp(T,100,1,200,'q');
spectrogram(X,128,120,128,1E3);
title('Quadratic Chirp');

例.计算并显示线性扫频信号的PSD图,扫频信号由直流开始,在1s时经过150Hz,控制频率轴显示在y轴上

T = 0:0.001:2;
X = chirp(T,0,1,150);
[S,F,T,P] = spectrogram(X,256,250,256,1E3);
surf(T,F,10*log10(P),'edgecolor','none'); axis tight;
view(0,90);
xlabel('Time (Seconds)'); ylabel('Hz');

6.Chirp信号及其生成

(1)简介

Chirp译名:啁啾(读音:“周纠”),是通信技术有关编码脉冲技术中的一种术语,是指对脉冲进行编码时,其载频在脉冲持续时间内线性地增加,当将脉冲变到音频地,会发出一种声音,听起来像鸟叫的啁啾声,故名“啁啾”。

后来就将脉冲传输时中心波长发生偏移的现象叫做“啁啾”。例如在光纤通信中由于激光二极管本身不稳定而使传输单个脉冲时中心波长瞬时偏移的现象,也叫“啁啾”。

Chirp信号的表达式如下:

  • 式中f0称作起始频率。

  • u0为调频率

  • 对相位进行求导,得到角频率以及频率随时间的线性变化关系 f = f0+u0*t

(2)matlab生成chirp信号

t=0: 1/44100 :0.05;                       % 采样率是44100HZ
y=chirp(t, 3000, 0.05, 8000);        % 第一个参数表示时间长度,第二个参数表示当t=0s时对应的频率,第三个和第四个参数为当t=0.05s时对应的频率
subplot(2,1,1);
plot(y);
subplot(2,1,2);
spectrogram(y,256,250,256,44100); 

(3)chirp函数

y = chirp(t,f0,t1,f1,’method’,phi,'shape')

根据指定的方法在时间t上产生余弦扫频信号,f0为第一时刻的瞬时频率,f1为t1时刻的瞬时频率,f0和f1单位都为Hz。如果未指定,f0默认为e-6(对数扫频方法)或0(其他扫频方法),t1为1,f1为100Hz。

扫频方法有linear线性扫频、quadratic二次扫频、logarithmic对数扫频;

phi允许指定一个初始相位(以°为单位),默认为0,如果想忽略此参数,直接设置后面的参数,可以指定为0或[];

shape指定二次扫频方法的抛物线的形状,凹还是凸,值为concave或convex,如果此信号被忽略,则根据f0和f1的相对大小决定是凹还是凸。

(4)例子

使用短时傅里叶变换对线性扫描频率信号进行谱估计的命令如下:

clear all;clc;close all;  %clear all清空工作区,clc清空命令(可能是clear command缩写),close all关闭所有窗口
T=0:0.001:2;
X=chirp(T,0,1,150);
subplot(121);plot(T,X);
xlabel('Time (Seconds)');ylabel('Amp');
subplot(122);[S,F,T,P]=spectrogram(X,256,250,256,1E3);
surf(T,F,10*log10(P),'edgecolor','none');axis tight;
xlabel('Time (Seconds)');ylabel('Hz');
view(0,90);
colorbar;

7.时频分析实战代码

%时频分析
clc;

data=load('dataset/opendataset/dataset.mat');
Au=data.x_train(:,1,3);
Fs = 256;

%短时傅里叶
[B, F, T, P] = spectrogram(Au,256,255,500,Fs);   % B是F大小行T大小列的频率峰值,P是对应的能量谱密度
figure
imagesc(T,F,abs(B));
set(gca,'YDir','normal')
ylim([0,35]);
colorbar;
xlabel('时间 t/s');
ylabel('频率 f/Hz');
title('短时傅里叶时频图');

% 小波
wavename='cmor3-3';
totalscal=300;
Fc=centfrq(wavename); % 小波的中心频率
c=2*Fc*totalscal;
scals=c./(1:totalscal);
f=scal2frq(scals,wavename,1/Fs); % 尺度转换为频率
coefs=cwt(Au,scals,wavename); % 连续小波系数
t=0:1/Fs:4.5-1/Fs;
figure
imagesc(t,f,abs(coefs));
set(gca,'YDir','normal')
ylim([0,35]);
colorbar;
xlabel('时间 t/s');
ylabel('频率 f/Hz');
title('小波时频图');

%新版cwt
figure
cwt(Au,Fs);

8. 案例分析

计算谱图与现行调频信号瞬时频率偏差

clear all;
t = 0:0.002:2;
y1 = chirp(t,0,1,150);
subplot(311);
%spectrogram(y,window,noverlop,nfft,fn,'yaxis')无返回值,直接输出时频图
%[S,F,T,P] = spectrogram(y,window,noverlop,nfft,fn)有返回值
spectrogram(y1,256,250,256,1E3,'yaxis');
xlabel('t=0:0.002:2');
title('不同采样时间条件下');
%   产生余弦扫频信号
t = -2:0.002:2;
y2 = chirp(t,100,1,200,'quadratic');
subplot(323);
spectrogram(y2, 128,120,128,1E3,'yaxis');
xlabel('t=-2:0.002:2');
t = -1:0.001:1;
% []表示忽略初始相位的设置也可以设置0或者自己设置
% 指定扫频方法的抛物线的凹凸性,为concave或者convex
y3 = chirp(t,100,1,400,'q',[],'convex');
subplot(324);
spectrogram(y3, 256, 200, 256, 1000, 'yaxis');

结果如下:

 

 

            

参考文献

[1]https://ddong7.blog.csdn.net/article/details/108695223

[2]https://blog.csdn.net/weixin_30547797/article/details/99118894

 

 

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

信号处理基础——傅里叶变换与短时傅里叶变换 的相关文章

  • 设计模式之抽象工厂

    抽象工厂模式结构图 抽象工厂模式 提供一个创建一系列相关或相互依赖对象的接口 而无需指定它们具体的类 工厂方法模式 定义一个用于创建对象的接口 让子类决定实例化哪一个类 抽象工厂模式是围绕一个超级工厂创建其他工厂 该超级工程又称为其他工厂的
  • 【Spring容器的启动流程】

    Spring容器的启动流程主要分为以下几个步骤 加载配置文件 Spring容器会从指定的配置文件中读取配置信息 包括bean的定义 依赖关系 AOP切面等 创建容器 Spring容器启动后会创建一个容器实例 容器负责管理bean的生命周期和
  • 使用Numpy随机生成一个4维矩阵,计算最后两维的和

    深度学习作业 1 使用Numpy随机生成一个4维矩阵 计算最后两维的和 import numpy def chapter2 6 ax1 ax2 ax3 ax4 arr numpy random randint 2 size ax1 ax2
  • 云原生之使用Docker部署Laverna笔记工具

    云原生之使用Docker部署Laverna笔记工具 一 Laverna介绍 1 Laverna简介 2 Laverna特点 二 检查本地环境状态 1 检查系统版本 2 检查docker状态 三 下载Laverna镜像 四 部署Laverna
  • 【MQTT】MQTT服务器mosquitto和客户端paho的使用

    MQTT服务器mosquitto和客户端paho mosquitto安装使用 1 mosquitto下载 从官网下载最新版本 https mosquitto org download 以下是mosquitto2 0 14windowsX64
  • Vue入门案例--TodoList备忘录

    文章目录 前言 1 创建Vue项目 2 搭建项目 2 1 MyHeader编写 2 2 MyList编写 2 3 MyItem编写 2 4 MyFooter编写 2 5 App编写 3 初始化列表 3 1 App定义数据 3 2 MyLis
  • 排序动态图

    1 冒泡排序 2 选择排序 3 鸡尾酒排序 4 插入排序 5 归并排序 6 堆排序 7 希尔排序 8 快速排序 上面的图片如果打不开 在新标签页面就可以
  • python3.7 安装Airflow中HiveToMySqlTransfer报错解决

    报错内容如下 File app python lib python3 7 site packages airflow hooks hive hooks py line 783 in get conn from pyhive hive imp
  • 百度地图BMap

    做了半天 搜到一个很好的demo 能解决多点的问题 http blog csdn net a497785609 article details 24009031 div style width 100 height 500px border
  • [大话设计模式C++版] 第9章 简历复印 —— 原型模式

    源码可以在这里找到 大话设计模式C 版 简历代码初步实现 写一个简历类 必须要有姓名 可以设置性别和年龄 可以设置工作经历 客户端实例化三份简历 main cpp include
  • docker运行报错:docker: Error response from daemon: No command specified.

    mysql镜像运行报错 docker Error response from daemon No command specified 如图 解决方案 是由于命令没启用的缘故 所以需要在运行命令后面追加 bin bash 如下图 问题解决 希
  • IDEA中找不到符号问题解决

    把以上三处的jdk从8改成11 再也不想看到这个问题了
  • 开启WSL之旅

    专业点的计算机使用者 会经常跟Linux与windows系统打交道 经常是一台计算机装双系统或者在一个系统中安装虚拟机 双系统来回切换 挺麻烦 遇到同时需要两个环境时 就没办法了 虚拟机 对于配置高的机器还可以 不过性能体验也不太好 总之是
  • “烧钱”的大模型:初探成本拆解与推理优化方法

    编者按 大模型的成本问题一直以来是大家重点关注的问题 本文重点讨论了训练大型语言模型 LLMs 需要的成本 并简要介绍什么是LLM以及一些用于优化大模型推理表现的技术 虽然很难准确预测LLMs未来会怎么发展 但可以肯定 如果成本问题得到解决
  • 服务器系统文件共享如何设置,服务器操作系统文件共享设置

    服务器操作系统文件共享设置 内容精选 换一换 切换操作系统是为您的云服务器重新切换一个系统盘 切换完成后云服务器的系统盘ID会发生改变 并删除原有系统盘 如果云服务器当前使用的操作系统不能满足业务需求 如软件要求的操作系统版本较高 您可以选
  • 思科设备命令讲解(超基础)

    作者 小刘在C站 个人主页 小刘主页 每天分享云计算网络运维课堂笔记 努力不一定有回报 但一定会有收获加油 一起努力 共赴美好人生 夕阳下 是最美的绽放 树高千尺 落叶归根人生不易 人间真情 目录 一 静态路由配置命令 二 默认路由配置命令
  • 2023年前端面试题总结

    某多多 1 Promise实现原理 2 vue组件间通信 3 性能优化 4 vuex数据流动过程 5 谈谈css预处理器机制 6 算法 Promise串行 某眼电影 1 vue组件间通信 2 react和vue更新机制的区别 3 Vue3
  • 超硬货,大型 Rust 项目经验分享

    本篇文章中 我将分享我组织大型 Rust 项目的经验 但这绝不是权威的 只是我通过尝试和错误中发现的一些小技巧 Cargo 作为 Rust 的构建系统 遵循约定大于配置的原则 它不仅为小型项目提供了一套良好的默认配置集 尤其为公共 crat

随机推荐

  • Flash学习笔记

    快捷键 1 F8 可以将散件转化为元件 2 Ctrl 2 满画布显示 3 F6 插入关键帧 4 Ctrl Enter 预览 一 第一章 1 颜料桶 更改填充色 墨水瓶 改变边框色 2 动画的分类 位移动画 形变动画 逐帧动画 路径动画 蒙版
  • Windows server 2012_R2 无法安装VMware Tools解决方法(详细)

    百度网盘 链接 https pan baidu com s 1QbIHSv1Df8eVAIH2ym1g8Q pwd rdi4 提取码 rdi4 官网下载链接 KB2919442https www microsoft com zh cn do
  • Table固定表头固定左侧列

    效果图 思路 把需要固定的内容进行拆封 比如左侧的表头和内容 右侧的表头和内容 都单独的存放在一个table中 在滚动条滚动的时候通过jquery scroll 区分横向纵向滚动条的方法来实现左侧内容的滚动和右侧表头的滚动 第一步 div
  • 直接线性变换解法(DLT)用于标定相机

    直接线性变换法是建立像点坐标和相应物点物方空间坐标之间直接的线性关系的算法 特点 不需要内外方位元素 适合于非量测相机 满足中 低精度的测量任务 可以标定单个相机 1 各坐标系之间的关系推导直接线性变换解法 1 1 像素坐标系与像平面坐标系
  • MATLAB中用Application Complier生成可执行文件的步骤及相关注意事项

    生成可独立执行的软件 可以分成以下5个主要的步骤 1 打开Application Complier 2 添加主程序文件 3 可执行文件设置 4 选择打包方式 5 相关文件解释 大体步骤多类似 里面有些容易出错的小细节 相关设置需要注意的有
  • node中使用express+mongodb实现分页查询

    文章目录 引言 一 分页案例 二 查询方法扩展介绍 1 find 2 limit 3 skip 4 populate 总结 引言 在Web应用程序开发中 分页查询是必不可少的功能之一 Node js提供了许多优秀的工具和框架来实现分页查询
  • 马虎的算式

    import java util public class Main public static void main String args int ans 0 for int a 1 a lt 10 a for int b 1 b lt
  • Struts2输入校验(XML方式)

    本章主要介绍struts2的XML配置方式输入校验 以下将结合一个实例程序进行说明 代码结构 关键代码 RegistAction javapackage com alfred regist action import java util D
  • libuv 高并发异步使用

    问题来源 在开发libuv客户端 服务器时 需要并发的向客户端发送数据 libuv就会用到 uv write函数 因此 我的初步方案是 1 创建线程池 2 线程池分配数据内存buf 并打包 3 将包发给 uv write 4 uv writ
  • 为什么越来越多的企业选择云数据存储而放弃本地数据存储?

    随着企业的发展 它们会产生大量数据 企业已经意识到 利用他们的数据做出数据驱动的决策对于创新和保持竞争优势至关重要 本文将会探讨企业在收集和分析大数据时可能面临的主要挑战 以及将企业数据仓库部署到本地或云数据存储的选择 我们将根据安全性 成
  • 金融行业软件测试

    金融行业软件测试 一 什么是金融行业 二 金融行业的业务特点 1 金融行业的业务特点 三 金融行业测试主要测试范围 1 功能测试 2 业务验证测试 3 客户端测试 4 接口测试 5 性能测试 6 安全性测试 四 金融行业软件测试的现状 五
  • Qt-Web混合开发-QWebEngineView加载网页最小示例(1)

    Qt Web混合开发 QWebEngineView加载网页最小示例 文章目录 Qt Web混合开发 QWebEngineView加载网页最小示例 1 概述 2 实现效果 3 实现功能 4 关键代码 5 源代码 更多精彩内容 个人内容分类汇总
  • docker原理及服务编排

    一 什么是docker Docker 是一个开源项目 诞生于2013年初 最初是dotCloud公司内部的一个业余项目 它基于Google公司推出的Go语言实现 项目后来加入了Linux基金会 遵从了Apache 2 0协议 项目代码在Gi
  • C++之 引用(refer)

    含义 变量的别名 第二名称 作用 使用别名访问原名的内存空间 即别名与原名保存同样的内存空间 语法 数据类型 别名 原名 int b a 注意事项 引用必须要初始化 对于一个变量a 不能直接写int b 而需要写int b a 引用在初始化
  • 水箱计算机控制系统设计,三容水箱计算机控制实验系统设计与控制算法研究

    摘要 三容水箱是一种典型控制对象 许多现场控制类型可以抽象成三容水箱数学模型 可作为自动化控制领域研究对象 三容水箱是一种柔性结构系统 通过水箱管路的组合形成各阶控制对象类型并且对各种控制算法进行设计 仿真和验证 目前三容水箱存在实验类型单
  • zookeeper报错 JAVA_HOME is not set

    zookeeper报错 JAVA HOME is not set 很多开发者安装zookeeper的时候 应该会发现到这么一个问题 JAVA HOME is not set 好的 那么这个是什么意思呢 就是说你的 JAVA HOME 变量没
  • OCR文本检测模型:FCENet论文阅读笔记

    文章目录 前言 摘要 Abstract 1 介绍 Introduction 2 相关工作 Related Work 3 方法 Approach 3 1 傅里叶轮廓嵌入 Fourier Contour Embedding 3 2 FCENet
  • msvcp140.dll丢失的解决方法

    MSVCP140是一个非常重要的Windows系统文件 它是Microsoft Visual C Redistributable的一部分 用于运行许多应用程序和游戏 如果您在尝试启动某个应用程序或游戏时遇到了MSVCP140 dll缺失的错
  • 深度对抗学习在图像分割和超分辨率中的应用

    深度学习已经在图像分类 检测 分割 高分辨率图像生成等诸多领域取得了突破性的成绩 但是它也存在一些问题 首先 它与传统的机器学习方法一样 通常假设训练数据与测试数据服从同样的分布 或者是在训练数据上的预测结果与在测试数据上的预测结果服从同样
  • 信号处理基础——傅里叶变换与短时傅里叶变换

    目录 信号处理基础 傅里叶变换与短时傅里叶变换 1 FT与STFT概述 2 短时傅里叶变换 Short time Fourier Transform STFT 3 spectrogram函数 4 注意事项 5 实例分析 6 Chirp信号及