• Digital filter: low pass filter, high pass filter, band filter, baterworth filter
• https://ww2.mathworks.cn/help/signal/examples/practical-introduction-to-digital-filter-design.html Design filter via matlab: d= designfilt(resp,Name,Value)designs adigitalFil...


https://ww2.mathworks.cn/help/signal/examples/practical-introduction-to-digital-filter-design.html
Design filter via matlab:


d = designfilt(resp,Name,Value) designs a digitalFilter object, d, with response type resp. Specify the filter further using a set of Name,Value pairs. The allowed specification sets depend on the response type, resp, and consist of combinations of the following:

Frequency constraints correspond to the frequencies at which a filter exhibits a desired behavior. Examples include 'PassbandFrequency'and 'CutoffFrequency'. (See the complete list under Name-Value Pair Arguments.) You must always specify the frequency constraints.

Magnitude constraints describe the filter behavior at particular frequency ranges. Examples include 'PassbandRipple' and 'StopbandAttenuation'. (See the complete list under Name-Value Pair Arguments.) designfilt provides default values for magnitude constraints left unspecified. In arbitrary-magnitude designs you must always specify the vectors of desired amplitudes.

'FilterOrder'. Some design methods let you specify the order. Others produce minimum-order designs. That is, they generate the smallest filters that satisfy the specified constraints.

'DesignMethod' is the algorithm used to design the filter. Examples include constrained least squares ('cls') and Kaiser windowing ('kaiserwin'). For some specification sets, there are multiple design methods available to choose from. In other cases, you can use only one method to meet the desired specifications.

Design options are parameters specific to a given design method. Examples include 'Window' for the 'window' method and optimization 'Weights' for arbitrary-magnitude equiripple designs. (See the complete list under Name-Value Pair Arguments.) designfilt provides default values for design options left unspecified.

'SampleRate' is the frequency at which the filter operates. designfilt has a default sample rate of 2 Hz. Using this value is equivalent to working with normalized frequencies.

Note
If you specify an incomplete or inconsistent set of name-value pairs at the command line, designfilt offers to open a Filter Design Assistant. The assistant helps you design the filter and pastes the corrected MATLAB® code on the command line.
If you call designfilt from a script or function with an incorrect set of specifications, designfilt issues an error message with a link to open a Filter Design Assistant. The assistant helps you design the filter, comments out the faulty code in the function or script, and pastes the corrected MATLAB code on the next line.

Use filter in the form dataOut = filter(d,dataIn) to filter a signal with a digitalFilter, d.

Use fvtool to visualize a digitalFilter, d.

Type d.Coefficients to obtain the coefficients of a digitalFilter, d. For IIR filters, the coefficients are expressed as second-order sections.

See digitalFilter for a list of the filtering and analysis functions available for use with digitalFilter objects.




designfilt(d) lets you edit an existing digital filter, d. It opens a Filter Design Assistant populated with the filter’s specifications, which you can then modify. This is the only way you can edit a digitalFilter object. Its properties are otherwise read-only.


FIR Filter Design
Lowpass Filter Specifications
The ideal lowpass filter is one that leaves unchanged all frequency components of a signal below a designated cutoff frequency, , and rejects all components above . Because the impulse response required to implement the ideal lowpass filter is infinitely long, it is impossible to design an ideal FIR lowpass filter. Finite length approximations to the ideal impulse response lead to the presence of ripples in both the passband () and the stopband () of the filter, as well as to a nonzero transition width between passband and stopband.
Both the passband/stopband ripples and the transition width are undesirable but unavoidable deviations from the response of an ideal lowpass filter when approximated with a finite impulse response. These deviations are depicted in the following figure:

Practical FIR designs typically consist of filters that have a transition width and maximum passband and stopband ripples that do not exceed allowable values. In addition to those design specifications, one must select the filter order, or, equivalently, the length of the truncated impulse response.

A useful metaphor for the design specifications in filter design is to think of each specification as one of the angles in the triangle shown in the figure below.

The triangle is used to understand the degrees of freedom available when choosing design specifications. Because the sum of the angles is fixed, one can at most select the values of two of the specifications. The third specification will be determined by the particular design algorithm. Moreover, as with the angles in a triangle, if we make one of the specifications larger/smaller, it will impact one or both of the other specifications.
FIR filters are very attractive because they are inherently stable and can be designed to have linear phase. Nonetheless, these filters can have long transient responses and might prove computationally expensive in certain applications.
Minimum-Order FIR Designs
Minimum-order designs are obtained by specifying passband and stopband frequencies as well as a passband ripple and a stopband attenuation. The design algorithm then chooses the minimum filter length that complies with the specifications.
Design a minimum-order lowpass FIR filter with a passband frequency of 0.37*pi rad/sample, a stopband frequency of 0.43*pi rad/sample (hence the transition width equals 0.06*pi rad/sample), a passband ripple of 1 dB and a stopband attenuation of 30 dB.


Fpass = 0.37;
Fstop = 0.43;
Ap = 1;
Ast = 30;

d = designfilt('lowpassfir','PassbandFrequency',Fpass,...
'StopbandFrequency',Fstop,'PassbandRipple',Ap,'StopbandAttenuation',Ast);

hfvt = fvtool(d);



The resulting filter order can be queried using the filtord function.


N = filtord(d)




N = 39


You can use the info function to get information about the parameters used to design the filter


info(d)




