自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(88)
  • 资源 (1)
  • 收藏
  • 关注

原创 linux动态库的加载

加载完后,链接器会解析可执行文件中对动态库函数的引用,它查找动态库中的符号表,将程序中的符号替换为库中的实际地址,这个过程确保了程序在调用动态库中函数时能够找到正确的地址。链接器解析可执行文件中的依赖信息,识别出程序需要调用的函数和变量是否位于动态库中,这通常涉及到检查可执行文件的重定位表和符号表。找到动态库会,链接器会加载这些库到程序的虚拟地址空间中,通常是mmap完成,会在内存中映射文件的代码和数据段。特别是那些与共享库依赖关系相关的信息,这些信息通常是在编译和链接的阶段由链接器添加到可执行文件中的。

2024-03-27 19:46:27 346

原创 多普勒频移和速度关系

由于探头发射接收是同一个,发射声束经运动物体反射后又被自己接收,所以发生了2次多普勒效应。由于血流速度和扫描速度有夹角,V为矢量,换成标量为V * Cos(theta)theta: 方向角,速度矢量和声束轴线之间的夹角(在测量的时候为偏转角和校正角度的和)Fd: 多普勒频移(频率的移动,假设接收频率为F,那么Fd = F - F0)这个速度是接收者和生源的相对速度,假设这里是靠近,那么速度就是C + V。波长 = 速度 / 频率 = C / F0。频率 = 速度 / 波长 = 1 / 周期。

2024-03-09 13:49:24 1052

原创 tex2D使用学习

项目中使用到了纹理进行插值的加速,因此记录一些自己在学习tex2D的一些过程。

2023-11-30 21:20:20 591

原创 最小二乘法

1. 当一个位置斜率变化较大时,说明海参矩阵的值比较大(注意是斜率变化,不是函数值变化),那相应的inv(H)的值就会比较小,这个时候步进会慢些。上述两点,相对于梯度下降法来说,尤其好理解的是,平缓区域的时候,梯度下降法步进会很慢,收敛也就相应的比较慢,但是牛顿法却很快。2. 当一个位置比较平缓,斜率变化较小时,说明H矩阵值小,相应的inv(H)会比较大,步进会比较大。为什么这里使用到了海参矩阵就可以快速的收敛呢?

2023-11-25 15:36:00 478

原创 Cuda cmake支持C++17

项目中cuda的编译需要使用到C++17的特性,但是自己在设置C++17的时候,一直不生效,最后找到一种生效的方式。1. 设置CMAKE_CUDA_STANDARD。2. 设置nvcc编译选项。

2023-11-07 17:05:38 587

原创 C++变参模板的使用

但是这种方式对于我个人遇到的问题有点不适用,我需要的是第一是数据指针,然后第二个参数、第三个参数是数据的宽高,然后后面才是变参,这样递归处理的话不行。1. 使用编译器if常量表达式。上述折叠表达式存在同样的问题。2. C17折叠表达式。3. 变种折叠表达式。

2023-11-03 19:32:47 142

原创 nsight computer运行失败问题

项目中有部分CUDA代码耗时严重,所以想用工具进行统计,直接用visual profile能出来大致的结果,但是感觉还不够详细,因此想要使用nsight compute进行统计。原因是最新版本的Nsight compute抛弃了部分显卡的支持,因此需要回退到2019.5.1的版本才能运行。使用最新版本的nsight compute进行统计,老是报错:显示不支持当前显卡。

2023-09-08 21:22:54 554

原创 cuda显存访问耗时

项目中有个数据量大小为5195 * 512 * 128float = 1.268G的显存,发现有个函数调用很耗时,函数里面就是对这个显存进行128个元素求和,得到一个5195 * 512的图像。

2023-09-07 19:47:55 232

原创 openmp和avx配置

