SDR# (SDRSharp)代码讲解 (九)

看完了变量可以看一下三个循环各自代表的功能,来对整个代码结果做一个整体上的理解。首先,最外侧的循环,对应于第48行的for,代表了当前运算对应第几级。第58行,对应于同一级中有几个旋转因子,所以这个循环在结束前的第73行~75行做的运算就是在计算这一级的下一个旋转因子。第62行的for循环,对应于同一级且同一个旋转因子所要做的运算。比如最左侧的第一级,一共就只有一个旋转因子,所以第58行的for循环只做了一次,而这一级中同一个旋转因子W0N用了4次,做了4个小的碟形运算,所以第62行的for循环做了4次。


另外,还可以看一下这3个循环每次变量增加的值,以及变量最大值。48行的for循环对应级的上升,显然,每个级都要做,所以每次增加1,然后级的最大值就是M所以不能超过代码里的变量m。58行的for循环,对应同一级旋转因子,每个旋转因子参与的运算都要做,所以每次增加1,由31页图可知每一级旋转因子的数量正好与这一级碟形运算的距离(碟形大小)相等,比如第二级中有2个旋转因子,而这一级的碟形大小间距就是2,所以这个循环的最大值(即旋转因子数量)就是le2。62行的循环对应于同一级中同一个旋转因子所做的所有运算,同一级同一旋转因子的距离就是用le表示的,所以这个循环的变量增加值就是le,为了遍历序列的所有输入,所以这个循环的最大值是nm1,也就是总长度-1。


看完了以上这些可以说FFT正变换就看懂了。接下来的IFFT其实是利用了傅立叶变换本身的性质,也是调用FFT实现的,并不复杂。如果要把一个复数序列做逆变换,只需要把这个输入序列的虚数部分符号反一反,然后对它做正变换,做完后再乘以一个缩放因子,然后再把它的虚部符号反一反,所得的结果正好就是直接对这个复数序列做逆变换的结果。这个可以从幻灯片第43页看出来,也可以自己进行公示推导。幻灯片第45页也再次做了证明。幻灯片里的取共轭就是实部不变,虚部符号反一反。


对应于代码可以看到第82~85行,先给输入的复数序列的各个元素的虚部加了一个负号,相当于对这个复数序列取共轭,然后87行做了FFT正变换,89行算了缩放因子。91行~95行的循环把前面的FFT正变换结果用缩放因子做了缩放,并对虚部加了负号相当于又做取了一次共轭。和幻灯片第45页的操作基本一致(只有求共轭和除以N的次序反了,但是这个没区别的)。


这样FFT的正变换和逆变换在sdrsharp里的实现就讲完了,看懂这些后再看sdrsharp里其它信号处理代码应该也没什么问题了。


  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值