FPGA十年老鸟
十年FPGA码农,十年陈酿十年香!
展开
-
Cordic算法的FPGA实现——Cordic实现sqrt和atan计算的matlab仿真
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档Cordic算法的FPGA实现——Cordic实现sqrt和atan计算的matlab仿真前言仿真实例前言根据上一篇博文,如果已知向量顶点坐标(x,y),通过“合理选择”每次旋转的方向,总可以让向量接近x正半轴。则可以计算出(x+jy)= Aexp(jθ)中的A(幅值),θ(角度)。仿真实例这里我们通过matlab程序来对上述算法进行实现:下面这段程序,我们已知坐标(x,y) = (10000,32767)。我们要求其幅值A,以原创 2022-02-01 23:52:46 · 7045 阅读 · 1 评论 -
Cordic算法的FPGA实现——Cordic算法介绍
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码原创 2022-01-31 23:49:23 · 8250 阅读 · 1 评论 -
Cordic算法的FPGA实现——cordic实现sqrt和atan计算的定点化以及FPGA实现
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档Cordic算法的FPGA实现——cordic实现sqrt和atan计算的定点化以及FPGA实现前言matlab定点化仿真verilog实现前言要用verilog实现Cordic算法,首选需要在matlab上实现定点化仿真。因为该定点化操作比较简单,直接通过程序就可以直接理解了,这里就不多说了,直接看程序matlab定点化仿真1、atan_table要进行定点化,我们将1rad表示为2^29 进行对应。这样原来的atan_tab原创 2022-02-04 15:39:16 · 8187 阅读 · 0 评论 -
Cordic算法的FPGA实现——Cordic实现cos和sin计算的matlab仿真
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档Cordic算法的FPGA实现——Cordic实现cos和sin计算的matlab仿真前言仿真实例前言在第一篇文章中,向量初始位置在(0, 1),目标是旋转到β 角。第一次正转45°,到达 ;第二次继续正转26.555°,这次超过了目标位置β角;所以第三次改为“逆向旋转”,旋转的角度为14.036°,正好达到了目的地 角。这时候,向量V3的顶点坐标即为 (严格的说,需要乘以一个常数,以补偿旋转中忽略的cosθi项)。相当于同时做了SI原创 2022-02-02 21:01:33 · 6820 阅读 · 3 评论 -
利用matlab代码来实现fdatool生成滤波器系数的功能(半带滤波器)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档利用matlab代码来实现fdatool生成滤波器系数的功能(半带滤波器)用matlab设计滤波器时,我们会使用到fdatool工具,首先大概说一下这个工具的使用。假设我们需要设计一个半带抽取滤波器:采样率Fs为122.88MHz。通带Fpass: 10 MHz,带内波动: Apass: 0.001定点化,将系数归一化,设置如下图,确保输入通带的波形和输出波形幅值基本不变。上述操作等效为以下matlab代码:Apass原创 2021-10-11 20:18:26 · 10216 阅读 · 4 评论 -
利用matlab代码来实现fdatool生成滤波器系数的功能(FIR 低通滤波器)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档利用matlab代码来实现fdatool生成滤波器系数的功能(FIR 低通滤波器)用matlab设计滤波器时,我们会使用到fdatool工具,首先大概说一下这个工具的使用。假设我们需要设计一个滤波器:采样率Fs为30.72MHz。通带Fpass: 9 MHz,阻带Fstop: 10MHz带内波动: Apass: 0.1带外抑制: Apass: 80定点化,将系数归一化,设置如下图,确保输入通带的波形和输出波形幅值基本不变原创 2021-10-11 20:14:36 · 9896 阅读 · 0 评论 -
AD9364中信号链路的理解
AD9364中信号链路的理解AD9364信号链路变速滤波的作用半带抽取滤波器总结AD9364信号链路AD9364中有一个变采样滤波的过程如图所示,并且还给了一个例子,以接收为例以上述LTE10M为例,根据LTE协议的定义,LTE10M有效带宽为9M。左右0.5M为保护带宽。尽管上述几个HB滤波器,AD9364提供了固定系数,但为了方便分析我们自己来进行生成。大概先解释一下上面的一个步骤。ADC采样率为245.76MHz,首先经过第一个半带滤波器(HB3),采样率变成122.88MHz,原创 2021-10-12 20:25:57 · 6873 阅读 · 0 评论 -
FFT蝶形算法的verilog实现专题——FFT的matlab到verilog转化过程——第1部分
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档FFT蝶形算法的verilog实现专题——FFT的matlab到verilog转化过程——第1部分功能需求算法方案要点verilog 模块的接口:因为FFT是流水线模式的,即进来64个点,出去64个点进来的顺序为: x(0),x(1),…x(63) 顺序输入,出去的点为X(0),X(32),X(16),X(48)…倒序输出。具体问题具体分析:从我们的具体需求分析,输入13个复数,后面53个都是0,可以对第一阶段运算进行简化原创 2021-11-13 00:09:10 · 8867 阅读 · 2 评论 -
FFT蝶形算法的verilog实现专题——基-4 频率抽取FFT算法matlab实现
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档FFT蝶形算法的verilog实现专题——基-4 频率抽取FFT算法matlab实现基-4 频率抽取FFT公式推导:N为4的整数倍,例如N = 4 16 64 256等一个N 点序列x(n) 的DFT 定义为:其FFT的结果为 X(0),X(1),X(2)…X(N-1)式中:假定N = 4 m ,式(1) 先按时域前、后分开,可写成:式(2) 可进一步改写为:在频域X(k) 上将k 分解后进行抽取,分别令k 等于4r,原创 2021-11-06 15:33:25 · 10104 阅读 · 3 评论 -
FFT蝶形算法的verilog实现专题——从FFT算法的定义开始入手
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档FFT蝶形算法的verilog实现专题——从FFT算法的定义开始入手先从FFT的定义入手:一个N 点序列x(n) 的DFT 定义为:下面用MATLAB程序来面熟一下上述这个式子:(程序段1)clear all;close all;clc;x =[1,2,-1,3,1,4,-1,5];W = [exp(-j*2*pi/8*0),exp(-j*2*pi/8*1),exp(-j*2*pi/8*2),exp(-j*2*pi/8*3原创 2021-11-06 15:21:40 · 5776 阅读 · 1 评论 -
FFT蝶形算法的verilog实现专题_目录
FFT蝶形算法的verilog实现专题_目录之前根据自己的兴趣,写过一个FFT算法用verilog实现的代码,这个代码还是有点复杂的,记得当时好像花费了一个月才搞完,现在很久不看,再次翻出来的时候自己都已经看不太懂了。为了能够将自己的积累的经验不至于流失,重新整理将博文记录于此,以备不时之需。当然如果能够帮助到正在被FFT算法绕的云里雾里的迷途的羔羊们的话,那也就更好了。以下是准备进行博文撰写的目录,大概分了如下几点,敬请期待:1、FFT算法的一些概念和要点2、64点FFT verilog实现的需求原创 2021-11-06 15:14:02 · 6231 阅读 · 0 评论 -
FFT蝶形算法的verilog实现专题——64点FFT 蝶形算法完整展开
FFT蝶形算法的verilog实现专题——64点FFT 蝶形算法完整展开针对上一篇博文继续分解因为64点FFT进行分组后,每组还是有16个数据,这需要对每组的16个数据在进行分组,这样才能达到最小运算单位4点FFT。同样的,将A(n),B(n),C(n),D(n)按照上面的分组规则再次分组,A(n)又分出了4个数据组,依此类推,直接用matlab程序来展示(程序段3)close all; clear all; clc;%%%%%%%%%%%stage1N = 64;n = 0:N/4-1;原创 2021-11-06 15:43:55 · 8796 阅读 · 1 评论 -
FPGA信号处理系列文章——码元同步
前面,我们将了锁频环和锁相环,实际上都是为了完成一件事,就是载波同步。锁相环就是为了本地载波与接收载波进行同步。那如果接收信号中还含有码元的话,特别是对于扩频信号而言,是必须进行同步的,如果码元不同步的话,则无法进行能量的累积,进而载波也无法同步。前面我们讲了自相关和互相关,以GPS信号为例,其自相关性能和互相关性能都非常好。自相关表现在:只有码元对齐才有明显的峰值互相关表现在:不同组的码元进行相关是不会出现明显的峰值的因此,通过这种相关特性很容易识别信号中是否包含一组特定的码元。关于粗同步,这里就原创 2022-06-19 22:53:40 · 3192 阅读 · 0 评论 -
FPGA信号处理系列文章——相关与卷积
函数f,g是定义在Rn上的可测函数,f与g的卷积记作f*g,它是其中一个函数反转,并平移后,与另一个函数的乘积的积分,是一个对平移量的函数,也就是:对于定义在整数 Z上的函数f,g,卷积定义为这里一样把函数定义域以外的值当成零,所以可以扩展函数到所有整数上(如果本来不是的话)。当g(n)的支撑集(support)为有限长度M,上式会变成有限和:卷积定理指出,函数卷积的傅里叶变换是函数傅里叶变换的乘积。即,一个域中的卷积相当于另一个域中的乘积,例如时域中的卷积就对应于频域中的乘积。计算卷积的方原创 2022-06-19 14:59:25 · 2816 阅读 · 0 评论 -
FPGA信号处理系列文章——窗函数法FIR滤波器设计
根据具体的滤波要求,计算出FIR滤波器的系数,或者说滤波器的单位冲激响应,是FIR滤波器设计的主要内容之一。计算滤波器系数的方法多种多样,最常用的是窗函数法、频率采样法及最优化方法。我们这里主要理解一下窗函数法的实现。窗函数法的基本思想是要选取某一种合适的理想频率选择滤波器,这种滤波器的单位冲激响应为非因果、无线长;然后对理想的冲激响应加窗,可以得到一个线性相位和因果的FIR滤波器。这种方法的重点在于选择某种恰当的窗函数和一种合适的理想滤波器。若用表示理想的频率选择滤波器,它在整个通带内有单位幅度的增益和原创 2022-06-19 09:51:30 · 6848 阅读 · 0 评论 -
FPGA信号处理系列文章——数字锁相环
1、捕获、锁定与跟踪的概念捕获,是指从输入信号加到锁相环输入端开始开始,一直到环路达到锁定的全过程。锁相环的锁定是指锁相环的输出频率等于输入频率,而输出信号的相位跟随输入信号的变化而变化。跟踪是指锁相环锁定后的状态,一旦锁相环进入锁定状态,若输入信号产生了相位的变化,环路就调整压控振荡器的控制电压使得其输出信号的相位跟随输入信号的相位变化,即保持恒定的稳态相位差。这种状态称为跟踪或同步状态。2、捕获时间和稳态相差捕获时间是指捕获过程所需的时间。捕获时间的大小不仅与环路参数有关,而且与起始状态有关。原创 2022-06-13 23:18:16 · 2880 阅读 · 1 评论 -
FPGA信号处理系列文章——数字锁频环
锁相环路捕获时间直接与初始频差相关,初始频差越大,捕获时间越长。另一方面,锁相环的捕获带宽较小。因此,十分有必要在锁相环路前加一级锁频环路,将载波频偏控制在一较小范围内,便于锁相环的快速捕获。这里首先要介绍一下一个新的概念,科斯塔斯环科斯塔斯环是一种基于锁相环 (PLL) 的电路,用于从抑制载波调制信号(例如双边带抑制载波信号)和相位调制信号(例如 BPSK、QPSK)中恢复载波频率。 它是由通用电气公司的 John P. Costas 在 1950 年代发明的。它的发明对现代数字通信产生了深远的影响。原创 2022-06-12 22:17:21 · 5636 阅读 · 4 评论 -
FPGA信号处理系列文章——DDS的性能和误差分析
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录clc;clear all;close all%NCO的仿真%DDS部分杂散主要有两个来源:%1、相位截断误差引起的杂散%2、幅度量化引起的杂散%3、%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%第一部分:没有任何精度损失nco_width = 20;phase_width = 20; %相位位数决定了ROM的深度为2^12sim_len = 2^nco_width;原创 2022-03-08 23:53:03 · 8353 阅读 · 2 评论 -
FPGA信号处理系列文章——卷积编码与维特比译码
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档FPGA信号处理系列文章——卷积编码与维特比译码前言卷积编码的概念和定义卷积编码算法理解卷积编码FPGA实现前言之前在 北斗二号导航系统中的RDSS系统以及Galileo系统中接触到了其电文是有卷积编码的,这里我们就来回顾一下卷积编码和维特比译码的相关内容卷积编码的概念和定义通常以 (n, k, L) 来描述卷积编码• k 表示编码器的 输入码元数• n 表示编码器的 输出码元数• L表示编码器的 约束长度由输入的 k 个原创 2022-03-06 10:59:24 · 7575 阅读 · 0 评论 -
FPGA信号处理系列文章——CIC滤波器的再理解
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档FPGA信号处理系列文章——CIC滤波器的再理解这次我们结合xilinx CIC IP核的手册进行再次理解。对这个式子我们再来理解它的一些含义N是CIC的阶数R是速率变化(抽取或者插值)M是微分延迟前面这个式子是平均滑动滤波器的表现形式,后面这个式子是递归的表现形式,两者效果是一样的。由此可见,CIC滤波器是平均滑动滤波器的一种特殊实现方式,我们可以使用第一个式子来理解一下其特点。我们就以手册上这个例子来进行自己的分析R =原创 2022-02-19 19:15:06 · 11510 阅读 · 2 评论 -
FPGA信号处理系列文章——用matlab理解CIC滤波器的原理
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档FPGA信号处理系列文章——用matlab理解CIC滤波器的原理滑动平均滤波器滑动平均滤波器的递归实现CIC抽取滤波器CIC插值滤波器总结滑动平均滤波器为了理解级联积分梳状(CIC)滤波器,首先让我们了解滑动平均滤波器。这种滤波器在时域上最大的特点就是所有的系数都相等,并且为常数。滤波器的输入输出关系可以表示为如下简单的算术平均关系Y(n) = 1/N*(x(n) + x(n-1)+…… +x(n-(N-1)))也就是说,滤波器原创 2022-02-15 21:43:58 · 7774 阅读 · 0 评论 -
FPGA信号处理系列文章——Xilinx FIR IP的matlab模型的使用
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码原创 2022-01-09 22:26:28 · 8111 阅读 · 3 评论 -
FPGA信号处理系列文章——CRC运算的实现
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档FPGA信号处理系列文章——CRC运算的实现前言CRC运算的框图matlab模型verilog实现总结前言很多协议都会用到CRC校验,这里我就不多说废话了,我们关心的是如何进行FPGA的实现。CRC运算的框图CRC校验的类型有很多种,但基本都是使用一个生成多相式来产生,只是多项式不同而已,这里就用一个比较普遍的来举例CCITT-16生成多项式:g(x)= x16 + x15 + x5 +1matlab模型msg = rou原创 2022-01-06 23:02:26 · 5571 阅读 · 5 评论 -
FPGA信号处理系列文章——多相滤波器解决Xilinx工程问题
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档FPGA信号处理系列文章——多相滤波器解决Xilinx工程问题前言实际工程场景FIR IP可以例化,但浪费大量DSP资源FIR IP 无法进行例化的情况直接滤波和多相分解matlab对比直接滤波和多相分解+系数对称化matlab对比前言上一篇我们讲到了多相滤波器中需要用到一些技术处理方式,包括按照相位均匀划分把数字滤波器的系统函数H(z)分解成若干个具有不同相位的组,形成多个分支,在每个分支上实现滤波;以及每个分支上,对系数进行对原创 2022-01-01 11:12:30 · 8711 阅读 · 2 评论 -
FPGA信号处理系列文章——深入浅出理解多相滤波器
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档多相滤波器前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言Nobel恒等式的大意如下:先进行抽取或者插值,再进行线性滤波 先进行线性滤波,再进行抽取或者插值这两者是可以等价的。首先说这里的抽取和插值指的是数字意义上的,并没有后面的低通滤波来恢复原来的信号。插值插得就是零。这个道理其实很简单:如果先过线性滤波,再抽取,那么抽取掉的那些原创 2022-01-01 10:05:18 · 13363 阅读 · 4 评论 -
FPGA信号处理系列文章——定点数据截位处理
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档FPGA信号处理系列文章——截位处理前言截位方法TruncationNon-symmetric Rounding to PositiveNon-symmetric Rounding to Negative二、使用步骤1.引入库2.读入数据总结前言在我们FPGA的设计中,截位和扩位都是很常见的操作。有截高位、低位和扩高位、扩低位之分。1、截高位表示截取掉信号过多的符号位,在我们确认该数据确实不需要这么宽的位宽时,直接可以把高位符号位原创 2021-12-22 23:33:00 · 11132 阅读 · 1 评论 -
FPGA信号处理系列文章——分数倍插值抽取滤波器(二)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档FPGA信号处理系列文章——分数倍插值抽取滤波器(二)实例FIR系数生成IP的设置总结实例接上一节,我们以这个例子来进行讲解如何生成COE系数以及例化IP核系统时钟245.76,采样率23.04,信号带宽20M的零中频IQ信号,变采样到30.72采样率23.04M,信号带宽20M我们要变采样到30.72。那么n = 4,m = 3,a = 10,2f = 23.04为了避免镜像,需fpass = 10,fstop = 13.0原创 2021-12-20 22:44:40 · 7977 阅读 · 3 评论 -
FPGA信号处理系列文章——分数倍插值抽取滤波器(一)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档FPGA信号处理系列文章——分数倍插值抽取滤波器(一)前言信号流matlab模型频谱示意图分析总结前言变采样率滤波器不仅仅存在整数倍插值和整数倍抽取的情况,还会存在分数倍插值抽取的情况。那这种情况下要怎么处理呢信号流分数倍插值抽取滤波器的信号流是什么?信号先进行插值,再进行FIR滤波,最后进行抽取matlab模型%signal 定点化数据输入coeff_val_fir = importdata('fir.coe');si原创 2021-12-19 23:12:57 · 9266 阅读 · 1 评论 -
FPGA信号处理系列文章——FIR半带插值滤波器-1个时钟2个采样点的优化处理
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档FPGA信号处理系列文章——FIR半带插值滤波器-1个时钟2个采样点的优化处理前言设计参数常规IP设置优化处理总结前言假如目前有一个这样的需求,在245.76MHz下需要得到一个491.52MHz的采样率的信号,需要怎么处理?这种情况下也可以用2倍插值滤波器的,输入时245.76MHz采样率的信号,输出为491.52MHz的采样率的信号。这种时候如果要用xilinx IP核的时候有个小技巧可以节省很多乘法器。设计参数半带插值,Fs原创 2021-12-06 20:18:05 · 6730 阅读 · 3 评论 -
FPGA信号处理系列文章——FIR半带插值滤波器
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档FPGA信号处理系列文章——FIR半带插值滤波器信号流matlab模型FIR系数生成IP核的设置注意事项信号流半带插值滤波器的信号流是什么?信号先进行插值,再进行FIR滤波。matlab模型%signal 定点化数据输入coeff_val_fir = importdata('hb2.coe');signal1 = upsample(signal_f,2);signal_f = filter(coeff_val_fir,1,s原创 2021-12-02 20:43:02 · 8731 阅读 · 0 评论 -
FPGA信号处理系列文章——FIR半带抽取滤波器
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档FPGA信号处理系列文章——FIR半带抽取滤波器信号流matlab模型FIR系数生成IP核的设置注意事项信号流半带抽取滤波器的信号流是什么?信号先进行FIR滤波,然后进行抽取。matlab模型%signal 定点化数据输入coeff_val_fir = importdata('hb2.coe');signal_f = filter(coeff_val_fir,1,signal);signal1 = downsample(si原创 2021-11-30 23:09:59 · 10148 阅读 · 1 评论