自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(123)
  • 收藏
  • 关注

原创 C语言信号处理,离线版(全域、后处理)中值滤波和低通滤波

对于一些数据,需要在pc或者云端进行滤波处理,比如这里的中值(去基线)和低通(去毛刺)。因为平台强大,当数据量大时,如果滤波做的不是太复杂,或者说做的比较简单,那么处理起来还是比较快的,那么就能实用。这里有个例子,因为是后处理,则信号处理前是多长(多少点),处理后就是多少点。对于中值滤波,需要将边沿点进行扩展(补点),或者在边沿进行窗口缩小处理。对于低通滤波,则确定需要对边沿进行补点,并合理处理延时。

2024-09-19 17:14:59 422

原创 GitLab权限及设置

开发中遇到要将自己这块的代码上传到Git,由其他组的同事拉取后继续开发。上传代码后需要将对应同事设置权限,开始设置成了Developer,但其实是错了,应该是Reporter。之前很少关注这些,项目的权限,一般由专门的管理人员设置。但自己创建的项目自己可以设置权限。

2024-09-12 18:04:27 500

原创 实时(按帧)处理的低通滤波C语言实现

对前2秒数据,计算第0.5秒到1.5秒数据,即第128点到384点,滤波数据起始点设置在第128(数据起点)+64(滤波器半长)+ 1=193点,易知此点前有192点,远大于滤波器长的128点;但是,滤波器越长,计算量越大。matlab看滤波路效果,128阶的够用了。低通滤波采用一般的FIR滤波器,因为本次任务,允许的延迟较多,或者说前面损失的信号可以较多,因此,涉及一个很高阶的FIR滤波器,前面的信号点可以去掉,以及,考虑延时,当前时刻向前推一个时刻(当前帧处理的最后一点的时刻)之后的点,也先不处理。

2024-09-11 18:07:21 428

原创 Git撤销push

需要注意的是,无论是用reflog还是log,只要用reset,都是针对commit的,都需要再push一下!如果之后有别人提交的版本,或者有不需要删除的版本,即,想只撤销某个版本的push,而不是将其后的版本都撤销,那么需要采用revert来做,当然,目标更恰当的说,是变成了删除某指定版本了!注意,其中git reflog是看push的版本号,而不是用git log!需要解决一个问题是:加hard参数,有时会报错,即无权限。另外,下面这个,是不需要用版本号的,但是基本是撤销上个版本的psuh。

2024-09-10 18:23:39 899

原创 快速排序代码问题以及一种改进的应用

第二,由于逐点滤波时,上一个信号点的窗口数据排序后,在下一个信号点甚至后面很多个信号点的窗口数据排序时,有一定的重复利用价值,特别是对于下一个点的窗口,只是删除了上次窗口中原始索引最小的值,而只增加了下一个点,那么——简单、统一处理可以是,将新增的信号点放在上一个点的窗口原始索引最小的值的位置,再重新排序——即,利用上一个点的窗口内所有数据点都排序好的优点!对于新增的信号点,再对这个新窗口进行排序,理论上计算复杂度就少很多了。同时,每一帧都需要将索引值减1,并且再记录下窗口内原始索引值最小的值的位置。

2024-09-10 15:42:27 783

原创 Git 撤销commit

对比reset,可以说是revert有三个优点吧,特别是第二点,非常神奇,revert之后的版本,在要合并包含被revert版本的版本(即是被revert版本之后到revert版本之前的这些版本)时,因为这些版本包含这个revert操作,会自动将被revert的版本剔除!这就很低级了,就是直接新建一个版本,再提交。版本号继续增加,之前需要删除的版本也还是在,同样,这个版本及之后的版本,如果再和需要删除的版本之后到这个版本之前的版本合并,则还是会带有要删除的版本,也就是没有revert中第二个优点。

2024-09-06 18:35:24 721

原创 Git撤销add

git add 取消

2024-09-06 17:29:02 655

原创 memcpy()的参数 int 与 unsigned int

看到这个帖子,当字节数是计算式时,确实可能出问题,当为负数时,可能会拷贝很大的字节数(最大2^31),或者,如果内核限制了最大拷贝字节数,则会报错。本来拷贝字节数的参数类型是unsigned int,其实一般写成int型也可以,应该是函数默认强转吧?所以这种最好加上强制转换,即转换成unsigned int。

