matlab汉明窗dft,Mitre_sfr代码注解(四) LSF / 汉明窗 / SFR(DFT)计算
笔者学识有限。 本博客旨在对mitre_sfr核心代码进行简单注解, 详细内容读者仁者见仁智者见智。
SFR算法对ESF曲线进行差分得到LSF;
给LSF加上汉明窗, 降低干扰;
对加窗后的LSF曲线进行DFT, 得到SFR。
/*****************************************************************************/
/* This has been modified from Annex A, to more closely match Annex D and
reduce finite difference errors. Now allows either [-1 1] derivative
(when separation = 0) or [-1/2 0 1/2] derivative (when separation=1)
Inputs: len length of ESF array
AveEdge array of ESF values
separation type of derivative
0 = [-1 1]
1 = [-1/2 0 1/2]
Outputs: AveTmp array of original ESF values
AveEdge array of derivative (LSF) values
centroid centroid of the derivative
*/
// 计算ESF的差分图像LSF, 并计算LSF的质心
void calculate_derivative(unsigned int len, double *AveTmp, double *AveEdge,
double *centroid,int separation)
{
unsigned long i;
double dt, dt1;
dt = 0.0;
dt1 = 0.0;
for (i=0; i< len; i++)
AveTmp[i] = AveEdge[i];
for (i=1; i< len-separation; i++) {
/* Not wasting time with division by 2 since constant factors don't
change SFR computation */
AveEdge[i] = (AveTmp[i+separation]-AveTmp[i-1]);
if (separation == 1)
AveEdge[i] /= 2.0;
dt += AveEdge[i] * (double)i;
dt1 += AveEdge[i];
}
*centroid = dt/dt1;
AveEdge[0] = AveEdge[1];
if (separation == 1) AveEdge[len-1] = AveEdge[len-2];
}
/*****************************************************************************/
void apply_hamming_window( unsigned short alpha,
unsigned int oldlen,
unsigned short newxwidth,
double *AveEdge, long *pcnt2)
{
long i,j,k, begin, end, edge_offset;
double sfrc;
/* Shift the AvgEdge[i] vector to centre the lsf in the transform window */
// 将LSF的最大值移到中心位置, 两边由于移动造成的空位由0补齐
edge_offset = (*pcnt2) - (oldlen/2);
if (edge_offset != 0) {
if (edge_offset < 0 ) {
for (i=oldlen-1; i > -edge_offset-1; i--)
AveEdge[i] = (AveEdge[i+edge_offset]);
for (i=0; i < -edge_offset; i++)
AveEdge[i] = 0.00; /* last operation */
} else {
for (i=0; i < oldlen-edge_offset; i++)
AveEdge[i] = (AveEdge[i+edge_offset]);
for (i=oldlen-edge_offset; i < oldlen; i++)
AveEdge[i] = 0.00;
}
}
/* Multiply the LSF data by a Hamming window of width NEWXWIDTH*alpha */
// 在当前上下文中, 下面这段代码应该不会起任何作用, 不知道为什么会有这么复杂而冗余的逻辑
begin = (oldlen/2)-(newxwidth*alpha/2);
if (begin < 0) begin = 0;
end = (oldlen/2)+(newxwidth*alpha/2);
if (end > oldlen ) end = oldlen;
for (i=0; i< begin; i++)
AveEdge[i] = 0.0;
for (i=end; i< oldlen; i++)
AveEdge[i] = 0.0;
// 给begin和end之间的数据加上汉明窗
// 汉明窗 W(n,α ) = (1 -α ) - α cos(2*PI*n/(N-1)) ,(0≤n≤N-1)
// 一般情况下,α取0.46
// 下面计算方法等于窗发生了平移(故符号发生了变化), 结果是一样的
for (i=begin,j = -newxwidth*alpha/2; i < end; i++,j++) {
sfrc = 0.54 + 0.46*cos( (M_PI*(double)j)/(newxwidth*alpha/2) );
AveEdge[i] = (AveEdge[i])*sfrc;
}
// 将有效数据平移到起始位置
// 在当前上下文中, 下面这段代码应该不会起任何作用, 不知道为什么会有这么复杂而冗余的逻辑
if (begin != 0) /* Shift LSF to begin at index 0 (rather than begin) */
for (k=0, i=begin; k
/*****************************************************************************/
/* This is the DFT magnitude code */
unsigned short ftwos(long number, double dx, double *lsf,
long ns, double ds, double *sfr)
{
double a, b, twopi, g;
long i,j;
// n-1 k
// DFT ==> X[k] = Σ x[n]e^(-j2π - n)
// n=0 N
twopi = 2.0 * M_PI;
for (j = 0; j < ns; j++){
g = twopi * dx * ds * (double)j;
for (i = 0, a = 0, b = 0; i < number; i++) {
a += lsf[i] * cos(g * (double)(i));
b += lsf[i] * sin(g * (double)(i));
}
sfr[j] = sqrt(a * a + b * b);
}
return 0;
}
matlab汉明窗dft,Mitre_sfr代码注解(四) LSF / 汉明窗 / SFR(DFT)计算相关推荐
- 关于MATLAB实现的数字信号处理(四)
文章目录 3.离散傅里叶变换(DFT) 3.1 用C语言实现DFT 3.2 MATLAB实现DFT 3.3 结果对比 关于MATLAB实现以及C语言实现离散傅里叶变换(DFT)--傅里叶变换的学习与认 ...
- FFT频谱分析(补零、频谱泄露、栅栏效应、加窗、细化、频谱混叠、插值),Matlab、C语言代码
文章目录 引言 Matlab FFT函数 频谱混叠 栅栏效应 细化技术 什么是细化技术? 细化FFT技术的应用: Zoom-FFT算法介绍及MATLAB实现 Zoom-FFT根本没有实现"细 ...
- matlab中调用java代码_Matlab中调用第三方Java代码
在Java中采用Matlab JA Builder可以实现调用m文件,采用这样的方式,可在Matlab的M文件中,直接调用Java类.这种方式可以表示为Java--> Matlab( m, Ja ...
- 【Matlab开发】MATLAB编译C/C++代码
在使用MATLAB编译C/C++代码时,C/C++代码中要使用一个mexFunction函数,那么这个函数是如何定义,在编译时又是如何实现的呢?下面我将使用实例进行说明. 如一个简单的函数: doub ...
- python直方图均衡化代码_基于matlab的直方图均衡化代码
基于matlab的直方图均衡化代码 2007-04-15 20:15 clear all %一,图像的预处理,读入彩***像将其灰度化 PS=imread('1.jpg'); ...
- 百度图神经网络——论文节点比赛baseline代码注解
文章目录 一.项目介绍 二.BaseLine内容注解 1.Config部分注解 2. 数据读取与处理部分 2.1 边数据的加载与处理 2.2 数据的完整加载与处理 2.3 数据读取与分割 3. 模型加 ...
- Romberg积分法MATLAB实现(附代码、实例、详解)
第一部分:问题分析 (1)实验题目:龙贝格积分算法 具体实验要求:用matlab编写龙贝格积分的代码,要求代码实现用户输入了被积函数.积分区间.精度之后,龙贝格积分表(T-数表). (2)实验目的:让 ...
- 基于深度神经网络的图像分类与训练系统(MATLAB GUI版,代码+图文详解)
摘要:本博客详细介绍了基于深度神经网络的图像分类与训练系统的MATLAB实现代码,包括GUI界面和数据集,可选择模型进行图片分类,支持一键训练神经网络.首先介绍了基于GoogleNet.ResNet进 ...
- 直方图均衡化 matlab代码,基于matlab的直方图均衡化代码
基于matlab的直方图均衡化代码 2007-04-15 20:15 clear all %一,图像的预处理,读入彩***像将其灰度化 PS=imread('1.jpg'); ...
- 举例说明使用MATLAB Coder从MATLAB生成C/C++代码步骤
MATLAB Coder可以从MATLAB代码生成独立的.可读性强.可移植的C/C++代码. 使用MATLAB Coder产生代码的3个步骤:准备用于产生代码的MATLAB算法:检查MATLAB代码的 ...
最新文章
- Vue2.0环境安装
- numpy学习2:数组创建方式
- O'Reilly 1500 份问卷调研:2019 年 Serverless 落地到底香不香?
- 在ArcGIS中认识 Python工具箱
- Java简单验证码的识别
- python staticmethod规范_Python Staticmethod可以调用另一个本地方法吗?
- 黑历史有救了,淘宝可以改账号名了!网友:终于可以“重新做人”了
- mysql 多行唯一_mysql – 具有唯一约束的原子多行更新
- zedboard上呼吸灯的实现(第二版)
- 【题解】SDOI2018战略游戏
- 如何判定某个类的职责是否够“单一”?
- FMEA手册第五版学习笔记(一)
- 古代汉语复习资料与练习题(适合王力版教材)
- 安装nvm下载node,npm以及配置的全过程。解析npm下载包使用 -v指令 发现下载的包不存在的原因。
- WPF MVVM框架 漂亮界面风格的WPF
- 电脑PHP动画制作画板,Canvas在线画图—简单制作一个画板
- djyvp计算机电缆参数,DJYVP计算机电缆2x2x1.5型号规格含义
- 物联网竞赛-LoRa和NB-IOT模块学习知识汇总
- 编码器脉冲计数器/2路DI高速计数器Modbus RTU模块
- openEuler Summit | 江大勇:凝聚创新力量 逐梦数字时代星辰大海
热门文章
- android 4.3 用什么微信版本,安卓4.3系统能用微信哪个版本
- PHPWAMP自定义添加PHP版本教程,支持无限添加PHP和Mysql版本
- ios弱网测试_弱网测试方法整理
- linux xbrowser 安装包,xmanager安装包
- FreeRTOS-TaskNotify
- asc怎么用 linux zip_asc文件扩展名,asc文件怎么打开?
- 高仿计算器 双页面浏览器 谷歌内核网页版宝贝类目查询
- OpenCV-Python官方文档的查看
- 明解c语言练习答案,《明解C语言》练习题4-2的实现
- 四川理工学院计算机学院在哪里,四川理工计算机学院