ans = 17x44 char array
'FIR Digital Filter (real)                   '
'-------------------------                   '
'Filter Length  : 40                         '
'Stable         : Yes                        '
'Linear Phase   : Yes (Type 2)               '
'                                            '
'Design Method Information                   '
'Design Algorithm : Equiripple               '
'                                            '
'Design Specifications                       '
'Sample Rate     : N/A (normalized frequency)'
'Response        : Lowpass                   '
'Specification   : Fp,Fst,Ap,Ast             '
'Stopband Atten. : 30 dB                     '
'Passband Ripple : 1 dB                      '
'Stopband Edge   : 0.43                      '
'Passband Edge   : 0.37                      '


Fixed Order, Fixed Transition Width


Fixed-order designs are useful for applications that are sensitive to computational load or impose a limit on the number of filter coefficients. An option is to fix the transition width at the expense of control over the passband ripple/stopband attenuation.
Consider a 30-th order lowpass FIR filter with a passband frequency of 370 Hz, a stopband frequency of 430 Hz, and sample rate of 2 kHz. There are two design methods available for this particular set of specifications: equiripple and least squares. Let us design one filter for each method and compare the results.

N = 30;
Fpass = 370;
Fstop = 430;
Fs = 2000;

% Design method defaults to 'equiripple' when omitted
deq = designfilt('lowpassfir','FilterOrder',N,'PassbandFrequency',Fpass,...
'StopbandFrequency',Fstop,'SampleRate',Fs);

dls = designfilt('lowpassfir','FilterOrder',N,'PassbandFrequency',Fpass,...
'StopbandFrequency',Fstop,'SampleRate',Fs,'DesignMethod','ls');

hfvt = fvtool(deq,dls);
legend(hfvt,'Equiripple design', 'Least-squares design')

Equiripple filters are ideally suited for applications in which a specific tolerance must be met, such as designing a filter with a given minimum stopband attenuation or a given maximum passband ripple. On the other hand, these designs may not be desirable if we want to minimize the energy of the error (between ideal and actual filter) in the passband/stopband.

If you want to reduce the energy of a signal as much as possible in a certain frequency band, use a least-squares design.

In the examples above, the designed filters had the same ripple in the passband and in the stopband. We can use weights to reduce the ripple in one of the bands while keeping the filter order fixed. For example, if you wish the stopband ripple to be a tenth of that in the passband, you must give the stopband ten times the passband weight. Redesign the equiripple filter using that fact.

deqw = designfilt('lowpassfir','FilterOrder',N,'PassbandFrequency',Fpass,...
'StopbandFrequency',Fstop,'SampleRate',Fs,...
'PassbandWeight',1,'StopbandWeight',10);

hfvt = fvtool(deq,deqw);
legend(hfvt,'Equiripple design', 'Equiripple design with weighted stopband')

Fixed Order, Fixed Cutoff Frequency
You can design filters with fixed filter order and cutoff frequency using a window design method.

You can use different windows to control the stopband attenuation while keeping the filter order unchanged.

For example, consider a 100-th order lowpass FIR filter with a cutoff frequency of 60 Hz and a sample rate of 1 kHz. Compare designs that result from using a Hamming window, and a Chebyshev window with 90 dB of sidelobe attenuation.

dhamming = designfilt('lowpassfir','FilterOrder',100,'CutoffFrequency',60,...
'SampleRate',1000,'Window','hamming');

dchebwin = designfilt('lowpassfir','FilterOrder',100,'CutoffFrequency',60,...
'SampleRate',1000,'Window',{'chebwin',90});

hfvt = fvtool(dhamming,dchebwin);
legend(hfvt,'Hamming window', 'Chebyshev window')

There are other ways in which you can specify a filter with fixed order: fixed cutoff frequency, passband ripple, and stopband attenuation; fixed transition width; and fixed half-power (3dB) frequency.



IIR Filter Design
One of the drawbacks of FIR filters is that they require a large filter order to meet some design specifications. If the ripples are kept constant, the filter order grows inversely proportional to the transition width. By using feedback, it is possible to meet a set of design specifications with a far smaller filter order. This is the idea behind IIR filter design. The term "infinite impulse response" (IIR) stems from the fact that, when an impulse is applied to the filter, the output never decays to zero.

IIR filters are useful when computational resources are at a premium. However, stable, causal IIR filters cannot have perfectly linear phase. Avoid IIR designs in cases where phase linearity is a requirement.

Another important reason for using IIR filters is their small group delay relative to FIR filters, which results in a shorter transient response.
Butterworth Filters
Butterworth filters are maximally flat IIR filters. The flatness in the passband and stopband causes the transition band to be very wide. Large orders are required to obtain filters with narrow transition widths.
Design a minimum-order Butterworth filter with passband frequency 100 Hz, stopband frequency 300 Hz, maximum passband ripple 1 dB, and 60 dB stopband attenuation. The sample rate is 2 kHz.


Fp = 100;
Fst = 300;
Ap = 1;
Ast = 60;
Fs = 2e3;

dbutter = designfilt('lowpassiir','PassbandFrequency',Fp,...
'StopbandFrequency',Fst,'PassbandRipple',Ap,...
'StopbandAttenuation',Ast,'SampleRate',Fs,'DesignMethod','butter');


Chebyshev Type I Filters
Chebyshev Type I filters attain smaller transition widths than Butterworth filters of the same order by allowing for passband ripple.

Butterworth and Chebyshev Type I filters both have maximally flat stopbands. For a given filter order, the tradeoff is between passband ripple and transition width.

Design a Chebyshev Type I filter with the same specifications as the Butterworth filter above.


dcheby1 = designfilt('lowpassiir','PassbandFrequency',Fp,...
'StopbandFrequency',Fst,'PassbandRipple',Ap,...
'StopbandAttenuation',Ast,'SampleRate',Fs,'DesignMethod','cheby1');


Chebyshev Type II Filters

Chebyshev Type II filters have maximally flat passbands and equiripple stopbands.