项目中数据拷贝慢(使用的是memcpy),希望能加速拷贝,所以尝试了使用avx的流方式,和openmp方式处理。不同函数配置的-mxxx不同,如果出现类似上述错误,需要去查看。需要配置cmakeLists。代码中使用了上述openmp语句,但是运行无效。CMakeLists需要配置。注意配置的时候是小写。

2023-08-03 15:07:15 246

原创 简单动态库调用CMakeLists配置

动态库生成的CMakeLists.txt。fun.h和fun.cpp。

2023-07-28 21:07:10 368

原创 gpreftool使用

原因,需要安装autoconf。3. 进入解压文件夹。

2023-07-20 19:41:39 139

原创 find和grep各个参数

grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’),说明:find命令从指定的起始目录开始,递归地搜索其各个子目录,查找满足寻找条件的文件并对之采取相关的操作。默认情况区分大小写,-mtime -n +n #按文件更改时间来查找文件,-n指n天以内,+n指n天以前。-ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前。一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

2023-07-08 16:34:53 153

原创 LeakTracer代码学习(1)

项目中有的时候会产生内存泄漏,以往的经验,检测工具更倾向于使用LeakTracer进行检测泄漏问题,但是直接使用会有些问题,比如堆栈不全都是?等问题,该专题希望自己能够坚持将LeakTracer的源码梳理清楚,以供后续的定制化开发,也可以根据这个源码的学历,扩充下自己的知识面。测试发现,无论这个函数定义在main.cpp里面,还是另外一个test.cpp,只要编译或者链接到了执行程序,都会在执行main之前执行上述函数。第 一个字符串,表示是什么函数,第二个参数就是libc的标准函数,第三个是什么?

2023-07-08 12:00:25 359

原创 交叉编译配置

项目中存在在x86的linux系统上编译arm版本代码的需求,这个时候就涉及到交叉编译了,下面记录下项目中别的人cmake配置,方便后续学习。

2023-07-08 10:01:09 211

原创 调用cuda版本的静态库 Cmake配置

--静态库的头文件。1. 配置好依赖的静态库头文件和库。2. 配置好cuda本身依赖的库。

2023-07-08 09:51:56 451

原创 4.28 周期信号的傅里叶变换

非周期信号的谱之所以是连续的,是因为非周期信号相当于信号是无穷大的,那w -> 0,因此就演变成了连续谱了。,w谱线之间拼起来的连续谱了,由于无穷小的量我们看不到它,那怎么办呢?我们就把Fn放大T倍(无穷大倍),就生成了F(jw)因此傅里叶变换和傅里叶级数不是一个含义,简单理解是F(jw)是Fn的T倍。

2023-07-01 17:32:39 569

原创 4.28 白噪声功率谱密度的估计

什么仿真的白噪声波形是均匀的,均匀的特点是相关函数在0时刻是相关的(自己和自己相关的)0以外时刻都互相不相关。

2023-07-01 17:16:52 302

原创 4.27 功率谱

1处解释,由于上述信号是截断信号,只有-T/2 ~ T/2有有效信号,因此有了1式。自相关函数和他的能量谱或者功率谱构成傅里叶变换对。能量信号和能量密度构成傅里叶变换对。功率信号和功率密度构成傅里叶变换对。功率信号能量一定是无穷大的。

2023-07-01 17:14:25 476

原创 4.26 能量谱

上述函数使用时域计算就很复杂,但是使用帕斯瓦尔就比较简单。

2023-07-01 16:47:59 138

原创 4.24 频域微积分特性

。。

2023-07-01 16:41:47 306

原创 4.23 时域微积分特性

2式两边求导即可推出时域微分特性。时域微分还有个证明方式。

2023-07-01 16:23:25 407

原创 4.22. 卷积定理

我们知道卷积运算是为了求系统的零状态响应的,即,如果输入给系统的信号是f(t),系统函数是h(t),那系统的输出是什么?就是按照上述方式卷积得到。

2023-07-01 15:59:19 193

原创 常用傅里叶变换对 & 傅里叶变换性质

记录下常用的傅里叶变换对。