2024-08-19 17:39:49 192

原创 VS中小数的类型

小数数值,默认是double型,而不是float型。若需要改为float型,除了强制转换,还可以在小数后打一个f,如:float gain = 2.0f;

2024-08-19 17:28:55 166

原创 【转】有未经处理的异常: 0xC00000FD: Stack overflow 问题解决

函数内部变量太大导致超出堆栈尺寸。

2024-08-19 17:24:09 215

原创 未解决:不同类型的数据用memcpy然后打印(printf)出问题

怀疑这个打印值有问题,因为正常0x85值是133,133用有符号的一个字节是表示不了的,即超出表示范围,或者说,int的四个字节,不应该用倒数第二个字节表示0x85,而是要向左再多一位?按说,vaule是32位的,即有四个字节,但是这里转化后只有两个字节,认为是最低的两个字节,拷贝时,也是拷贝低两个字节,且,默认数据是按照小端对齐存储,即两个字节在内存中是按照47 85来存的,所以拷贝时,先拷贝47这个字节,再拷贝85这个字节。且,这里打印也是对的。可见,两个字节是拷贝成功了,顺序也是对的。

2024-08-19 16:29:05 889

原创 BeyondCompare文件夹比较去掉时间戳选项

记得写过,再写一遍吧。

2024-07-16 11:50:48 331

原创 搜狗输入法产品使用说明

看这里,这里记录下。基本都用这个,里面还是有很多小技巧不知道,可以参考下。

2024-07-04 18:23:29 162

原创 git上传本地单独修改的文件_git 只推送变化的文件

只推送本地修改的文件,这篇文章方法可行。

2024-07-04 17:16:52 292

原创 GIT将文件推送到远程仓库,即添加文件

请注意,以上步骤是在命令行中进行的,如果使用图形界面的Git客户端,操作步骤可能会有所不同。推送文件前,确保文件在本地仓库中已经保存,并且只推送必要的文件,避免推送不必要的文件和敏感信息。此命令将把本地的master分支推送到远程仓库的master分支。4. 创建远程仓库:在Git服务商(如GitHub、GitLab等)上创建一个新的仓库。8. 等待推送完成:等待Git将文件推送到远程仓库,完成后命令行会显示推送成功的消息。7. 输入用户名和密码:如果远程仓库需要身份验证,在命令行中输入你的用户名和密码。

2024-07-03 18:02:27 313

原创 MATLAB画图时添加标注显示有效数字的位数,可以编辑此函数

但是这个函数修改后不能保存,只能另存一个函数。保存好后,在图像上右击鼠标,选择"选择文本更新函数...",选中另存的函数文件即可。这个就是改变有效数字的。当然还可以修改其他属性。

2024-06-12 16:38:12 539

原创 【转】VS报错找不到函数

即,C工程中,不小心建了一个C++文件,结果一直没发现,编译就是死活找不到定义的函数,各种检查定义、调用等,都没问题,但是编译就是找不到。修改成C文件后,就找到了。找了好久啊,网上没有说这个的,估计这种错误就我会犯吧。猜想,原因是,C文件和C++文件,编译器分别按照C和C++编译规则来编,编译后函数名不同,所以就找不到了。除了文中列的,还有自己评论的,真的是不小心就自己坑自己。

2024-05-30 11:25:12 302

原创 【转】VS(Visual Studio)更改文件编码

亲测VS里面设置是可以的。但是,一个工作区设置了,再新建工作区,这个选项并不保存,需要的话还是要重新设置。

2024-05-09 09:09:38 537

原创 word文档拆分

最需要注意的是,拆分后原文档不存在了,最多可以显示引用的拆分的文档,如果拆分有误,则无法恢复重来。所以,最好先备份,再进行拆分。可以参考这篇,注意需要全部选中后再创建。

2024-04-08 18:45:00 218

原创 C语言宏定义问题

C语言中,在定义数组时,因为数组长度需要是常量或者宏,尝试将变量按照值不同定义同一个宏的不同值,然后用宏来定义数组长度,结果发现不行。

2024-03-15 17:57:16 348

原创 C语言中,可以在子函数中动态申请一个指向二维数组的内存给调用函数使用么——看ChatGPT的回答——