Since extremely large attenuations are typically not required, we may be able to attain the required transition width with a relatively small order by allowing for some stopband ripple.
Design a minimum-order Chebyshev Type II filter with the same specifications as in the previous examples.


dcheby2 = designfilt('lowpassiir','PassbandFrequency',Fp,...
'StopbandFrequency',Fst,'PassbandRipple',Ap,...
'StopbandAttenuation',Ast,'SampleRate',Fs,'DesignMethod','cheby2');


Elliptic Filters
Elliptic filters generalize Chebyshev and Butterworth filters by allowing for ripple in both the passband and the stopband. As ripples are made smaller, elliptic filters can approximate arbitrarily close the magnitude and phase response of either Chebyshev or Butterworth filters.

Elliptic filters attain a given transition width with the smallest order.



dellip = designfilt('lowpassiir','PassbandFrequency',Fp,...
'StopbandFrequency',Fst,'PassbandRipple',Ap,...
'StopbandAttenuation',Ast,'SampleRate',Fs,'DesignMethod','ellip');


Compare the response and the order of the four IIR filters.

For the same specification constraints, the Butterworth method yields the highest order and the elliptic method yields the smallest.



FilterOrders = [filtord(dbutter) filtord(dcheby1) filtord(dcheby2) filtord(dellip)]




FilterOrders = 1×4

7     5     5     4




hfvt = fvtool(dbutter,dcheby1,dcheby2,dellip);
axis([0 1e3 -80 2]);
legend(hfvt,'Butterworth', 'Chebyshev Type I',...
'Chebyshev Type II','Elliptic')



转载于:https://www.cnblogs.com/fellow1988/p/9164856.html
展开全文
• Digital Filter Design.pdf Digital Filter Design.pdf Digital Filter Design.pdf
• Digital filter design
• Digital Filter. Designer's Handbook. Featuring C Routines. C. Britton Rorabaugh. TAB BOOKS. Division of McGraw-Hill, Inc. Blue Ridge Summit,PA 17294-0850
• Design of FIR Digital Filter:Design Linear Phase FIR filter by Kaiser window:Wp = 0.3π; Ws = 0.4π; As = 40dB;
• Digital Signal Processing and Digital Filter Design
• RMIT 课程报告 EEET1150 是有关 digital filter 的研究报告
• Realization of Digital Filter Structures in MATLAB.pdf
• Practical Analog And Digital Filter Design
• LabVIEW Tools for Digital Filter Design and Implementation LabVIEW Tools for Digital Filter Design and Implementation LabVIEW Tools for Digital Filter Design and Implementation LabVIEW Tools for ...
• Digital Filter Design Lite v1.01 滤波器设计软件，来自micrchips
• This documents presents a novel digital filter design for 3g applications. It provides a detailed descriptions with respect to the filter design using ads. I think it useful for whoever engaged in the...
• 通过使用巴特沃斯近似的双线性变换的 IIR 数字滤波器
• Practical Analog And Digital Filter 经典英文教材 模拟 数字 滤波器
• 一本讲数字滤波器设计的书，很经典，很适用
• System Generator从入门到放弃(三)-Digital Filter 本文转自：https://blog.csdn.net/fpgadesigner/article/category/6985565/3 文章目录System Generator从入门到放弃(三)-Digital Filter一、Digital Filter1、...
System Generator从入门到放弃(三)-Digital Filter

文章目录System Generator从入门到放弃(三)-Digital Filter一、Digital Filter1、简介2、产生正弦信号2.1 本部分设计使用到的block3、数字滤波器的设计3.1 本部分设计使用到的block3.2 数字滤波器设计3.3 FPGA系统配置3.4 将设计导出到FPGA3.5 打开Vivado示例工程4、FDATool block的使用5、生成说明文档与testbench5.1 生成说明文档5.2 生成testbench6、资源分析与时序分析6.1 查看分析结果6.2 时序分析6.3 资源分析6.4 资时序/资源分析失败的说明7、Gateway In和Gateway Out详解7.1 Simulink到FPGA的转换7.2 Gateway In block7.2.1 数据类型转换7.2.2 block特性7.2.3 参数设置7.3 Gateway Out block7.3.1 block特性7.3.2 参数设置8、设计优化与导入MATLAB变量8.1 优化设计8.2 导入MATLAB变量9、选择最佳数据类型9.1 本设计使用到的block9.2 FPGA设计与理想情况对比9.3 不同字长定点数据的对比9.4 系统输出位宽选择9.5 Scope使用技巧10、Reinterpret和Convert详解10.1 模块功能概述10.2 Reinterpret block10.2.1 block特性10.2.2 参数设置10.3 Convert block10.3.1 block特性10.3.2 参数设置

一、Digital Filter
1、简介
2、产生正弦信号
2.1 本部分设计使用到的block
3、数字滤波器的设计
3.1 本部分设计使用到的block
3.2 数字滤波器设计
3.3 FPGA系统配置
3.4 将设计导出到FPGA
4、FDATool block的使用
5、生成说明文档与testbench
5.1 生成说明文档
5.2 生成testbench
6、资源分析与时序分析
6.1 查看分析结果
6.2 时序分析
6.3 资源分析
6.4 资时序/资源分析失败的说明

以上内容请移步
https://blog.csdn.net/Pieces_thinking/article/details/83656785

7、Gateway In和Gateway Out详解

Gateway In和Gateway Out这两个block便是Simulink与FPGA之间的转换接口。经过转换后，Gateway In对应的是HDL模型中input；Gateway Out对应的是HDL模型中的output。可以说，所有的System Generator设计中必须包含至少一个Gateway In和Gateway Out。
7.2 Gateway In block
7.2.1 数据类型转换

