重拾C开发的学习之路

       本人某双非大学本科毕业,专业是电子信息工程。因当年迷失自我,缺少对自身的规划,为了不让毕业即失业的悲剧发生,为了不让父母为自己工作操心,就草草的进了一家民营的通信公司,做通信工程师,见证了通信行业由4G的辉煌走向5G的瓶颈。而自己回过头来一看,发现自己几年工作下来,即没有积累到很牛的技术,也没有走到初级管理层,自己发展很缓慢。我26了,父母也年纪越来越大,但自己还没有拿的出手的能力来接这个家担子,于是就趁今年有时间,就辞职,好好的想一想自己以后的路该怎么走,不能再温水煮青蛙的混下去了。

       6月底离职,现在已经过去了1个多月了,期间我一边学习,一边投简历找工作,同时也在不断的反思自己,重新认识自己。从一开始想往网络运维、网络安全方面发展,到后面直接往C开发方向发展,我逐渐的认识到自己还是适合走纯技术路线。

       为什么要往C开发方向发展呐?一是我有C编程的基础,而是看完郝斌老师的视频,解除了我对编程开发的误解。之前我一直以为要想学好编程必须要会算法,感觉自己很笨,对算法没有一点头绪,现在才知道和写作文一样,认识字并不能写出好文章,需要不断模仿学习,然后形成自己的风格。算法也一样,需不断的学习基础知识,了解计算机运行原理,模仿借鉴已有算法的思想,通过大量的练习,才能写出自己的算法。因此,这坚定我学习C的决心和信心。

       尽管目前我还没有找到工作,总是被人家以缺少开发经验为由拒绝,但是我找到了自己的发展方向,我就可以不断的积蓄力量,等待机会的到来。种一颗树,最好的时间是10年前,其次就是现在,我相信现在并不晚。谨以此文,献给自己,与君共勉!

下面先简单分享一些,学习过程中的一些重点知识:

1.变量的本质就是内存中一段存储空间;变量的数据类型就是向内存申请存储空间的大小。内存是在操作系统的统一管理下使用的。

如   char ch = 'a';   向内存申请1个字节(8个bit位),用来存放字符 a;

       int  i = 1;   向内存申请4个字节(32个bit位),用来存放整数 1;

2.常量

  1)字面常量   如   2;

  2)const修饰常变量,const常属性

       const int *p  ,  int *const p  ,  int const *p区别

        a.  const int *p    ⇔    int const *p

        b.  const int *p含义 p是指向常量整形的指针;

        c.   int *const p含义 p是指向int的常量指针;

        d.   常量指针:const在*前面,表示不能通过指针来改变变量的值;可以指针常量和非 常量;

        e.   常指针:const在*后面,表示指针是一个常量,不能改变指针的指向,可以改变指针所指                向变量的值;不可以指向常量;

  3)#define 定义的标识符常量

    #define MAX 10   //预编译阶段,和# include一样,方便程序中经常使用的常量修改;

  4)枚举常量   enum   把所有的可能取值一一列举出来;

3.static

   1)static 修饰局部变量,局部变量生命周期延长;

   2)static 修饰全局变量,改变了变量的作用域,让静态的全局变量只能在自己所在的源文件内          部使用,出了源文件就无法使用;

  3)static修饰函数,改变了函数的链接属性;外部链接属性——内部链接属性

4.指针

    1)指针就是地址,是内存单元的编号。

    2)指针类型决定了进行解引用操作时,能够访问内存空间的大小。

    3)野指针 :指针指向的位置是不可知的;

       成因:a.未初始化;b.指针越界访问;c.指针指向的内存空间被释放;

不足之处,请多多指教!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在信号处理领域,DOA(Direction of Arrival)估计是一项关键技术,主要用于确定多个信号源到达接收阵列的方向。本文将详细探讨三种ESPRIT(Estimation of Signal Parameters via Rotational Invariance Techniques)算法在DOA估计中的实现,以及它们在MATLAB环境中的具体应用。 ESPRIT算法是由Paul Kailath等人于1986年提出的,其核心思想是利用阵列数据的旋转不变性来估计信号源的角度。这种算法相比传统的 MUSIC(Multiple Signal Classification)算法具有较低的计算复杂度,且无需进行特征值分解,因此在实际应用中颇具优势。 1. 普通ESPRIT算法 普通ESPRIT算法分为两个主要步骤:构造等效旋转不变系统和估计角度。通过空间平移(如延时)构建两个子阵列,使得它们之间的关系具有旋转不变性。然后,通过对子阵列数据进行最小二乘拟合,可以得到信号源的角频率估计,进一步转换为DOA估计。 2. 常规ESPRIT算法实现 在描述中提到的`common_esprit_method1.m`和`common_esprit_method2.m`是两种不同的普通ESPRIT算法实现。它们可能在实现细节上略有差异,比如选择子阵列的方式、参数估计的策略等。MATLAB代码通常会包含预处理步骤(如数据归一化)、子阵列构造、旋转不变性矩阵的建立、最小二乘估计等部分。通过运行这两个文件,可以比较它们在估计精度和计算效率上的异同。 3. TLS_ESPRIT算法 TLS(Total Least Squares)ESPRIT是对普通ESPRIT的优化,它考虑了数据噪声的影响,提高了估计的稳健性。在TLS_ESPRIT算法中,不假设数据噪声是高斯白噪声,而是采用总最小二乘准则来拟合数据。这使得算法在噪声环境下表现更优。`TLS_esprit.m`文件应该包含了TLS_ESPRIT算法的完整实现,包括TLS估计的步骤和旋转不变性矩阵的改进处理。 在实际应用中,选择合适的ESPRIT变体取决于系统条件,例如噪声水平、信号质量以及计算资源。通过MATLAB实现,研究者和工程师可以方便地比较不同算法的效果,并根据需要进行调整和优化。同时,这些代码也为教学和学习DOA估计提供了一个直观的平台,有助于深入理解ESPRIT算法的工作原理。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值