这个行数组中每个元素,是指针!是的,可以在子函数中动态申请一个指向二维数组的内存,然后将其传递给调用函数使用。即先定义一个指向一维数组(可以当成行数组)的指针,即每个指针指向的是行数组,然后——关键的来了——C语言中,可以在子函数中动态申请一个指向二维数组的内存给调用函数使用么。下面是ChatGPT的回答,太专业了,比网上查的资料都好很多可能。之前还以为不行,只能以一维数组的形式返回呢。或者类似文中主函数调用赋值时写法,写成:p[i][j]

2024-03-15 17:31:56 429

原创 二级指针作为函数参数——可以改变调用函数中传入指针的值(不是指向地址的值哦!)

对里面的程序进行一些修改和补充,调试加更多说明。

2024-03-12 15:27:58 563

原创 数组与指针之二——二级指针之一

这里用了两个&号,表示取两次地址,含义 上是没错的,这报错,是C语法的问题,是将前面一个&当成与操作,所以需要左值是变量或者函数调用形式,而右边只有括号里的&是真取了地址,所以报C2440,无法从int*转换为int**。可见,虽然&a是指向指针的指针,但如第一篇所述,它确是指向4个元素数组的指针,也就是指向一个行数组的首个元素,是有限制的,类型是int (*)[4],并不表示是指向一个int变量的地址,即int **。所以,重点来了,对于一维数组,这种二级指针其实是多此一举了,那么对于二维数组呢?

2024-03-08 10:56:16 318

原创 数组与指针之一

从数组与指针组合来看。

2024-03-07 19:55:10 847

原创 【转】房室传导阻滞

房室传导阻滞

2024-03-04 13:59:00 341

原创 VS的__int64和linux的long long

个人理解,__int64是windows系统用,且VC6.0还不能用,且32为系统还不安全。long long是linux编译器g++ gcc等用的,其实是C99的标准。不知道对不,改天可以用g++编译器编译下定义为_int64的变量看看。

2024-02-27 16:08:59 390

原创 【转】linux系统中怎么截屏

linux截屏

2024-02-21 18:31:31 383

原创 linux调用so库之一

可以看他的第一部分,即显式调用。但是会报错,我的版本是64位的Ubuntu 20.04.6 LTS。会发现直接用第一种方式的代码报错,dlopen函数返回是void *型指针,不能匹配原so库中调用函数的函数指针类型。这种是可以调用成功的,直接编译调用程序,生成.out文件执行即可。需要注意的是,dlopen函数打开so库时的路径需要设置为绝对路径。即定义一个函数指针类型,然后调用dlsym函数强制转换此类型。

2024-02-21 18:28:28 495

原创 windows系统用VS环境开发linux程序之一