7.2.2 block特性
除了数据类型转换功能外，Gateway In block还具有如下特性功能：

定义了FPGA设计中的输入端口，修改block名称即可修改HDL端口信号名称；
使用System Generator生成testbench时，软件会将输入到Gateway In

7.2.3 参数设置

(1).在Output Type和Arithmetic type中可以设置转换后输出数据的格式：

Boolean：布尔逻辑值，在HDL模型中对应单比特信号。
Fixed-point：定点数，包括“Signed（2’s comp）”带符号数二进制补码和“Unsigned”无符号数两种。
Floating-point：浮点数，Floating-point
Precision可以设置数据为单精度（Single）、双精度（Double）或自定义的浮点数格式（Custom，自行规定指数与尾数位宽）。

Truncate：直接舍弃不需要的低位。
Round（unbiased：+/-Inf）：以四舍五入的方式量化。

Wrap：舍弃掉需要表示的值的高位。
Saturate：溢出的数转换为（所设置的数据格式能表达的）最大值或最小值。

这里可以设置Gateway In转换到FPGA设计后的接口类型：“None”表示作为HDL设计的输入端口；“AXI4-Lite”表示会被当作AXI4-Lite总线（目前不会用到，相关配置也暂时不做介绍）。
IOB timing constraint设置该端口的时序约束：“None”表示不作约束；“Data rate”会将System Generator block中的系统时钟周期设置作为IO时钟约束。
如果System Generator的设计中，Gateway In恰好对应于FPGA硬件设计中的某个管脚，可以选中“Specify IOB location constraints”，根据提示完成管脚位置与IO电平标准的设置。
7.3 Gateway Out block
7.3.1 block特性
定义了FPGA设计中的输出端口，修改block名称即可修改HDL端口信号名称。Gateway Out还可以只作为测试端口，此时只是为了观察DSP系统内部，不会导出到FPGA设计中。
7.3.2 参数设置

“Implementation”标签下的设置与上一个block基本相同，不再赘述。

8、设计优化与导入MATLAB变量
8.1 优化设计
在第4篇中我们进行了设计的资源分析，结果如下：

该设计使用了6个DSP单元，这是因为该FIR滤波器系数有11个，且具有对称性，因此需要使用6个乘法器并行运算。打开FDATool，点击上方的“Filter Coefficients”按钮，可查看滤波器系数：
System Generator中FPGA时钟设置为20MHz；Gateway In block的采样率也为20MHz。这样每个时钟都要处理一个数据，因此在实现滤波器时采用了并行结构，占用了6个乘法器。
我们可以设置过采样模式来优化设计的资源使用率。在System Generator block中将FPGA clock period设置为8.33ns（120Mhz）；Simulink system period设置为1/120e6（120MHz）；Gateway In的采样率比便。这样每6个时钟处理一个数据，期望所有的乘法操作能共用一个乘法器。

主要提示我们采样率和时钟的设置，本设计是故意采用这种设置方式的，因此不用在意这个警告。运行结束后，生成资源分析报告：

看到DSP单元只使用了一个，其它资源也节省了超过一半，符合预期。总而言之，在进行System Generator设计时，要综合考虑设计指标和硬件实际情况来对设计进行针对性优化。
8.2 导入MATLAB变量
假设在MATLAB中已经确定某一数据的最佳位宽，workspace如下：

打开Gateway In block（或其它需要配置该值的block），在编辑框里直接输入workspace中的变量名称即可：

所有的block都支持该特性。

9、选择最佳数据类型

目前，还有些问题需要解决：

如何选择一个最合适的数据类型（以最少资源达到性能需求）？
如何选择系统的输出位宽（保证信号不失真）？

9.1 本设计使用到的block
Xilinx block

Convert（->Basic Elements）：数据格式转换
Reinterpret（->Basic Elements）：数据格式转换

其它block

Digital Filter Design（DSP System Toolbox->Filtering->Filter
Implementations）：设计数字滤波器

这里给出了设计中用到的所有block在库中的路径，后文不再提及（前文用过的block没有给出；同一block会包含在多个库中，为了寻找方便这里只列出一个路径）。
9.2 FPGA设计与理想情况对比
虽然在第2篇的设计中观察到输出信号的频谱图确实符合设计要求，但由于经过数据转换，数据类型、位宽等问题都会影响到计算精度，我们很难评估该结果与理想情况的偏差。

将Digital Filter Design与Digital FIR Filter的滤波器参数设置为完全相同（20Mhz采样、1.5MHz通带截止、8.5MHz阻带截止、0.01dB通带衰减、100dB阻带衰减）。运行，理想情况（左）与System Generator的输出频谱对比如下：

可以看到System Generator设计的滤波器，由于数据格式、位宽的影响，与理想情况下的频谱结果并不完全相同。对于设计者而言，需要考虑的就是这种差异是否可以接受，即是否会影响到实际的系统性能。
9.3 不同字长定点数据的对比
如果System Generator和理想情况之间的差异不能接受，就该考虑修改设计。FPGA设计可以考虑使用定点数据类型（Fixed-point）或浮点数据类型（Floating-point），但后者消耗的资源几乎是前者的十几倍甚至更多，设计中通常都采用定点数据格式。
在System Generator再添加一组滤波器设计（可以复制粘贴），将Gateway In的数据格式设置为32-30Bits定点（32表示整体位宽，30表示小数部分位宽），与原来的16-14Bits定点数据格式作对比。此时的model如下：

如果运行后想观察整个model中的数据类型变化，可以在System Generator的General->Block icon display中选择“Input data types”或“Output data types”。运行完成后相关信息会显示在block上。