2023-07-01 14:21:42 1069

原创 ssh远程启动桌面程序

背景:当前项目开发时,如果想远程控制机器启动,必须用VNC连接,或者使用别的远程工具,然后远程到桌面之后,在远程桌面的基础上开启终端,启动桌面应用程序,这样很不方便,如果直接用xshll ssh连上机器启动应用程序,会报这个问题:解决方法:

2023-06-08 19:49:38 381

原创 基于基线的翻转和平移

如上所示一根线,其中红色位置表示的是baseLine位置,上面是一根线baseLine不同的时候进行翻转的情况,

2023-05-06 17:47:17 80 1

原创 带错误检测的CUDA资源管理

为什么使用宏定义,而不是函数定义,是因为函数定义的话,如果希望在出错误的时候直接输出出错位置的文件和行号,就需要在使用接口的时候,将__FILE__和__LINE__传入进去,有点麻烦,因此使用了宏定义的方式。项目中发现很多cuda代码很冗余,主要是有一些cuda内存相关的操作,比如cudaMemcpy之后,要进行错误检测,所以修改了一版,实现接口内部自己检测,这样代码看起来不会那么乱。

2023-04-23 19:30:46 111

原创 matlab调用C++接口

3. 包装函数(转接函数)里面去调用真正需要调用的C++逻辑。2. matlab去编译一个C++的包装函数(转接函数)1. 需要安装mingw编译器。

2023-04-18 19:34:28 455

原创 malloc hook进行内存泄漏检测

CMakeLists.txt和相应的memory_leak.cpp文件。记录下使用malloc的hook形式,写个小的demo,并记录遇到的问题。

2023-04-14 19:31:02 784

原创 opencv轮廓内所有点的获取

由于A提供的点有可能是不连续的,所以可能需要进行一个插值,当然这个可以做可以不做,看具体误差要求。在图像区域绘制一个ROI,可能是任意形状的,然后A会将轮廓的一些点传给模块B,让B去计算参数。项目中有个需求点,涉及到两个模块,A、B。获取该ROI内的所有点数据。

2023-04-12 11:04:51 772 1

原创 多项式拟合曲线对比

项目中有些位置使用了多项式拟合曲线,进行了几种方式的实现,效果都不是特别理想,低阶拟合还基本OK,但是高阶拟合效果就不好,下面是效果较差的2种方式实现的代码,后期继续查看为什么效果不好。手写了一版多项式的解法,效果还不错,对比下面两种方式,对于任意阶数拟合效果都很好。

2023-04-11 16:27:33 298

原创 使用LD_PRELOAD加载malloc free

项目代码中发现运行过程中出现一些异常的内存增加,理论上应该是平稳的,不知道为什么增加,所以想要找一个工具进行监测,但是并没有搜到合适的,网上有资料说使用valgrind,但是由于这个工具运行起来拖慢程序太多,所以就不太适用。不过在查找的过程中,想到是不是可以自己实现一个小的工具来检测这个东西,所以就搜到了预加载的相关内容,关于预加载的详细原理,后续再整理,这里只介绍实现。myMalloc.c里面使用到了printf函数,这个函数内部会调用malloc,然后形成一个死循环的递归,所以出错,应该这样。

2023-04-01 14:49:04 474 1

原创 std::dynamic_pointer_cast转换失败问题

std::dynamic_pointer_cast转换失败问题

2023-03-31 17:30:05 358

原创 matlab中ColorMap提取

如果C++工程中希望获取到一个ColorMap的映射表,比如是256 * 3的RGB映射表,怎么通过Matlab生成。

2023-03-08 10:14:47 325

原创 lspci命令整理

lspci -tv --树形结构显示设备上所有pcie设备,并显示简要信息。lspci -xxx-d 8086:8c22 --查看8086:8c22设备配置空间的所有内容。lspci -xxx -s 00:1f.3 --查看00:1f.3设备配置空间的所有内容。lspci -vv -d 8086:8c22 --查看8086:8c22设备的的详细信息。lspci -vv -s 00:1f.3 --查看00:1f.3设备的详细信息。