按照文中所述,确实在本地和远程都有一样的文件夹。本地直接在VS中运行,即打开shell输出打印。在远程虚拟linux系统,则是进入到对应的文件夹,一般是projects,运行./***.out即可打印输出。正常是先建立linux工程,然后再设置连接虚拟linux系统。如果是要编译自己写的程序,则可以建linux空工程。主要有两种方法,一种是在windows中安装linux子系统,即WSL,另一种是windows系统装linux虚拟机。测试过可以设置自动连接,貌似也可以连上本地windows主机的网卡。

2024-02-21 16:59:10 503

原创 C或C++程序编译成dll给JAVA调用,接口函数声明注意

可以给每个接口函数前面加 extern "C" ,也可以像文中一样,直接将所有接口函数加{},一起加。且文中是针对C++编译器,其实也是,这里C++程序默认就是C++编译器了。我是C++程序,本地写C++程序调,随便写接口都可以,只需要将库定义写进去。但是给Java调用,发现是不能找到函数名,就出现上面文章开始的错误。总之,最好按照这种标准格式写,则库可以给各种语言用。

2024-02-05 09:50:11 379

原创 C/C++数组定义时长度之可以用变量么

这个参考资料是百度知道,居然质量还挺好。不管是C还是C++,其实都是动态申请内存,不影响使用,但是要注意释放。也明确说了VS是不可以的。貌似和编译器有关,有些编译器支持变量定义数组长度的。

2024-02-02 14:56:52 447

原创 VS之调用程序对DLL中全局变量的使用

接上篇《》,能够生成DLL,且能调用后,遇到一个问题,即在DLL程序中定义了一些全局变量,应用程序需要使用,本以为可以直接使用,没想到,还是需要设置才可以:这个亲测是对的。

2024-02-01 17:47:16 640

原创 C++结构体数组拷贝问题

先描述问题:dll库中定义的全局变量,在调用程序中只能使用,不能查看(显示未定义),怎样将dll中的全局变量结构体数组,拷贝到调用程序中。除了在调用程序中先定义一个较大的同类型结构体数组(确保数组长度比dll中全局变量结构体数组长),然后拷贝原数组长度的结构体变量外,是否可以用先申请一块和全局变量数组同样大小的内存,然后拷贝原数组这种方法呢?但是,再次调试程序,发现貌似可以。拷贝过去的内存完全可以当原数组一样使用,这是为什么呢?对于x86平台,是可以的。x64平台,编译通过,运行时内存拷贝语句直接报错。

2024-02-01 17:37:28 801

原创 isual Studio(VS) C++程序LNK2005错误,提示“error LNK2005: _XXX已经在xxx.obj中定义”解决方案

先记在这里吧。

2024-01-31 15:33:07 409

原创 手撕重采样,考虑C的实现方式

3、具体来说,插值,频谱变窄,即信号频带压缩了,如果不做处理,信号会包含带宽以外的噪声,所以需要做低通只滤出变窄的信号频带,去掉噪声。考查原始信号时间点和重采样后信号的时间点,一般来说,重采样信号的一个时间点,是处在原始信号的两个信号点之间(若重合,则直接不用计算),根据此时间点到原信号两个信号点的距离,用原信号这两个信号点插值得到重采样信号此点的信号幅值。1、对于原采样率fs,需要重采样到fs1,一般fs和fs1都是整数哈,则先找fs和fs1的最小公倍数,设为m,设m/fs=M,m/fs1 = L。

2024-01-24 11:20:02 1163 1

原创 C和C++结构体初始化的不同

test.htest.c注意上面注释的语句,C语言,用注释语句和下面未注释语句这种初始化结构体rWavePeakHistory_nv都是可以的。但是,C++中则不行,只能用注释语句初始化结构体!main.c结果:编辑器及编译报错:另外,刚开始写错声明数组变量:将extern int32_t rWavePeakHistoryData_nv[RWAVE_PEAK_HISTORY_COUNT * 2];写成:extern int32_t rWavePeakHistoryData_nv;则报间接寻

2024-01-22 18:52:52 368

原创 C内存对齐问题

其中关于内存对齐,讲了结构体以及位域,以及一些容易出错的地方,非常好。下面提到的对齐模数就是上面提到的有效对齐值N。注意,这里讲位域只能用在结构体或联合体中。注意位域对齐,既要考虑自身字节存储时需不需要填充位,又要考虑整体作为结构体存储时需不需要填充字节。

2024-01-19 15:27:09 538

原创 联合体中嵌套结构体,结构体未命名时,结构体成员变量的引用

联合体名.结构体成员变量名。也可以给结构体命名,则使用。联合体.结构体.成员变量名。

2024-01-18 18:04:11 521

原创 指针取值运算符*和++运算符的优先级

可见此时p的值没变,还是指向数组第一个元素,值为1。在实际组合时,是看哪个和变量结合近,就优先执行哪个。具体说,*和++是同等优先级,是对的。先取值,再地址加1。将p又指向第一个元素,略。写的不详细,或者有不对。

2024-01-18 16:56:43 688

原创 C语言位域定义与使用

字节的高位低位,是按照从左到右顺序,取各位操作时,先按照字节顺序,先取低字节再取高字节,即是反过来取的。而在每个字节内部,又是先取低位再取高位,也是反过来的。但是,在取完后放置时,却是需要再反一下,即先取的放高位,后取的放低位,即高低位翻转了!其实也是因为先取的是原数据的低位,后取的是高位,所以放的时候,也是从右往左放,所以最终结果是高低位和取的顺序是反的。b2是第一个字节的第7位到第5位,即0 1 1,但是结果却是110,即6。b3是第二个字节的低4位,即1 0 1 1,结果却是1101,即13。

2024-01-18 15:33:24 466

测试信号,20秒的一个ad数据

测试信号,20秒的一个ad数据

2024-09-11

VS生成C++动态链接库DLL

VS生成C++动态链接库DLL

2024-01-18

空空如也

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

TA关注的人

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