Fixed_32_30（右）与Fixed_16_14（左）的输出频谱对比如下：

可以看到提高了定点数的位宽后，计算精度明显提高，输出信号频谱与理想情况的频谱已经几乎相同。导出设计到FPGA，运行资源分析：

可以看到增加了数据位宽后，系统使用的FPGA资源几乎增加了一倍（FIR single与FIR fixed相比）。设计者需要在资源和性能之间衡量，选择最合理的设计。用类似的方法也可以比较不同滤波器系数位宽对FIR滤波系统的影响。
9.4 系统输出位宽选择
当使用Fixed_16_14格式时，FIR滤波器的输出位宽系统会自动设定为Fixed_36_33，这是全精度输出结果。而在FPGA设计中我们经常需要截位，否则位宽在整个系统中不断积累，大大增加资源的消耗。如何确定截取的位数呢？
System Generator中有两个与此相关的block：Convert和Reinterpret，都可以进行数据的转换。Convert可以实现不同数据类型、不同位宽之间的转换，且可以设置量化和溢出的处理方式；Reinterpret可以实现数据类型之间的转换，还可以重新定义输出数据小数点的位置。
添加这两个block到model中，按下图连接：

使用Convert将FIR输出的Fixed_36_33数据转换为Fixed_16_13数据；使用Reinterpret将小数点重定位在第31bit（即数据放大4倍），具体配置可参考本系列第8篇。运行仿真：

从频谱图对比可以看出，经过Convert转换后，输出信号的频谱情况进一步恶化，设计者需要考虑截位是否会影响到系统性能。
使用Scope分别观察FIR输出、Convert转换后、Reinterpret转换后的信号：

可以看到Fixed_36_33和Fixed_16_13两种数据格式的信号波形几乎完全相同（第一和第二个波形）。Reinterpret由于将小数点从33bit重新定义到了31bit，相当于放大了4倍，输出信号的范围扩展为-4~4（Sine Wave block输出信号的幅度设置为1）。
将用作测试端口的Gateway设置为不作为output，导出到FPGA中后，滤波器输出位宽只有16Bits（第2篇没有截位的设计为输出36Bits）。
9.5 Scope使用技巧
在第2篇中已经介绍了如何用Scope观察多路信号，本文不再赘述。这里在介绍两个设计技巧：
设置显示范围

在View->Configuration Properites:Scope->Display中可以设置波形显示范围。Active display选择信号通道，设置Minimum和Maximum。点击Apply即可应用该设置。

设置信号名称

10、Reinterpret和Convert详解
本文将对其中使用到的Reinterpret和Convert模块进行详细介绍。
10.1 模块功能概述

数据转换，数据类型、位宽等问题都会影响到计算精度，对于设计者而言，需要考虑的就是相关影响是否可以接受，即是否会影响到实际的系统性能。FPGA设计中还经常需要截位，否则位宽在整个系统中不断积累，大大增加资源的消耗。
数据类型的转换和截位是FPGA系统设计的重要内容，博主在《FPGA数字信号处理》系列的很多设计中都有详细讨论。而在System Generator设计中，完成这项任务的便是Reinterpret和Convert模块。
数据类型转换模块在导出到FPGA设计中（定点与浮点之间的转换、浮点与浮点之间的转换），会使用Floating-Point  IP核实现，具体可参考《FPGA数字信号处理》，本系列不详细介绍。

10.2 Reinterpret block
10.2.1 block特性
这个block可以完成以下数据转换功能：

将无符号数转换为带符号数；
将带符号数转换为无符号数；
通过重新规定小数点位置来定义数据范围。

需要注意的是，“转换”在这个block中的含义更接近于其英文直译“重新解释”。事实上，数据在经过该block后，其位宽与每一位的值都没有发生任何改变，变化的只有其所表示的“意义”。正如博主在《FPGA数字信号处理》系列中强调的一样，一个二进制数是无符号数还是带符号数、小数点在哪一位仅仅取决于设计者如何规定和看待它。而Reinterpret改变的便是这种“规定和看待”方式。
比如，“1100”这个数，当视作UFix_4_0（无符号定点数、4Bits位宽、小数部分0bit）时，其值为12；当视作Fix_4_2（带符号定点数、4Bits位宽、小数部分2Bits）时，其值为-1。因为reinterpret实现的只是一种意义上的转换，因此其在转换为FPGA设计后，不会消耗任何资源。
既然reinterpret的输出和输入完全相同，那么加入此模块有什么作用？

完成不同格式数据之间的的拼接。

10.2.2 参数设置

(1).选中“Force Arithmetic Type”后，输出数据格式的“意义”将转换为（没有选中，则输出与输入的表征意义相同）：无符号数（Unsigned）、带符号数二进制补码（Signed(2’s comp)）、浮点数（Floating-point）。
(2).选中“Force Binary Point”后，可以重新规定输出数据的小数点位置。比如设置为31时，表明数据中的低31Bits为小数部分。

10.3 Convert block
10.3.1 block特性
该block不仅可以完成数据类型的转换，还具有如下特性：

重新设置数据的量化、溢出方式；
重新设置定点数格式（进行数据截位）。

10.3.2 参数设置

其中大部分参数设置方法与Gateway In模块的设置完全相同，具体可参考本系列第5篇。这里只讲述两者不同的地方。
(1).Convert模块的量化方式可以配置为“Round(unbiased: even values)”，这是针对“四舍五入”量化方式的缺点所作的改进:

传统的四舍五入所有的中间值（如1.5、2.5）都会向更大的值量化，即不是完全对称的，这样会导致一组数据量化后平均值高于量化前的平均值。
unbiased: even
values在处理中间值时会向更接近的偶数量化。比如1.5会量化为2；2.5仍然会量化为2（因为二者最接近的偶数都是2）。这样量化规则在整体上会呈现出对称性。

