精华内容
下载资源
问答
  • matlab进行心电图的fir滤波.可以进行仿真.
  • MATLAB编程产生原始信号,设计(分步设计与直接设计)巴特沃斯滤波器(包括IIR低通高通、FIR低通高通)并进行滤波。绘制图形观察。原理叙述清晰,注释明了,便于依据实际需要进行修改。
  • 码元信号进行取绝对码,然后进行DPSK调制,将调制信号进行IQ解调,并通过低通滤波器滤除高频分量。然后通过CIC进行抽取滤波,和FIR数字滤波,最后抽样判决还原码元信号的MATLAB代码,
  • 为解决嵌入式系统对语音处理的速度和存储空间等有较高...结果表明,这种先进行FFT变换后进行FIR滤波的综合算法,在处理复杂语音信号时具有较高的效率,并可用于嵌入式系统中,为采用FFT算法改进语音数据处理效果提供了参考.
  • 本设计是基于FPGA的音频信号FIR低通滤波,根据要求,采用Matlab对WAV音频文件进行读取和添加噪声信号、FFT分析、FIR滤波处理,并分析滤波的效果。通过Matlab的分析验证滤波效果后,将叠加噪声信号的音频信号输出到...

     

    1 设计内容

            本设计是基于FPGA的音频信号FIR低通滤波,根据要求,采用Matlab对WAV音频文件进行读取和添加噪声信号、FFT分析、FIR滤波处理,并分析滤波的效果。通过Matlab的分析验证滤波效果后,将叠加噪声信号的音频信号输出到txt文件里。然后使用Matlab语言编写滤波器模块和测试模块,通过Modelsim软件读取txt文件的数据,将数据送入滤波模块,最后将滤波的结果输出到txt文件里,最后用Matlab将处理的结果从txt文件读出、显示、FFT分析用Verilog设计的FIR滤波器的处理效果。

     

    2 设计原理

    2.1 语音信号概述

           语言是人类创造的,是人类区别于其他地球生命的本质特征之一。人类用语言交流的过程可以看成是一个复杂的通信过程,为了获取便于分析和处理的语音信源,必须将在空气中传播的声波转变为包含语音信息并且记载着声波物理性质的模拟(或数字)电信号,即语音信号,因此语音信号就成为语音的表现形式或载体。

           语音学和数字信号处理的交叉结合便形成了语音信号处理。语音信号处理是建立在语音学和数字信号处理基础之上的,对语音信号模型进行分析、存储、传输、识别和合成等方面的一门综合性学科。

           本设计中,从WAV音频文件用Matlab读取音频信号进行分析、处理。

    2.2 数字滤波器原理

           若滤波器的输入、输出都是离散时间信号,那么该滤波器的单位冲激响应h(n)也必然是离散的,这种滤波器称为数字滤波器(DF)。数字滤波器实质上是一种运算过程——用来描述离散系统输入与输出关系的差分方程的计算或卷积计算。数字滤波器的实质是用一有限精度算法实现的离散时间线性时不变系统,以完成对信号进行滤波处理的过程。它是数字信号处理的一个重要分支,具有稳定性好、精度高、灵活性强、体积小、质量轻等诸多优点。

          根据单位冲激响应h(n)的时间特性分类

    (1) 无限冲激响应(IIR)数字滤波器

    (2) 有限冲激响应(FIR)数字滤波器

          本设计中选择FIR低通滤波器对音频信号进行滤波处理。

          FIR滤波器响应(简称FIR)系统的单位脉冲响应h(n)为有限长序列,系统函数H(z)在有限z平面上不存在极点,其运算结构中不存在反馈支路,即没有环路。如果h(n)的长度为N,则它的系统函数和差分方程一般具有如下形式:

    clip_image002

    clip_image004

          FIR滤波器的结果主要有:直接型、级联型、线性相位型。

          设计中采用线性相位型,FIR滤波器最主要的特性就是它可以具备线性相位的特性。所谓线性相位特性,是指滤波器对不同频率的正弦波所产生的相移和正弦波的频率成直线关系。因此,在滤波器通带内的信号通过滤波器后,除了由相移特性的斜率决定的延时外,可以不失真地保留通带内的全部信号。这一点很重要,在很多的应用场合都有所需求。

          当系统的单位抽样响应h(n)满足下列对称条件时,即

    偶对称条件:h(n)=h(N-1-n)0<n<N-1

    奇对称条件:h(n)=-h(N-1-n)0<n<N-1

          系统的相頻特性是线性的。其对称中心为(N-1)/2。采用线性相位型可以比直接型少用(N-1)/2个乘法器。下图为N为偶数和奇数的情形,a图为N=7, b图为N=6。

    clip_image006

    图 1 N为偶数和奇数的FIR滤波器结构

    3. 设计思路

          本设计主要分为两个部分,一个是Matlab的设计验证和音频信号提取,另一个为Modelsim平台上基于Verilog的FIR滤波器的设计和testbench的编写。

          Matlab的设计验证和音频信号提取:在MATLAB中,[y,fs,bits]=wavread('Blip',[N1 N2]);用于读取语音,采样值放在向量y中,fs表示采样频率(Hz),bits表示采样位数。[N1 N2]表示读取的值从N1点到N2点的值。采用此函数对WAV音频信号进行读取,然后对该信号进行FFT分析,再在原始的音频信号上叠加一个6K的正弦波信号,并进行FFT分析。

          此过程中需要对叠加了噪声信号的音频信号写入TXT文件作为Modelsim平台的信号源,同时将FIR的抽头参数进行提取,用于Verilog编写FIR滤波器。

          在Modelsim平台上,采用Verilog编写线性相位型的FIR滤波器,然后编写testbench代码,testbench的主要功能是提供时钟、复位、信号源,同时将FIR模块的处理结果读出并写入到TXT文件中。

          最后将Modelsim处理的结果用Matlab进行分析,并与Matlab处理的结果进行对比。

    具体流程如下图:

    QQ截图20160229195049

    图 2 本设计的流程

     

    4. 设计过程

    4.1 Matlab平台

    4.1.1 Matlab读取音频文件

         在MATLAB中,[y,fs,bits]=wavread('Blip',[N1 N2]);用于读取语音,采样值放在向量y中,fs表示采样频率(Hz),bits表示采样位数。[N1 N2]表示读取的值从N1点到N2点的值。

         采样频率为100K,读取点数为4096个信号。

    clip_image010

    4.1.2 叠加噪声信号

          叠加一个频率为6K,点数为4096,幅值为0.003的正弦波,并对叠加前后的信号进行FFT分析。

    clip_image012

          由于读取出来的音频信号幅值很小,由于FPGA处理整数比较方便,所以需要将叠加的噪声的音频信号进行放大,然后将负数转为正整数,最后写入到TXT文件中。

    clip_image014

    写入的TXT文件如下:

    clip_image016

    图 3 音频信号的TXT文件

           同时,为了将此信号源作为FPGA内部的信号源,还需要将信号数据写入到MIF文件中,然后调用一个ROM模块,存放此数据。在Matlab中将语音信号数据写入MIF文件的代码如下:

    clip_image018

    产生的MIF文件数据如下:

    clip_image020

    图 4 MIF文件

    4.1.3 FIR滤波

           本设计中采用的FIR滤波器为8阶,采样频率为100K,截至频率为6K。

           在Matlab中采用fir1函数提取抽头系统,然后将抽头系数和带噪声的音频信号进行卷积,然后对FIR处理的结果进行FFT分析。

    clip_image022

    提取抽头系数,系数如下:

    clip_image024

          由于提取的系数为浮点数,所以需要对系数进行移位变换,作为整数用于FPGA设计的FIR滤波器中,然后最后再将处理的结果进行反向移位变换,得取正确的结果。

    转换后的系数如下:

    clip_image026

    4.1.4 分析滤波效果

          将叠加噪声前后、FIR处理后的信号进行FFT分析,并显示出来进行对比:

    clip_image028

    4.1

    4.2 Modelsim与QuartusII平台

    4.2.1 FIR模块的编写

           本设计中FIR模块主要分为信号源模块和FIR滤波器模块,信号源模块采用ROM存储带有噪声信号的语音信号,存储的位宽为8bit,深度为4096。由于采用Altera的FPGA中内嵌有一定数量的M4K块,所以可以直接调用这些模块用于存储信号。

    ROM模块中MIF文件存储的信号数据如下:

    clip_image030

    图 5 ROM模块中的数据

          采用线性相位型结构的FIR滤波器进行设计,由此可以将乘法器的个数减少一半,本设计中采用4个乘法器,由于FPGA中内嵌了一定数量的硬件乘法器,由此可以直接调用这些乘法器将抽头参数和信号数据进行乘法运算,以减少逻辑单元的调用和减少一定的延迟。

    clip_image032

          抽头参数分别为19、65、170、256,是通过将Matlab输出的参数左移10位得到的。

    滤波器的结构如下:

    clip_image034

    由于抽头系数左移了10位,所以在得到最终处理结果后,需要将结果右移10位,如下所示:

    clip_image036

    FIR模块顶层设计如下:

    clip_image038

    4.2.2 Testbench编写

          Testbench的主要的功能是读取TXT文件中的信号数据,作为FIR滤波模块的信号源,同时将为FIR滤波模块提供时钟和复位信号,最后将FIR滤波模块处理后数据写入到TXT文件中。

    clip_image040

    clip_image042

    5 分析验证

    5.1 QUARTUS II设计

    在设计完成各个模块和顶层封装之后,通过编译综合。

    clip_image044

    图 6 综合结果

    整体设计的RTL视图如下:

    clip_image046

    图 7 RTL视图

    其中,clk信号为100K,同时也是FIR模块的采样信号。

    5.2 Modelsim仿真结果分析

          Modelsim仿真结果如下,其中data_in为从txt文件读入的叠加了噪声的语音信号,fir_data为经过FIR滤波处理后输出的信号,由于截至频率为6K,从中可以看出,大部分的噪声信号已被滤除,为了更好的分析处理的结果,将FIR处理的结果写入到TXT文件中,然后用Matlab进行FFT分析。

    clip_image048

    图 8 Modelsim仿真波形

    FIR处理输出的结果如下:

    clip_image050

    图 9 Modelsim仿真结果数据输出

    5.3 Matlab设计分析验证

           采用Matlab将原始语音信号、叠加噪声的语音信号、FIR滤波后的信号分别显示如下,从下图可以看出,采用8阶的FIR滤波器可以较好的将噪声信号滤除掉。

    clip_image052

    图 10 时域图对比

             为了更好的地分析信号的频谱,原始语音信号、叠加噪声的语音信号、FIR滤波后的信号的頻谱如下,对比可以更加确定地得出,通过FIR滤波,6K以上的信号基本被滤除掉了,由于10K的噪声信号的频率功能相对较大,FIR滤波器的阶数比较少,10K的噪声信号还是未能完全滤除,不过这个可以通过增加阶数将其完全滤除。

    clip_image054

    图 11 频谱对比

           通过Matlab将Modelsim仿真结果的数据读出,并将处理后的语音信号进行显示,并与原始语音信号对比。

    clip_image056

    图 12 原始语音、Modelsim仿真的语音信号对比

            将原始语音信号、采用Matlab进行 FIR滤波后的信号、Modelsim仿真处理后的语音信号进行FFT分析、对比,结果如下:

    clip_image058

    图 13 叠加噪声的信号与Modelsim仿真后信号频谱对比

    clip_image060

    图 14 Matlab滤波效果与Modelsim仿真效果对比

           通过以上的分析、验证,采用Verilog设计的FIR滤波器能够实现预定的功能,能过将6K以上的噪声信号基本滤除掉,由于10K的噪声信号幅值较大,所以要完全滤波可以通过增加FIR滤波器的阶数。

    大西瓜FPGA-->https://daxiguafpga.taobao.com

    博客资料、代码、图片、文字等属大西瓜FPGA所有,切勿用于商业! 若引用资料、代码、图片、文字等等请注明出处,谢谢!

    每日推送不同科技解读,原创深耕解读当下科技,敬请关注“科乎”。

    转载于:https://www.cnblogs.com/logic3/p/5228764.html

    展开全文
  • HDL coder帮助文档的解读 HDL Coder Generate VHDL and Verilogcode for FPGA and ASIC designs HDL Coder™ generates portable, synthesizable VHDL® ... from MATLAB® functions,Simulink® models,

    HDL coder帮助文档的解读

    HDL Coder

    Generate VHDL and Verilogcode for FPGA and ASIC designs

    HDL Coder™ generates portable, synthesizable VHDL® andVerilog® code from MATLAB® functions,Simulink® models, and Stateflowcharts. The generated HDL code can be used for FPGA programming orASIC prototyping and design.

    HDL Coder provides a workflow advisor that automates theprogramming of Xilinx® andAltera® FPGAs. You can control HDLarchitecture and implementation, highlight critical paths, and generatehardware resource utilization estimates. HDL Coder provides traceabilitybetween your Simulink model and the generated Verilog and VHDL code, enablingcode verification for high-integrity applications adhering to DO-254 and otherstandards.

    针对FPGAASIC设计生成VHDL/Verilog代码

    HDLCoder™可基于MATLAB函数、Simulink模型和Stateflow图表来生成可移植、可综合的VHDL/Verilog代码。生成出的代码可以用于FPGA的编程或ASIC原型开发与设计。

    HDL Coder提供了一种使XilinxAltera FPGA编程自动化的工作流程指导。你可以控制硬件描述语言的架构和执行,强调关键(信号)路径,生成硬件资源率利用评估。HDL Coder提供了Simulink模型与生成的VHDL/Verilog代码间的可追溯特性,为符合DO-254和其他标准的高完整性的应用启用代码验证。

    注:【DO-254标准的有效性得到了美国联邦航空局和欧洲航空安全局等业界权威的一致确认,为机载电子硬件的设计开发提供了指导与保障。DO-254全称机载电子硬件设计保证指南。该标准对硬件设计生命周期各阶段的目标、开展的设计保证活动以及产生的设计数据进行了详尽的阐述。DO-254标准将硬件设计过程分为需求获取、概要设计、详细设计、实现与产品转换过程,这与传统的集成电路设计流程基本相同,不同的是,DO-254详细定义了支持过程,包括确认过程、验证过程、配置管理、过程保证以及审定联络,保证了硬件设计生命周期及其输出正确可控。DO-254标准代表了工业界、适航当局、机载领域硬件设计人员在内的大多数专家的一致意见,是机载电子硬件开发保证过程最好的实践经验的集合。DO-254标准的有效性得到了美国联邦航空局和欧洲航空安全局等业界权威的一致确认,为机载电子硬件的设计开发提供了指导与保障。

    可编程逻辑器件在航空机载设备中的应用越来越多,其设计也变得愈发复杂,适航认证已成为航空器件发展的必然趋势。对于针对特种行业的FPGA开发,了解此标准很重要】

    Key Features

    ·       Target-independent,synthesizable VHDL and Verilog code 与目标(器件)无关,可综合

    ·       Codegeneration support for MATLAB functions, System objects and Simulink blocks

    ·       Mealyand Moore finite-state machines and control logic implementations usingStateflow


    使用Stateflow工具实现Moore/Mealy状态机及控制逻辑

    ·       Workflowadvisor for programming Xilinx and Altera application boards

    ·       Resourcesharing and retiming for area-speed tradeoffs 平衡面积——速度的资源共享与时序重排技术

    ·       Code-to-modeland model-to-code traceability for DO-254

    ·       Legacycode integration 旧代码集成

    Getting Started

    Learn thebasics of HDL Coder

    入门指南:学习HDL Coder的基础

    HDL Code Generation from MATLAB

    GenerateHDL Code from MATLAB algorithms

    基于MATLAB算法的HDL代码生成

    HDL Code Generation from Simulink

    GenerateHDL code from Simulink models

    基于Simulink模块的HDL代码生成

    Hardware-Software Codesign

    Deploypartitioned hardware and software on a target hardware platform

    软硬件协同设计:在目标硬件平台上有效部署软件与硬件

    Supported Hardware

    Supportfor third-party hardware, such as Altera and Xilinx FPGA boards

    硬件支持:对例如XilinxAltera FPGA板卡的第三方硬件支持

    Getting Started with HDL Coder

    ·       HDL CoderProduct Description HDL Coder产品描述

    ·       System Requirements 系统要求

    ·       Tool Setup工具安装

    ·       SupportedThird-Party Tools and Hardware 受支持的第三方工具与硬件

    ·       VHDL and VerilogLanguage Support VHDLVerilog语言支持

     

    Tutorials

    ·       HDL CodeGeneration from a MATLAB Algorithm

    ·       HDL CodeGeneration from a Simulink Model

    About Designing for HDLCode Generation

    ·       FunctionsSupported for HDL Code Generation — Alphabetical List 按字母排序的受支持函数清单

    ·       FunctionsSupported for HDL Code Generation — Categorical List 按类别的受支持函数清单

    ·       MATLAB LanguageSupport MATLAB语言支持

    ·       HardwareModeling with MATLAB Code 使用MATLAB代码对硬件进行建模

    ·       Prepare SimulinkModel For HDL Code Generation 准备适合生成HDL代码的Simulink模型

    ·       Show BlocksSupported for HDL Code Generation

    ·       Supported Blocks受支持的模块

    ·       SimulinkTemplates For HDL Code Generation 可生成HDL代码的Simulink模板

    Tool Setup工具安装流程

    Synthesis Tool Path Setup 综合工具路径配置

    ·       hdlsetuptoolpath Function

    ·       Add Synthesis Tool for Current HDL Workflow AdvisorSession

    ·       Check Your Synthesis Tool Setup

    ·       Supported Tool Versions

    hdlsetuptoolpath Function 使用hdlsetuptoolpath 函数

    To use HDL Coder™ with one of the supported third-party FPGAsynthesis tools, add the tool to your system path using the hdlsetuptoolpath function.Add the tool to your system path before opening the HDL Workflow Advisor. Ifyou already have the HDL Workflow Advisor open, see Add Synthesis Tool for Current HDL Workflow AdvisorSession.

    Add Synthesis Tool for Current HDL WorkflowAdvisor Session

    Simulink to HDL Workflow

    1.     At the MATLAB® commandline, use the hdlsetuptoolpath functionto add the synthesis tool.

    2.     In the HDL Workflow Advisor, inthe Set Target > Set Target Device and SynthesisTool step, to the right of Synthesis tool, click Refresh.

    Thesynthesis tool is now available.

    MATLAB to HDL Workflow

    1.     At the MATLAB command line, usethe hdlsetuptoolpath functionto add the synthesis tool.

    2.     In the HDL Workflow Advisor, inthe Select Code Generation Target step, to the right of Synthesistool, click Refresh list.

    Thesynthesis tool is now available.

    Check Your Synthesis Tool Setup

    To check your Altera® Quartussynthesis tool setup in MATLAB, try launching the tool with the followingcommand:

    !quartus

    To check your Xilinx® Vivado® synthesistool setup in MATLAB, try launching the tool with the following command:

    !vivado

    To check your Xilinx ISE synthesis tool setup in MATLAB, trylaunching the tool with the following command:

    !ise

    Supported Tool Versions

    For supported tool versions, see Third-Party Synthesis Tools and Version Support.

    如上图所示,通过调用函数成功配置了VIVADO综合器接口。通过!vivado指令可以检查出MATLABVIVADO是否完成综合器的匹配

    开始HDL coder生成流程

    现在开始在.m文件中编写相应的算法。这里为了更好的演示整个HDL coder工作的流程,我们选择一个具有代表性的数字信号处理典例:线性调频LFM信号通过FIR滤波器进行滤波,并通过Testbench来从输入输出的波形中验证FPGA是否能较好的完成滤波工作。

     

    首先值得注意的是,我们平时在MATLAB环境中的运算基本上都是浮点运算(floating point arithmetic),而在FPGA中的实现几乎都是定点运算(fixed point arithmetic),这就使得在HDL coder的过程中需要一步关键操作:

    浮点到定点的转换

     

    我们先写出FIR滤波器算法的.m文件,在这个文件中,加法和乘法都是直接使用+*运算符,属于浮点操作:

    %#codegen

    function [y_out, delayed_xout] =mlhdlc_sfir(x_in, h_in1, h_in2, h_in3, h_in4)

    % Symmetric FIR Filter

     

    persistent ud1 ud2 ud3 ud4 ud5 ud6ud7 ud8;

    if isempty(ud1)

        ud1 = 0;ud2 = 0; ud3 = 0; ud4 = 0; ud5 = 0; ud6 = 0; ud7 = 0; ud8 = 0;

    end

     

    a1 = ud1 + ud8; a2 = ud2 + ud7;

    a3 = ud3 + ud6; a4 = ud4 + ud5;

     

    m1 = h_in1 * a1; m2 = h_in2 * a2;

    m3 = h_in3 * a3; m4 = h_in4 * a4;

     

    a5 = m1 + m2; a6 = m3 + m4;

    % filtered output

    y_out = a5 + a6;

    % delayout input signal

    delayed_xout = ud8;

     

    % update the delay line

    ud8 = ud7;

    ud7 = ud6;

    ud6 = ud5;

    ud5 = ud4;

    ud4 = ud3;

    ud3 = ud2;

    ud2 = ud1;

    ud1 = x_in;

     

    end

     

    以及测试FIR滤波器用的_tb.m文件:

    clear all;

    % input signal with noise

    x_in =cos(2.*pi.*(0:0.001:2).*(1+(0:0.001:2).*75)).';

    % filter coefficients

    h1 = -0.1339; h2 = -0.0838; h3 = 0.2026; h4 =0.4064;

    len = length(x_in);

    y_out = zeros(1,len);

    x_out = zeros(1,len);

    for ii=1:len

        data =x_in(ii);

        %call to the design 'mlhdlc_sfir' that is targeted for hardware

       [y_out(ii), x_out(ii)] = mlhdlc_sfir(data, h1, h2, h3, h4);   

    end

    figure('Name',[mfilename, '_plot']);

    subplot(2,1,1); plot(1:len,x_in);

    subplot(2,1,2); plot(1:len,y_out);

     

    _tb.m文件的作用是产生一个线性调频信号x_in输入给FIR滤波器,得到它的输出,并作图来显示滤波的效果。

     

    执行_tb.m文件的结果如下:

    可见,经过滤波后的线性调频信号的高频部分被抑制了,说明在算法层面我们的代码没有问题。下一步就是调出HDL coder工具箱,然后按说明添加两个.m文件进去:

    按照MATLAB中内置的Getting Start Guide,一步步进行HDL的生成。在第二步中,Fixed Point Conversion是将浮点算法转换为定点实现的重要一环:

    可以看到我们代码中的运算形式发生了改变:

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    %                                                                                     

    %          Generated by MATLAB 9.0 and Fixed-Point Designer 5.2             

    %                                                                                    

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    %   #codegen

    function [y_out, delayed_xout] =mlhdlc_sfir_fixpt(x_in, h_in1, h_in2, h_in3, h_in4)

    % Symmetric FIR Filter

     

    fm = get_fimath();

     

    persistent ud1 ud2 ud3 ud4 ud5 ud6ud7 ud8;

    if isempty(ud1)

    ud1 = fi(0, 1, 14, 12, fm); ud2 = fi(0, 1, 14, 12,fm); ud3 = fi(0, 1, 14, 12, fm); ud4 = fi(0, 1, 14, 12, fm); ud5 = fi(0, 1, 14,12, fm); ud6 = fi(0, 1, 14, 12, fm); ud7 = fi(0, 1, 14, 12, fm); ud8 = fi(0, 1,14, 12, fm);

    end

     

    a1 = fi(ud1 + ud8, 1, 14, 12, fm); a2 = fi(ud2 +ud7, 1, 14, 12, fm);

    a3 = fi(ud3 + ud6, 1, 14, 12, fm); a4 = fi(ud4 +ud5, 1, 14, 11, fm);

     

    m1 = fi(h_in1 * a1, 1, 14, 14, fm); m2 = fi(h_in2 *a2, 1, 14, 15, fm);

    m3 = fi(h_in3 * a3, 1, 14, 14, fm); m4 = fi(h_in4 *a4, 1, 14, 13, fm);

     

    a5 = fi(m1 + m2, 1, 14, 14, fm); a6 = fi(m3 + m4, 1,14, 12, fm);

     

    % filtered output

    y_out = fi(a5 + a6, 1, 14, 12, fm);

    % delayout input signal

    delayed_xout = fi(ud8, 1, 14, 12, fm);

     

    % update the delay line

    ud8(:) = ud7;

    ud7(:) = ud6;

    ud6(:) = ud5;

    ud5(:) = ud4;

    ud4(:) = ud3;

    ud3(:) = ud2;

    ud2(:) = ud1;

    ud1(:) = x_in;

     

    end

     

     

    function fm = get_fimath()

        fm =fimath('RoundingMethod', 'Floor',...

             'OverflowAction', 'Wrap',...

             'ProductMode','FullPrecision',...

             'MaxProductWordLength',128,...

             'SumMode','FullPrecision',...

             'MaxSumWordLength',128);

    end

     

    经过定点转换后,数据多少会在精度上有所损失,基于此可以在MATLAB中将定点转换后的算法再次运行一遍,得到的结果和浮点比较,如果精度损失过多,我们可以通过增加定点数据的存储位宽来弥补,使其更接近真实数据,但同时也会增加资源占用率。如下图所示,HDL coder给出了定点算法运行结果与原浮点算法结果的对比,并给出了误差波形:

    可以看出,在使用默认定点位宽的条件下,转换误差在级别,对大部分应用可以忽略。我们继续向下执行,直到这一步,生成得到两个.v文件和用于测试的三个信号数据.dat文件:

    最终生成的Code Generation报告:

    我们建立一个VIVADO工程,把生成的.v文件加入到DesignSourceSimulation Source中,同时把三个测试用的信号数据.dat文件加入,VIVADO会自动识别出并放置到Data Files文件夹里:

    一路综合、实现:

    然后在VIVADO中仿真,检查我们HDL coder生成的.v文件在FPGA中是否可以真正实现FIR滤波器功能。在这里为了显示正确的信号波形,我们应该选择RadixSigned DecimalWaveform StyleAnalog形式,此时才可以看清输入输出的线性调频信号波形

    最终如仿真图所示,经过对仿真信号的格式做适当修改,可以看到FIR滤波器在FPGA中成功实现了:

    HDL coder同时可以针对某特定型号的FPGA芯片进行深度优化,实现更多更有意思的算法,从雷达、通信系统的数字信号处理到矩阵运算,再到ECC、加解密编码甚至机器学习领域,它都可以作为一种快速生成原型的验证工具,帮助工程师快速将算法转化为工程实现。本文仅仅是在原版官方说明的拙劣解释和模仿,如有需要可以深入研究MATLAB关于此的详细说明,也希望读者能随时指正本文的错误,交流学习

    展开全文
  • 使用上一讲中的matlab滤波器参数设计FIR滤波器,下两讲使用两个DDS产生待滤波的信号和matlab产生带滤波信号,结合FIR滤波器搭建一个信号产生及滤波的系统,并编写testbench进行仿真分析,预计第五讲或第六讲开始编写...

        本讲在Vivado调用FIR滤波器的IP核,使用上一讲中的matlab滤波器参数设计FIR滤波器,下两讲使用两个DDS产生待滤波的信号和matlab产生带滤波信号,结合FIR滤波器搭建一个信号产生及滤波的系统,并编写testbench进行仿真分析,预计第五讲或第六讲开始编写verilog代码设计FIR滤波器,不再调用IP核。

        本例使用Vivado 2018.2调用IP核实现FIR滤波器,使用上一讲中的matlab的fdatool工具箱导出的滤波器参数(FIR_BPF_99_1_5M.coe文件)。

    FPGA探索者,公众号:FPGA探索者matlab与FPGA数字滤波器设计(1)——通过matlab的fdatool工具箱设计FIR数字滤波器

    04937b96edb070794101b8c3a704f49a.png

     1. 新建工程

    (1) Create Project -> RTL Project,一直Next直到选择器件,选择自己使用的器件;

    (2) 新建原理图文件,Create Block Design

    (3) 将上一讲中从 MATLAB 中导出的 FIR_BPF_99_1_5M.coe 文件放在新建工程后的工程目录下

    0aae687e26cf1754bc159900214ad415.png

     2. 添加IP核

    (1)加入FIRIP,在新建的原理图文件design_1中点击 1 处的加号,会弹出对话框,在2处输入 fir 即可(不区分大小写),双击 3 处的 ”FIR Complier”

    6b7f7fa55757bcac890c93f6f418b9b7.png

    (2)原理图中出现FIR的原理图,双击该IP核;

    829599c1f5fd4a208e258979da72a1fb.png

     3. 配置FIR滤波器IP核

    (1)在第一页Filter Options中,红色框内可以配置滤波器的系数来自 .COE 文件(COE File)或者来自向量形式(Vector),此处选择 “COE File”;

    9e0c4b9de2bddd7d657b62b4013bf6e9.png

     (2)1处变为COE File后,点击 2 处加载/导入滤波器的系数文件,弹出文件选择框,选择 3 处的 FIR_BPF_99_1_5M.coe(上一讲中从 MATLAB 中导出的文件,新建工程后将其放在工程目录下),点击 4 处的确定,成功加载。

    6cef67b08b5334eed8ae14364b306feb.png

        加载成功后可以看到,1处显示出文件的路径;2处默认为1,表示有几路滤波通道,此处选择 1 路;3处的数据是100,无法更改,表示的是从刚刚加载的 .coe 文件中读取到 100 个滤波器系数;

    da90f9f02a56db6b7f41460939fd096f.png

    (3)滤波器配置-2

        点击 1 处配置滤波器的第 2 页,主要配置 2 处的系统时钟和数据采样时钟,在上一讲中设置 matlab 滤波器参数时是 32 MHz采样频率,所以此处选择输入采样时钟为 32 MHz,为了方便起见,此处设置系统时钟为 32 MHz(实际工作中系统时钟不是这个频率的,可以通过PLL等获得 32 MHz,此处我们只做仿真,系统时钟可以通过 testbench 任意设定);

    7a47a8ec15b338563fc5a17229c83a77.png

    (4)滤波器配置-3

        点击 1 处配置第 3 页;2 处设置滤波器系数的格式,有符号数signed,整数类型,位宽为 16 位(在上一讲中是将滤波器系数进行 16 位量化后导出);3处选择滤波器结构,上一讲中设计的滤波器是对称结构,选择Symmetric;4处配置输入数据的格式,此处保持默认,输入有符号数,16位宽度,如果输入的要滤波的数据不是该配置,可以点击5处的正方形,点击之后对应的方框有灰色变成白色,可以进行修改里面的参数;

    8dbbf783aa7a4361e7ca995c02bd6135.png 

    (5)其他保持默认,点击OK退出配置。

    4. 例化IP

    (1) 熟悉输入输出端口

        FIR的IP核直接给出了AXI-Stream的接口(一种符合AXIS-Stream总线协议的端口,此处不需要太关注该协议,用不到),点击两个“+”可以展开里面包含的端口,可以看到,共有:

    a. 一个时钟端口 aclk,频率为 32 MHz;

    b. 两个输入

    s_axis_ddata_tdata[15:0]16位的待滤波的输入数据,采样频率 32 MHz,每个时钟周期输入一个数据;

    s_axis_data_tvalid:输入数据有效标志位,该位为1时表示输入的数据有效,在AXI-Stream协议中,该位与前一级的相关的接口自动相连,自动判断是否有效,本例中直接向该引脚传入“1”,即输入数据一直有效;

    c. 三个输出

    s_axis_data_tready:指示是否准备好接收输入数据;

    m_axis_data_tdata[39:0]:滤波后的输出数据,40位位宽(实际上可以在IP配置时可以看到最后一页的总结里面箭头所指处表示输出数据的位宽为35位,但是此处是AXI-Stream接口,数据必须是8的整数倍,所以是40位,但是最高的几位没有实际含义)。

    m_axis_data_tvalid:指示输出数据有效,有效输出时该位为1;

    76783df3492ecd3dd257acb61f738de2.png

    b6974e220e84f8612ec95f902f1c7214.png

     (2) 引出端口

    邮件单击选择 “Make External”,引出端口后点击箭头所指处,可以让软件检查是否有连线错误;

    9d4d38cef99401ce14bff79c8d5e8dc5.png

      (3) 例化IP

        点击处出现 2,右键单击 2 后先点击生成 IP 核的硬件描述语言,完成后再点击调用 IP 核进行例化;

    197788c52075d58b6a8d3d1d0277b7fc.png

    (4) 例化完成

    8e4e5111f6a70ea43c733d3e1a0eb789.png

        下一讲使用matlab产生待滤波的信号,结合FIR滤波器搭建一个信号产生及滤波的系统,并编写testbench进行仿真分析。

    欢迎关注:FPGA探索者

    2b50a98759512073cc7e5878efe1aa92.png

    展开全文
  • Matlab 实现振动信号低通滤波 附件 txt 中的数字是一个实测振动信号采样频率为 5000Hz试设计一个长度 为 M=32 的FIR 低通滤波器截止频率为 600Hz用此滤波器对此信号进行滤波 要求 1 计算数字截止频率 2 给出滤波器...
  • TMS320C5509A 控制DDS AD9854芯片进行AM幅度...话音信号处理都少不了要用滤波,一般用FIR滤波比较多, 5509有数学LIB库可以直接调用,但是参数需要MATLAB生成 。 程序如下: fir((DATA *)&amp;I_Q_result,...

    接上一节https://blog.csdn.net/pxy198831/article/details/87017571

    TMS320C5509A 控制DDS AD9854芯片进行AM幅度调制

    话音信号处理都少不了要用滤波,一般用FIR滤波比较多,

    5509有数学LIB库可以直接调用,但是参数需要MATLAB生成 。

    程序如下:

    fir((DATA *)&I_Q_result, (DATA *)B_BS,(DATA *)&I_Q_result, BS_dbuf,1,BL_BS);

    相关的定义如下

    
    int I_Q_result;
    typedef short DATA;
    
    #pragma DATA_SECTION(BP_dbuf,".globe_para");
    DATA BP_dbuf[300];
    
    #pragma DATA_SECTION(BP_dbuf_out,".globe_para");
    DATA BP_dbuf_out[300];
    
    #pragma DATA_SECTION(BS_dbuf,".globe_para");
    DATA BS_dbuf[400];

    在CMD文件中(见https://blog.csdn.net/pxy198831/article/details/86582628DSP TMS320C5509A之初始化(二))

    .globe_para : {}> DARAM2 PAGE 0

    然后是关键的FIR参数,用MATLAB的FDATOOLS生成

    根据需要选择合适的FIR滤波器数学模型,选择BANDPASS,带通,音频信号根据需要选择高低频率截止点和带内不平度,观察实际的频响,选择合适的阶数。采样率FS根据AD的采样率设置为44.1KHz

    然后生成C头文件。

    单击上图中的"Target" 下面的“generate C header” ,选择生成int型参数如下:

    /*
     * Filter Coefficients (C Source) generated by the Filter Design and Analysis Tool
     *
     * Generated by MATLAB(R) 7.0 and the 
     *
     * Generated on: 06-May-2015 14:38:08
     *
     */
    
    /*
     * Discrete-Time FIR Filter (real)
     * -------------------------------
     * Filter Structure  : Direct-Form FIR
     * Filter Order      : 300
     * Stable            : Yes
     * Linear Phase      : Yes (Type 1)
     */
    
    /* General type conversion for MATLAB generated C-code  */
    #include "tmwtypes.h"
    /* 
     * Expected path to tmwtypes.h 
     * D:\MATLAB7\extern\include\tmwtypes.h 
     */
    /*
     * Warning - Filter coefficients were truncated to fit specified data type.  
     *   The resulting response may not match generated theoretical response.
     *   Use the Filter Design & Analysis Tool to design accurate fixed-point
     *   filter coefficients.
     */
    const int BL_BS = 301;
    const int16_T B_BS[301] = {
            3,      4,      6,      7,      6,      5,      3,      1,      0,
            0,      2,      5,      9,     12,     13,     12,     10,      6,
            1,     -1,     -1,      2,      7,     13,     19,     21,     20,
           15,      7,      0,     -6,     -7,     -3,      6,     16,     24,
           29,     27,     19,      6,     -7,    -16,    -19,    -14,     -2,
           13,     27,     33,     31,     19,      0,    -20,    -36,    -41,
          -35,    -19,      3,     22,     33,     30,     13,    -14,    -44,
          -67,    -78,    -71,    -50,    -19,      9,     26,     24,      2,
          -36,    -79,   -114,   -131,   -125,    -96,    -54,    -13,     13,
           13,    -15,    -66,   -125,   -176,   -203,   -197,   -160,   -102,
          -44,     -4,      2,    -32,    -99,   -180,   -253,   -293,   -290,
         -241,   -162,    -77,    -16,     -1,    -41,   -128,   -240,   -343,
         -405,   -406,   -341,   -230,   -106,    -10,     24,    -22,   -139,
         -297,   -449,   -548,   -559,   -472,   -308,   -116,     43,    115,
           66,   -101,   -344,   -594,   -771,   -810,   -684,   -415,    -72,
          241,    418,    378,     97,   -376,   -926,  -1389,  -1594,  -1404,
         -755,    317,   1679,   3118,   4388,   5258,   5568,   5258,   4388,
         3118,   1679,    317,   -755,  -1404,  -1594,  -1389,   -926,   -376,
           97,    378,    418,    241,    -72,   -415,   -684,   -810,   -771,
         -594,   -344,   -101,     66,    115,     43,   -116,   -308,   -472,
         -559,   -548,   -449,   -297,   -139,    -22,     24,    -10,   -106,
         -230,   -341,   -406,   -405,   -343,   -240,   -128,    -41,     -1,
          -16,    -77,   -162,   -241,   -290,   -293,   -253,   -180,    -99,
          -32,      2,     -4,    -44,   -102,   -160,   -197,   -203,   -176,
         -125,    -66,    -15,     13,     13,    -13,    -54,    -96,   -125,
         -131,   -114,    -79,    -36,      2,     24,     26,      9,    -19,
          -50,    -71,    -78,    -67,    -44,    -14,     13,     30,     33,
           22,      3,    -19,    -35,    -41,    -36,    -20,      0,     19,
           31,     33,     27,     13,     -2,    -14,    -19,    -16,     -7,
            6,     19,     27,     29,     24,     16,      6,     -3,     -7,
           -6,      0,      7,     15,     20,     21,     19,     13,      7,
            2,     -1,     -1,      1,      6,     10,     12,     13,     12,
            9,      5,      2,      0,      0,      1,      3,      5,      6,
            7,      6,      4,      3
    };
    

     

    展开全文
  • Matlab 生成待滤波信号

    千次阅读 2017-08-01 10:44:38
    Matlab 生成待滤波信号1、 打开 MATLAB 软件,在命令窗口输入 fdatool 并回车,就会弹出滤波器设计工具。 2、 在弹出的提示窗口点击 “Close”。 3、 按照本次实验的要求,在响应类型 Response Type 中选择低通...
  • 设计数字低通滤波器、高通滤波器、带阻滤波器,用MATLAB软件对含噪心电信号分别进行高通、带阻和低通滤波等处理,将心电信号中的低频基线漂移、50Hz工频高频和高频杂波进行滤除。 3、 通过观察对含噪心电图信号的...
  • Matlab中自带工具箱FDATool也能很方便快速的实现滤波器系数h的整定,可以方便应用到嵌入式(大多数基于FIR滤波设计)、FPGA、DSP里的FIR系数当中,本文将描述基于MATLAB下FDATool生成FIR的实用方法。FDATool打开,...
  • [转]基于MATLABFIR滤波器设计与滤波

    万次阅读 2009-02-04 22:54:00
    摘 要 介绍了利用MATLAB信号处理工具箱进FIR滤波器设计的三种方法:程序设计法、FDATool设计法和SPTool设计法,给出了详细的设计步骤,并将设计的滤波器应用到一个混和正弦波信号,以验证滤波器的性能。关键词 ...
  • 通过FIR滤波器也可以实现对一段带噪语音的选频滤波: clc,clear,close all; %%读取音频并进行频谱分析 [x0,fs]=audioread('test.wav'); [x1,fs1]=audioread('airplane.mp3'); %下一步添加噪声,并自动对齐长度,向短...
  • 数字滤波包括FIR和IIR两种滤波方式,其中FIR滤波具有很多优点,可以在幅度特性随意设计的同时,保证精确、严格的线性相位,滤波稳定,不会出现递归型结构中的极限振荡等不稳定现象,且误差较小,可采用FFT算法实现,...
  • FIR低通滤波

    2019-03-05 15:14:05
    采用C语言方式实现了FIR低通滤波,并用matlab对其进行仿真,经比较结果一致
  • 文中针对传统FIR滤波器设计方法繁琐,设计步骤和过程繁杂,且设计好滤波器之后,不能直观快速修改滤波器参数来观察...文中以FIR滤波器设计为例,对信号中噪声做出了处理,并用MATLAB进行了仿真,验证了理论的实现。
  • * 实践教学 * 兰州理工大学 计算机与通信学院 信号处理课程设计 题 目基于MATLABFIR滤波器语音信号去噪 摘要 随着信息技术的不断发展现代信号处理正向着数字化发展研究语音信号的滤波设计 也成了现代信息处理的...
  • matlab实现FIR低通滤波器

    热门讨论 2010-01-13 16:30:46
    本程序是用matlab实现的FIR低通滤波器,通过加载一段音频文件,进行滤波处理,最后又回放滤波器后的音频文件…… 可以通过听觉上区分滤波前后的差别,更好的方式当然是通过观察滤波前后的频谱来进行验证……
  • 波器设计是一个创建满足指定...更准确的指定可能需要实现最小阶数的滤波器、需要实现任意形状的滤波器形状或者需要用fir滤波器实现。 1设计混合测试信号 指标:采样率 1000; 长度 500; 频率成分 100Hz 300H...
  • matlab实现单声道立体声信号的fir低通滤波,使用窗函数法,并将输入数据进行输出,供硬件仿真使用。
  • 滤波器语音信号去噪 摘要 随着信息技术的不断发展现代信号处理正向着数字化发展研究语音信号的滤波设计 也成了现代信息处理的基本内容本次课程设计主要内容是基于?MATLAB?的?FIR?滤波器语音 信号去噪主要运用麦克风...
  • 几乎在所有的工程技术领域中都会涉及到信号的处理问题其信号表现形式有电磁机械以及热光声等信号处理的目的一般是对信号进行分析变换综合估值与识别等如何在较强的噪声背景下提取出真正的信号或信号的特征并将其应用...
  • 本文档为纯代码。在MATLAB中,设计IIR和FIR滤波器分别对一定频率的音频信号进行滤波,滤除高频噪声,程序中所加载的噪声是利用正弦函数生成的高频噪声,滤波器为低通滤波器。
  • Matlab中自带工具箱FDATool也能很方便快速的实现滤波器系数h的整定,可以方便应用到嵌入式(大多数基于FIR滤波设计)、FPGA、DSP里的FIR系数当中,本文将描述基于MATLAB下FDATool生成FIR的实用方法。FDATool打开,...
  • FPGA与MATLAB联合仿真FIR滤波器

    千次阅读 多人点赞 2017-11-13 13:50:35
    FPGA与MATLAB联合仿真FIR滤波器最近在做毕业课题,其中需要用到FIR滤波,所以在实际应用前需要对FIR进行仿真测试,具体步奏如下:0、用matlab产生FIR滤波器所需参数,并量化为FPGA所需的指定位宽;1、用matlab产生...
  • 基于MATLAB的心电信号分析及滤波,刘明洋,李雅梅,本文主要介绍了心电信号的一些基本特点,并且利用FFT(快速傅里叶变换)对其进行频谱分析,然后采用FIR数字滤波器对心电信号进行
  • 录制一段个人自己的语音信号,画出此...然后用自己设计的滤波器对采集的信号进行滤波,画出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化;回放语音信号;最后,设计一个信号处理系统界面。
  • 摘 要 介绍了利用 MATLAB 信号处理工具箱进行 FIR 滤波器设计的三种方法程序设计法 FDATool 设计法和 SPTool 设计法给出了详细的设计步骤并将设计的滤波器应用到一个 混和正弦波信号以验证滤波器的性能 关键词 ...
  • verilog matlab fir 滤波器设计

    千次阅读 2021-02-03 20:59:50
    这里写自定义目录标题欢迎使用Markdown编辑...丰富你的文章UML 图表FLowchart流程图导出与导入导出导入FPGA FIR滤波器设计最近课程项目中需要用到低通滤波器,对已调信号进行低通滤波。之前用altera的fir ip核来做,但

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 168
精华内容 67
关键字:

matlab进行fir滤波

matlab 订阅