2022-12-09 20:17:00 9713

原创 “状态变化”模式之 Memento模式(备忘录)

在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。-----设计模式 GOF备忘录(momento)存储原发器(Originator)对象的内部状态,在需要的时候恢复原发器状态momento模式的核心是信息隐藏,即Originator需要向外隐藏信息,保持其封装性。但同时又需要将状态保持到外界(Momento)这个模式看起来有点过时,因为我们有很多序列化的手段,但是我们需要知道该模式的思想。

2022-11-18 13:26:57 300

原创 18. “状态变化”模式 之State模式(状态模式)

允许一个对象在其内部状态改变的时候改变它的行为(其实里里面使用的是多态,即前面代码中NetworkProcessor中维护的NetworkState *pState;)。从而使对象看起来似乎修改了其行为。------《设计模式》GOFState模式将所有与一个特定状态相关的行为(Operation1、2、3)都放入到一个State的子类对象中,在对象状态切换时,切换相应的对象;但同时维持State的接口,这样实现了具体操作于状态转换之间的解耦。

2022-11-02 23:24:40 184

原创 17. “接口隔离“模式之 Mediator模式(中介者)

用一个中介对象来封装(封装变化)一些列的对象交互。中介者使个对象不需要显式的互相引用(编译时依赖 -> 运行时依赖),从而使其耦合松散(管理变化),而且可以独立地改变他们之间的交互。----《设计模式》GOF将多个对象间复杂的关联关系解耦,Mediator模式将多个对象间的控制逻辑进行集中管理,变“多个对象互相关联”为“多个对象和一个中介者关联”,简化了系统的维护,抵御了可能的变化。随着控制逻辑的复杂化,Mediator具体对象的实现可能相当复杂。这时候可对Mediator对象进行给你分解处理。

2022-11-01 23:36:50 89

原创 16. “接口隔离模式”之 适配器模式

将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。-----《设计模式》GOFAdapter模式主要用于“希望复用一些现存的类,但是接口又与复用环境不一致的情况”,在遗留代码复用、类库迁移等方面非常有用。GOF 23定义了两种Adapter模式的实现结构:对象适配器和类适配器。但类适配器是用过“多继承”的实现方式,一般不推荐使用。对象适配器采用“对象组合”的方式,更符合松耦合精神。

2022-11-01 23:03:44 100

原创 15. “接口隔离模式”之 Proxy模式

为其他对象提供一种代理以控制(隔离,使用接口)对这个对象的访问。----《设计模式》GOF“增加一层间接层”是软件系统中对很多复杂问题的一种常见解决方法。在面向对象系统中,直接使用某些对象会带来很多问题,作为间接层的proxy对象便是解决这一问题的常用手段具体proxy模式的实现方法、实现粒度都差别很大(即上面ver2代码中SubjectProxy的process方法),有些可能对打个对象做细粒度的控制,如copy on write技术,有些可能对组件模块提供抽象代理层,在架构层次对对象做proxy。

2022-11-01 22:32:53 262

原创 14. 接口隔离模式之Facade模式(门面模式/外观模式)

比如数据访问系统,数据访问会牵扯到很多方面的对象,比如连接对象,命令对象,数据表,参数对象。。。如果不加约束,不考虑任何设计的话,很容易就会写出A方案这种,外部使用对象和内部的命令对象、数据表...直接耦合,而且后续内部如果进行修改,也会直接影响到外部。为系统中的一组接口提供一个一致(稳定)的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用(复用)

2022-10-29 13:38:02 236

C++多线程cuda显存申请性能优化

C++多线程cuda显存申请性能优化

2022-08-17

主机端多线程cuda调用

主机端多线程cuda调用

2022-08-15

直流升压与逆变

直流升压与逆变,调节占空比来调节升压等级,并实现逆变

2014-04-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除