(2).选中“Provide enable port”后，block会增加一个en使能管脚，只有当使能有效时convert block才会执行数据转换功能，否则将保持当前状态不变。
(3).Latency设置了Convert输出数据要经过多少个采样时钟周期的延时。注意不要混淆“采样时钟周期”和“FPGA时钟周期”的概念，在过采样系统中，一个采样时钟周期可能等于多个FPGA时钟周期。

前文提到Convert在导出到FPGA中时会以Floating-Point IP核的方式实现，“Implementation”标签下可以设置Latency在FPGA中的实现方式：
●选中“Pipeline for maximum performance”时，Latency以流水线的方式实现，即在计算过程中增加中间级寄存器，以更多的资源实现更快的计算速度和更大的数据吞吐量。
●未选中“Pipeline for maximum performance”时，Latency以在IP核末尾增加一级移位寄存器的方式实现，这样只是单纯的实现了延时功能。


展开全文
• •A digital filter uses a digital processor to perform numerical calculations on sampled values of the signal. The processor may be a general-purpose computer such as a PC, or a specialised DSP ...
• System Generator从入门到放弃(二)-Digital Filter 文章目录System Generator从入门到放弃(二)-Digital Filter一、安装与使用1、简介   System Generator是Xilinx公司进行数字信号处理开发的一种设计工具，它...
System Generator从入门到放弃(二)-Digital Filter

文章目录System Generator从入门到放弃(二)-Digital Filter一、Digital Filter1、简介2、产生正弦信号2.1 本部分设计使用到的block3、数字滤波器的设计3.1 本部分设计使用到的block3.2 数字滤波器设计3.3 FPGA系统配置3.3 开始仿真3.3 将设计导出到FPGA3.3 打开Vivado示例工程4、FDATool block的使用5、生成说明文档与testbench5.1 生成说明文档5.2 生成testbench6、资源分析与时序分析6.1 查看分析结果6.2 时序分析6.3 资源分析6.4 资时序/资源分析失败的说明

