zoukankan      html  css  js  c++  java
  • 正弦波信号发生器(离散采样)

    正弦波发生器:
    1.将连续的正弦波信号进行离散化
        设正弦波周期为T=2*pi,对一个周期的正弦波进行100次采样,则
      相应采样点的离散值为:
        sin(2*pi/100)
        sin(2*pi*2/100)
          . . .
        sin(2*pi*n/100) 0<=n<=100
          . . .
        sin(2*pi*100/100)
        对于采样点离散值的计算可以采用Matlab进行计算,程序见下。

    2.将离散化后的正弦波一个整周期存储到Rom中
      (1)将离散后的数据进行定点化,Rom的规格是256x8bits,数据格式1bit符号位和7bits小数位
      (2)创建Rom

    clc;
    clear all;
    %% 将连续的正弦波信号进行离散化
    % 设正弦波周期为T=2*pi,对一个周期的正弦波进行100次采样,则
    % 相应采样点的离散值为:
    % sin(2*pi/100)
    % sin(2*pi*2/100)
    % . . .
    % sin(2*pi*n/100) 0<=n<=100
    % . . .
    % sin(2*pi*100/100)

    %% 1.设置离散化参数
    T = 2*pi; %正弦波周期
    N = 2^8; %采样点个数
    sp = 0:(N-1); %采样点

    %% 2.进行离散化采样
    sin_data = sin(T*sp/N); % sin_data取值为-1至+1之间的浮点数

    %% 3.将离散后的正弦波存储到Rom中
    % 将离散后的数据进行定点化,
    % Rom的规格是256x8bits,数据格式1bit符号位和7bits小数位
    fix_point_sin_data = sin_data * (2^7-1);
    fix_point_sin_data = fix(fix_point_sin_data);
    % 对负数取补码,便于存储Rom中
    for i=1:N
    if fix_point_sin_data(i)<0
    fix_point_sin_data(i) = 256+fix_point_sin_data(i);
    end
    end

    %% 生成mif文件
    fid = fopen('rom_256x8_init.mif','w+');
    fprintf(fid,'WIDTH=8; ');
    fprintf(fid,'DEPTH=256; ');
    fprintf(fid,' ');
    fprintf(fid,'ADDRESS_RADIX=UNS; ');
    fprintf(fid,'DATA_RADIX=UNS; ');
    fprintf(fid,' ');
    fprintf(fid,'CONTENT BEGIN ');
    for i=0:255
    fprintf(fid,' %d : %d; ',i,fix_point_sin_data(i+1));
    end
    fprintf(fid,'END; ');
    fclose(fid);

     

      对于正弦波,如何能够将输出频率提高?离散后的正弦波采样值存储在rom中,通过对rom
    进行寻址,读出存储的数据即为正弦波的采样值,因此可以通过控制对rom寻址的快慢(步长)
    ,来控制输出正弦波的频率。(此为DDS原理作铺垫)

  • 相关阅读:
    C#学习笔记之——一些应用
    C#学习笔记之——面向对象编程
    C#学习笔记之——一些练习(包含了一些out的使用,string的使用,StringBuilder的使用,类的属性,最大公约数的求法,还有英雄,武器类的设置)
    C#学习笔记之——数据类型,引用参数,输出参数,数组参数,命名参数,可选参数
    C#学习笔记之——类、对象
    离散实践1
    计算机书籍
    2013年12月大学英语六级作文预测:挑战与改变
    TCP协议详解
    Uip学习简介及网址
  • 原文地址:https://www.cnblogs.com/MAQI/p/7604247.html
Copyright © 2011-2022 走看看