• [转帖]信号处理知识


    http://www.cnblogs.com/woshitianma/ 博客有许多跟我专业有关的,值得参考。

    天马行空W   做想做的,做该做的——有思想就去实现!

    verilog常用系统函数以及例子

    来源:http://www.cnblogs.com/woshitianma/archive/2012/12/21/2828370.html

    verilog常用系统函数以及例子

     

    1.打开文件

      integer file_id;

      file_id = fopen("file_path/file_name");

    2.写入文件:$fmonitor,$fwrite,$fdisplay,$fstrobe

      //$fmonitor只要有变化就一直记录

      $fmonitor(file_id, "%format_char", parameter);

      $fmonitor(file_id, "%m: %t in1=%d o1=%h", $time, in1, o1);

    //$fwrite需要触发条件才记录

      $fwrite(file_id, "%format_char", parameter);

    //$fdisplay需要触发条件才记录

      $fdisplay(file_id, "%format_char", parameter);

    $fstrobe();

    3.读取文件:$fread

      integer file_id;

      file_id = $fread("file_path/file_name", "r");

    4.关闭文件:$fclose

      $fclose(fjile_id);

    5.由文件设定存储器初值:$readmemh,$readmemb

      $readmemh("file_name", memory_name"); //初始化数据为十六进制

      $readmemb("file_name", memory_name"); //初始化数据为二进制

    6、文件显示:$monitor,$write,$display

     $display,$write用于输出信息

      $display("rvel = %h hex %d decimal",rvel,rvel);

      $monitor($time, ,"rxd = %b txd = %b",rxd ,txd)

    6、文件定位

      $fseek,文件定位,可以从任意点对文件进行操作;

      $fscanf,对文件一行进行读写。

    7、退出仿真器$finish

    8、随机数据产生:$random

      1 下面是一些常见的应用:
      2         1、读写文件
      3 `timescale 1 ns/1 ns
      4 module FileIO_tb;
      5 integer fp_r, fp_w, cnt;
      6 reg [7:0] reg1, reg2, reg3;
      7 initial begin
      8   fp_r = $fopen("data_in.txt", "r");
      9   fp_w = $fopen("data_out.txt", "w");
     10  
     11   while(!$feof(fp_r)) begin
     12     cnt = $fscanf(fp_r, "%d %d %d", reg1, reg2, reg3);
     13     $display("%d %d %d", reg1, reg2, reg3);
     14     $fwrite(fp_w, "%d %d %d
    ", reg3, reg2, reg1);
     15   end
     16  
     17   $fclose(fp_r);
     18   $fclose(fp_w);
     19 end
     20 endmodule
     21            2 22 integer file, char;
     23 reg eof;
     24 initial begin
     25    file = $fopenr("myfile.txt");
     26    eof = 0;
     27    while (eof == 0) begin
     28        char = $fgetc(file);
     29        eof = $feof (file);
     30        $display ("%s", char); 
     31    end
     32 end
     33         3、文件处理定位
     34 `define SEEK_SET 0
     35 `define SEEK_CUR 1
     36 `define SEEK_END 2
     37 integer file, offset, position, r;
     38 r = $fseek(file, 0, `SEEK_SET);
     39 r = $fseek(file, 0, `SEEK_CUR);
     40 r = $fseek(file, 0, `SEEK_END);
     41 r = $fseek(file, position, `SEEK_SET);
     42       4 43 integer r, file, start, count;
     44 reg [15:0] mem[0:10], r16;
     45 r = $fread(file, mem[0], start, count);
     46 r = $fread(file, r16);
     47          5 48 integer file, position;
     49 position = $ftell(file);
     50            6 51 integer file, r, a, b;
     52 reg [80*8:1] string;
     53 file = $fopenw("output.log");
     54 r = $sformat(string, "Formatted %d %x", a, b);
     55 r = $sprintf(string, "Formatted %d %x", a, b);
     56 r = $fprintf(file, "Formatted %d %x", a, b);
     57        7 58 integer file, r;
     59 file = $fopenw("output.log");
     60 r = $fflush(file);
     61         8 62 // This is a pattern file - read_pattern.pat
     63 // time bin dec hex
     64 10: 001 1 1
     65 20.0: 010 20 020
     66 50.02: 111 5 FFF
     67 62.345: 100 4 DEADBEEF
     68 75.789: XXX 2 ZzZzZzZz
     69 `timescale 1ns / 10 ps
     70 `define EOF 32'hFFFF_FFFF
     71 `define NULL 0
     72 `define MAX_LINE_LENGTH 1000
     73 
     74 module read_pattern;
     75 integer file, c, r;
     76 reg [3:0] bin;
     77 reg [31:0] dec, hex;
     78 real real_time;
     79 reg [8*`MAX_LINE_LENGTH:0] line;
     80 
     81 initial
     82     begin : file_block
     83     $timeformat(-9, 3, "ns", 6);
     84     $display("time bin decimal hex");
     85     file = $fopenr("read_pattern.pat");
     86     if (file == `NULL) // If error opening file
     87         disable file_block; // Just quit
     88 
     89     c = $fgetc(file);
     90     while (c != `EOF)
     91         begin
     92        
     93         if (c == "/")
     94             r = $fgets(line, `MAX_LINE_LENGTH, file);
     95         else
     96             begin
     97             // Push the character back to the file then read the next time
     98             r = $ungetc(c, file);
     99             r = $fscanf(file," %f:
    ", real_time);
    100 
    101             // Wait until the absolute time in the file, then read stimulus
    102             if ($realtime > real_time)
    103                 $display("Error - absolute time in file is out of order - %t",
    104                         real_time);
    105                 else
    106                     #(real_time - $realtime)
    107                         r = $fscanf(file," %b %d %h
    ",bin,dec,hex);
    108                 end // if c else
    109             c = $fgetc(file);
    110         end // while not EOF
    111 
    112     r = $fcloser(file);
    113     end // initial
    114 
    115 // Display changes to the signals
    116 always @(bin or dec or hex)
    117     $display("%t %b %d %h", $realtime, bin, dec, hex);
    118 
    119 endmodule // read_pattern
    120         9、自动比较输出结果
    121 `define EOF 32'hFFFF_FFFF
    122 `define NULL 0
    123 `define MAX_LINE_LENGTH 1000
    124 module compare;
    125 integer file, r;
    126 reg a, b, expect, clock;
    127 wire out;
    128 reg [`MAX_LINE_LENGTH*8:1];
    129 parameter cycle = 20;
    130 
    131 initial
    132     begin : file_block
    133     $display("Time Stim Expect Output");
    134     clock = 0;
    135 
    136     file = $fopenr("compare.pat");
    137     if (file == `NULL)
    138         disable file_block;
    139 
    140     r = $fgets(line, MAX_LINE_LENGTH, file); // Skip comments
    141     r = $fgets(line, MAX_LINE_LENGTH, file);
    142 
    143     while (!$feof(file))
    144         begin
    145         // Wait until rising clock, read stimulus
    146         @(posedge clock)
    147         r = $fscanf(file, " %b %b %b
    ", a, b, expect);
    148 
    149         // Wait just before the end of cycle to do compare
    150         #(cycle - 1)
    151         $display("%d %b %b %b %b", $stime, a, b, expect, out);
    152         $strobe_compare(expect, out);
    153         end // while not EOF
    154 
    155     r = $fcloser(file);
    156     $stop;
    157     end // initial
    158 
    159 always #(cycle / 2) clock = !clock; // Clock generator
    160 
    161 and #4 (out, a, b); // Circuit under test
    162 endmodule // compare
    163         10、从文件中读数据到mem(这个好像一般人用的最多了)
    164 `define EOF 32'HFFFF_FFFF
    165 `define MEM_SIZE 200_000
    166 module load_mem;
    167 integer file, i;
    168 reg [7:0] mem[0:`MEM_SIZE];
    169 reg [80*8:1] file_name;
    170 initial    
    171 begin    
    172 file_name = "data.bin";    
    173 file = $fopenr(file_name);    
    174 i = $fread(file, mem[0]);    
    175 $display("Loaded %0d entries 
    ", i);    
    176 i = $fcloser(file);    
    177 $stop;    
    178 end endmodule // load_mem

    MVI (Multimedia, Video, and Imaging) IP

    来源:http://forums.xilinx.com/t5/Digital-Signal-Processing-IP-and/bd-p/DSP

    来源:http://www.xilinx.com/esp/video/refdes_listing.htm 可以下载参考实例

    Deinterlacer, Video Scaler and Timing Controller Real-Time Video Engine Targeted Reference Design Reference Designs Xilinx, Inc.

    这个论坛很给力。

    来源:https://avnetexpress.avnet.com/store/em/LogonForm?storeId=500201&catalogId=500201&URL=https://www.em.avnet.com/Support%20And%20Downloads/FMC_IMAGEON_Building_Video_Design_Tutorial_14_4_20130110.zip

    video scaler IP -- vivado

    来源:http://forums.xilinx.com/xlnx/board/crawl_message?board.id=DSP&message.id=3737

    Video Scaler IP Core Problem when horizontal up-scale and vertical down-scale

    Hi Everyone,

        Now I have problems about Video Scaler 7.01a in ISE 14.4 on spartan6 device. In most situations the scaler is working in the down-scale mode, and the output width and height are always less than the input width and height, and the scaler result is also correct. While in some situations such as convert 1024x768 to 1280x720, the horizontal direction is up scale while vertical direction is down scale, the scaler will work incorrectly and output image is uploaded in the attachment.

        While I also checked the scaler bit accurate C model, and the c model can handle YUV color format 1024x768 to 1280x720, and I need further work to check whether the c model can handle RGB color format 1024x768 to 1280x720. Mean while I'd like to know whether the problem is only related to scaler, not related to the C model

    答案

    I'm not completely sure what your design looks like, but the most common implemenation is to have a VDMA (Video Direct Memory Access) someplace after then Video Scaler.  This connects to memory, which typically runs at about 200MHz.  I would recommend that you just ty the core and output clocks to the 200MHz, reducing the number of clock domains in your design.

    If you don't have this, then I would still recommend at least a 200MHz fixed core clock.  The reason is that when upscaing, the Video Scaler has to produce more data than it receives, and it needs time to do this.  And in addition there is some small amount of overhead for every line that has to be processed.  So for upscaling it is a good idea to give yourself some room and run the core clock slightly faster than the input clock.

    Chris
    Video Solutions Center: http://www.xilinx.com/support/answers/56851.htm

    来源:http://wenku.baidu.com/view/bcda09c62cc58bd63186bdb3.html

    数字滤波器要求输入、输出信号均为数字信号。

     数字滤波器(Digital Filter)通常是指一个用有限精度算法实现的离散线性时不变系统。因此它具有线性时不变系统的所有特性。

    幅频响应表示信号通过该滤波器后各频率成分的衰减情况,而相频响应反映各频率成分通过滤波器后在时间上的延时情况。

    多相滤波是将信号按照一定的规则分组,即抽取。同时将滤波器的冲击响应按照同样的规则分组,将对应的组进行卷积,得到一路的输出信号,最后将多路的信号重新排列得到输出信号。即先进行抽取再进行滤波,同传统的先滤波在抽取的滤波器比较多相滤波是一种很高效的滤波方式,因为传统的滤波在最后抽取的时候会丢掉很多没被抽取到但经过滤波的信号。同时多相滤波器每一路的运算量都大大减小,所以相对高效。

    多相滤波过程式按照相位均匀划分把数字滤波器的系统函数H(z)分解成若干个具有不同相位的组,形成多个分支,在分支上实现滤波。

    采用多相滤波结构,可利用多个阶数较低的滤波来实现原本阶数较高的滤波,而且每个分支滤波器处理的数据率仅为原数据率的I/D,这为工程上高速实时信号处理提供了实现途径。

    来源:http://blog.sina.com.cn/s/blog_5d70c9e30101aiyi.html

    线性相位滤波器

     1、相位随频率变化的曲线。它代表各频率分量在时间原点所具有的相位

    来源:http://zhidao.baidu.com/question/203285202.html?fr=qrl&index=0&qbl=topic_question_0&word=%B3%E9%CD%B7%20%CF%E0%CE%BB%20%C2%CB%B2%A8%C6%F7%CA%C7%CA%B2%C3%B4

    滤波器的阶数,就是指过滤谐波的次数,一般来讲,同样的滤波器,其阶数越高,滤波效果就越好,但是,阶数越高,成本也就越高,因此,选择合适的阶数是非常重要的。

    在我们描述一个滤波器时,会通过一组系数来确定滤波器的性能,用MATLAB的FDATOOL设计滤波器时,实际上就是我们设定参数,让它产生一组系数来实现,描述这个滤波器的系数的个数就是滤波器的长度,我们知道,滤波过程就是一个卷积过程,是让信号序列和这一组系数去卷积,滤波后的长度按卷积时的长度计算就是(信号序列长度+滤波器长度-1),这里讲的滤波器长度就应该是滤波器的系数个数。

    滤波器,每一级都保存了一个经过延时的输入样值,各级的输入连接和输出连接被称为抽头。一个M 阶的FIR 滤波器将有M+1个抽头

  • 相关阅读:
    【命令】set命令
    【命令】ln命令
    【命令】htop命令
    【命令】top命令
    【命令】ps命令
    【命令】kill命令
    【命令】pstree命令
    【进程/作业管理】篇章一:Linux进程及其管理(进程管理类工具)----pstree、ps、top、htop、kill、(killall、pkill、pgrep、pidof)
    【进程/作业管理】篇章四:Linux任务计划、周期性任务执行
    【进程/作业管理】篇章二:Linux系统作业控制(jobs)
  • 原文地址:https://www.cnblogs.com/zlh840/p/4342070.html
Copyright © 2020-2023  润新知