一、Digital Filter
1、简介
数字滤波器的功能是对输入离散信号的数字代码进行运算处理，以达到改变信号频谱的目的。
数字滤波一般分为时域滤波和频域滤波。频域滤波是将时域变换到频域，对相应频率做调整，然后反变换到时域，抛开FFT的话过程相对简单。在这里我们主要说时域滤波。
时域滤波器分为无限脉冲响应IIR和有限脉冲响应FIR两种。IIR滤波器的优点是可以用较低的阶数（相比同样指标的FIR滤波器）实现滤波器。缺点一：不是线性相位，只能用于对相位信息不敏感的信号(如音频信号）。缺点二：有可能是不稳定的。在设计的过程中为了保持稳定性和因果性，要求z变换所有的极点都必须位于单位圆内。但即使是这样，也可能由于量化舍入等因素引起的误差最终导致IIR滤波器不稳定。FIR滤波器的优点是可以设计成具有线性相位的，并且是稳定的(FIR滤波器除原点处外没有极点)，缺点是阶数高，也就是说计算量大。
具体介绍大家可以查阅相关资料。
2、产生正弦信号
2.1 本部分设计使用到的block

Xilinx block

无

其它block

添加完后如下：

修改相关属性：
双击Sine Wave，可以设置正弦波的幅度、电平偏置、频率、初相、采样时间等信息。这里只需要将频率分别设置为1MHz（2pi1e6）和9MHz（2pi9e6）。

双击打开示波器窗口，在View->Configuration Properties:Scope中（或者如下图方式进行设置），将Number of input ports设置为3（观察3路信号）；点击Layout，选择3*1排列方式（每路信号分开显示）：

第一个为1Mhz信号，第三个为9MHz信号，中间为两路信号叠加。接下来设计一个LPF滤除掉9MHz频率分量。
PS:双击Scope可能看到的波形如下，是三路信号混合在了一起，想要分开三路进行查看，View->Layout，设置成三行模式。

最终的结果如下，第一个为1Mhz信号，第三个为9MHz信号，中间为两路信号叠加。接下来设计一个LPF滤除掉9MHz频率分量。

3、数字滤波器的设计
3.1 本部分设计使用到的block

Xilinx block

Digital FIR Filter（->DSP）：数字滤波器
Gateway In（->Basic Elements）：数据输入
Gateway Out（->Basic Elements）：数据输出
System Generator（->Basic Elements）：系统管理
FDATool（->DSP）：滤波器设计

其它block

Spectrum Analyzer（DSP System Toolbox->Sinks）：频谱分析仪

3.2 数字滤波器设计
添加一个Gateway In和一个Gateway Out模块到model中，再添加一个Digital FIR Filter模块。按照加法器输出->Gateway In->Digital FIR Filter->Gateway Out的顺序依次连接。

添加如下block到model并按图中方式进行连线。

双击打开Gateway In模块的属性窗口：

Gateway In的设置会自动传递到Gateway In和Gateway Out之间的整个系统中，因此不需要再设置其它模块的采样率与数据格式。
Digital FIR Filter设置

频率参数

Units = MHz
Fs = 20
Fpass = 1.5
Fstop = 8.5

Magnitude Specifications

Units = dB
Apass = 0.01
Astop = 100

两种方式，其中第一种方式，在其他模块没有FDATOOL工具时，需要使用第二种方式。
第一种方式
双击Digital FIR Filter： 选中“Use FDA Tool as coefficient source”，点击“FDA Tool”按钮，会弹出FDATOOL窗口，设置采样率为20Mhz，通带截止频率1.5MHz，阻带截止频率8.5Mhz，通带衰减0.01dB，阻带衰减100dB，点击“Design Filter”设计后退出。

第二种方式
第二种方式是使用FDATool，这部分会在后面介绍。
3.3 FPGA系统配置
以上仅仅是完成了数字滤波器的设计，但是仍然没有建立起模型与FPGA之间的实质联系。添加System Generator模块到model中，这个block便是配置与FPGA相关的系统参数。这个block的配置会应用到Gateway In和Gateway Out之间的所有模块中。双击打开，切换到Clock标签：

a. Specify an FPGA clock Period of 50 ns (1/20 MHz).
b. Specify a Simulink system period of 1/20e6 seconds.
c. From the Perform analysis menu, select Post Synthesis and from
FPGA clock period设置为50ns，Simulink system period设置为1/20e6（都是20Mhz）。Perfor analysis设置为Post Sythesis，Analyzer type设置为Resource，在系统综合后会进行资源使用情况的分析。

3.3 开始仿真
添加一个Scope观察Gateway Out输出的波形（滤波后波形），再添加两个Spectrum Analyzer观察滤波前后的信号频谱。Spectrum Analyzer这个block必须输入离散的数据，因此在加法器输出后需要经过一个零阶保持器Zero-Order Hold，转换为离散数据后再输入到Spectrum Analyzer中。零阶保持器的采样率设置为1/20e6（20Mhz）。

系统的整体连接框图如下：

注意，虽然Gateway In转换后的数据也是离散的，但是Spectrum Analyzer不能接入到这里，否则会出现错误。Gateway In和Gateway Out之间只能连接其它Xilinx Blockset中的模块。
将仿真时间设置为0.0005（Spectrum Analyzer必须有足够多的采样数据才能计算出频谱），输出信号的波形如下所示，经过滤波后仅剩下1MHz的单频分量，且数据为离散值。

FIR滤波器前后的频谱：

可以看到经过滤波后，9Mhz的频率分量有大约100dB的衰减（频谱呈对称性），设计符合预期。
3.3 将设计导出到FPGA
仿真验证功能正确后，需要将设计导出到FPGA中，这个步骤仍然要借助System Generator这个block。双击打开，切换到Compilation标签下，这里可以设置使用的开发板（Board，只能选择Xilinx官方开发板）、FPGA芯片（Part），也可以设置导出设计的硬件描述语言（Verilog或VHDL）。点击“Generate”，System Generator会将Gateway In和Gateway Out之间的模块导出到FPGA中。运行结束后，根据前面的设置，弹出了资源分析报告：

//Copyright 1986-2017 Xilinx, Inc. All Rights Reserved.
//--------------------------------------------------------------------------------
//Tool Version: Vivado v.2017.4 (win64) Build 2086221 Fri Dec 15 20:55:39 MST 2017
//Date        : Sun Nov  4 02:06:37 2018
//Host        : LAPTOP-8E6RLG3I running 64-bit major release  (build 9200)
//Command     : generate_target xilinx_lab1_bd.bd
//Design      : xilinx_lab1_bd
//Purpose     : IP block netlist
//--------------------------------------------------------------------------------
timescale 1 ps / 1 ps

(* CORE_GENERATION_INFO = "xilinx_lab1_bd,IP_Integrator,{x_ipVendor=xilinx.com,x_ipLibrary=BlockDiagram,x_ipName=xilinx_lab1_bd,x_ipVersion=1.00.a,x_ipLanguage=VERILOG,numBlks=1,numReposBlks=1,numNonXlnxBlks=1,numHierBlks=0,maxHierDepth=0,numSysgenBlks=1,numHlsBlks=0,numHdlrefBlks=0,numPkgbdBlks=0,bdsource=SYSGEN,synth_mode=OOC_per_IP}" *) (* HW_HANDOFF = "xilinx_lab1_bd.hwdef" *)
module xilinx_lab1_bd
(clk,
gateway_in,
gateway_out);
(* X_INTERFACE_INFO = "xilinx.com:signal:clock:1.0 CLK.CLK CLK" *) (* X_INTERFACE_PARAMETER = "XIL_INTERFACENAME CLK.CLK, CLK_DOMAIN xilinx_lab1_bd_clk, FREQ_HZ 100000000, PHASE 0.000" *) input clk;
(* X_INTERFACE_INFO = "xilinx.com:signal:data:1.0 DATA.GATEWAY_IN DATA" *) (* X_INTERFACE_PARAMETER = "XIL_INTERFACENAME DATA.GATEWAY_IN, LAYERED_METADATA undef" *) input [15:0]gateway_in;
(* X_INTERFACE_INFO = "xilinx.com:signal:data:1.0 DATA.GATEWAY_OUT DATA" *) (* X_INTERFACE_PARAMETER = "XIL_INTERFACENAME DATA.GATEWAY_OUT, LAYERED_METADATA xilinx.com:interface:datatypes:1.0 {DATA {datatype {name {attribs {resolve_type immediate dependency {} format string minimum {} maximum {}} value {}} bitwidth {attribs {resolve_type immediate dependency {} format long minimum {} maximum {}} value 37} bitoffset {attribs {resolve_type immediate dependency {} format long minimum {} maximum {}} value 0} real {fixed {fractwidth {attribs {resolve_type immediate dependency {} format long minimum {} maximum {}} value 33} signed {attribs {resolve_type immediate dependency {} format bool minimum {} maximum {}} value true}}}}}}" *) output [36:0]gateway_out;

wire clk_1;
wire [15:0]gateway_in_1;
wire [36:0]xilinx_lab1_1_gateway_out;

assign clk_1 = clk;
assign gateway_in_1 = gateway_in[15:0];
assign gateway_out[36:0] = xilinx_lab1_1_gateway_out;
xilinx_lab1_bd_xilinx_lab1_1_0 xilinx_lab1_1
(.clk(clk_1),
.gateway_in(gateway_in_1),
.gateway_out(xilinx_lab1_1_gateway_out));
endmodule


sysgen_filter_bd是调用System Generator导出的IP核的子模块。16Bits输入数据经过滤波后得到36Bits的输出结果。运行RTL ANALYSIS，打开RTL视图，找到最底层：

更强大、更方便的仿真环境；
系统级设计角度，无需关心RTL设计细节以及一些IP核的具体使用方法。

4、FDATool block的使用
前文中我们在Digital FIR Filter block的配置界面直接调用FDATool工具完成FIR滤波器的设计。但是有一些滤波器block，如2n-tap MAC FIR Filter，并没有提供这样一个接口。Xilinx Blockset中单独提供了一个FDATool block，可以提供更广泛的使用。
添加FDATool block到model中，配置完成后点击“Design Filter”。其它模块调用这个FDATool设计的滤波器可以借助两个函数：

xlfda_numerator(‘FDATool’)：提取滤波器系数的分子
xlfda_denominator(‘FDATool’)：提取滤波器系数的分母

对于FIR滤波器而言，分母为1，只提取分子即可。如下图所示：

所有滤波器block的系数都可以用这种方式设置。
5、生成说明文档与testbench
5.1 生成说明文档
本文在上一篇设计的数字滤波器模型基础上进行修改。打开System Generator这个block，在Compilation标签下：

选中“Create interface document”，在点击Generate导出设计后，在netlist/sysgen文件夹下会生成一个HTM文件。用浏览器打开如下：

5.2 生成testbench
在System Generator block的Compilation标签下选中“Create testbench”，如第一幅图所示。在点击Generate导出设计时，软件会根据选择的硬件描述语言生成对应的testbench（在netlist/sysgen文件夹下）：
●“Verilog“对应”name_tb.v“文件
●“VHDL“对应”name_tb.vhd“文件

在这个testbench中包含4个子模块：时钟生成模块xlclk、测试数据输入模块xltbsource、模块数据输出模块xltbsink和IP核设计文件sysgen_filter_0。最后在顶层模块中调用4个子模块，组成一个完整的测试平台（在“Testbench编写指南系列”中会解析这种testbench编写方式）。

6、资源分析与时序分析
6.1 查看分析结果

Perform analysis中可以设置

None：不进行分析；
Post Synthesis：综合后进行分析；
Post Implementation：实现后进行分析。

Analyzer type中可以设置

“Resource”（进行资源分析）
“Timing”（进行时序分析）

注意在Perform analysis设置好，并且导出设计到FPGA后，可以切换Analyzer type，并且点击右边的“Launch”查看两种报告。但修改设计和修改Perform analysis参数后必须重新运行才能生成最新的报告。
综合后和实现后的资源分析和时序分析分别如下。时序报告中可以看到每一条时钟路径的情况（本设计中只有一条）；资源报告中可以看到每一个模块的资源消耗（本设计只有一个模块）。可以看到综合后与实现后的资源消耗情况、时序情况有些差异：

6.2 时序分析
System Generator集成的静态时序分析功能提供了如下特性：

点击每一列的指标名称，可以选择升序/降序排列；
时序不满足时，相应的路径Slack值为负数，且显示为红色；

如下图：

时序不满足时，可以考虑修改设计（如增加一些单元的Latency，以资源换速度），或者更换综合策略/实现策略。

6.3 资源分析
System Generator集成的资源分析功能提供了如下特性：

点击每一列的指标名称，可以选择升序/降序排列；
BRAMs（包括RAMB36E、FIFO36E、RAMB18E、FIFO18E0资源）；DSPs（包括DSP48E、DSP48E1、DSP48E2资源）；Registers（包括寄存器和触发器，以FD和LD开头的资源）；LUTs（所有的查找表）；

资源消耗超过FPGA芯片总资源时，可以考虑修改设计，或者更换综合策略/实现策略。这里与时序分析部分相同。

6.4 资时序/资源分析失败的说明
绝大多数情况下，时序分析和资源分析都能得到正确的结果，但有时在Generate生成结束后，会提示一个Error，无法获取结果数据。
失败的原因一般都是如下情况：在同一目录下有多个slx文件，但是所有的slx文件设置的输出目录都相同（比如都是默认的./netlist）。在导出第一个slx文件时是可以正确运行时序/资源分析的；但在导出第二个slx文件的设计时，就会报错。原因便是不同的模型向同一目录下导出设计。在设置路径时要注意。

`
展开全文
• 使用 Chebyshev(Type II) 近似的 IIR 数字滤波器
• 使用 Chebyshev（I 型）近似的 IIR 数字滤波器
• 本人毕业设计是Implementation of digital filter by using C language on FPGA。 求专家给我解释一下，这个要设计多少个FIR digital filter啊 求专家给我这个课题一些具体操作步骤指导啊
• 数字滤波器设计的经典之作，主要是关于其基本概念，以及常用的FIR IIR滤波器的设计进行阐述。
• MICROCHIP出品的数字滤波设计工具，此版本为lite。 安装不需要序列号。
• 基于滤波法的径流分割软件。在时间概念上把径流过程分割为基流和快速径流
• Alexander Lazarevic的经典文章，专述数字滤波器。
• In this paper a general theory of multistage decimators and interpolators for sampling rate reduction and sampling rate increase is ...comparable to those of recursive elliptic filter designs.

...