zoukankan      html  css  js  c++  java
  • Quartus II 与ModelSim-Altera联合仿真FFT IP核之FFT IP调用与自产生信号分析-lab2

    信号源参数

    采样频率为256Hz,采样点数为4096个点;

    信号含有2V的直流分量, 频率为50Hz、相位为-30度、幅度为3V的交流信号, 频率为75Hz、相位为90度、幅度为1.5V的交流信号。 用数学表达式就是如下: 

    S=2+3*cos(2*pi*50*t-pi*30/180)+1.5*cos(2*pi*75*t+pi*90/180)  

    Matlab对信号进行分析

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

    %对信号采样数据为4096点的处理

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

    fs=256;N=4096; %采样频率和数据点数

    n=0:N-1;

    t=n/fs; %时间序列

    signal = 2 + 3*cos(2*pi*50*t-pi*30/180) + 1.5*cos(2*pi*75*t+pi*90/180); %信号

    figure;

    plot(signal);

    y=fft(signal,N); %对信号进行快速Fourier变换

    mag=abs(y); %求得Fourier变换后的振幅

    f=n*fs/N; %频率序列

    figure;

    subplot(2,1,1),

    plot(f,mag); %绘出随频率变化的振幅

    xlabel('频率/Hz');

    ylabel('振幅');

    title('N=4096');

    subplot(2,1,2);

    plot(f(1:N/2),mag(1:N/2)); %绘出Nyquist频率之前随频率变化的振幅

    xlabel('频率/Hz');

    ylabel('振幅');title('N=4096');

    3个频率:0Hz、50Hz、75Hz,应该分别在第1个点、第51个点、  第76个点上出现峰值,其它各点应该接近0。

    将信号写入txt文件

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

    %%%%%%将信号写入txt文件

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

    image_data = signal*0;

    for(x=1:N)

    signal(x)= round(signal(x));

    image_data(x) = round(image_data(x));

    end

    fidr = fopen('sin_process_real_input.txt','wt');%将信号进行打印输?

    fidi = fopen('sin_process_image_input.txt','wt');%将信号进行打印输?

    fprintf(fidr,'%d ',signal);

    fprintf(fidi,'%d ',image_data);

    fclose(fidr);

    fclose(fidi);

    Modelsim对信号进行处理

    输入信号如下

    处理结果输出

    实验结果

    将modelsim的处理结果写入txt文件,然后在matlab对信号进行处理分析;

    sin_fidro = fopen('sin_process_real_output_ver.txt','r');

    sin_fidio = fopen('sin_process_imag_output_ver.txt','r');

    sin_fideo = fopen('sin_process_exponent_output_ver.txt','r');

    sin_yreal_out = fscanf(sin_fidro,'%d');

    sin_yimag_out = fscanf(sin_fidio,'%d');

    sin_yexp_out = fscanf(sin_fideo,'%d');

    fclose(sin_fidro);

    fclose(sin_fidio);

    fclose(sin_fideo);

    figure;

    plot(sin_yreal_out);

    title('sin_yreal_out');

    figure;

    plot(sin_yimag_out);

    title('sin_yimag_out');

    figure;

    plot(sin_yexp_out);

    title('sin_yexp_out');

    for i=1:N*4-1

    sin_real_out(i) = sin_yreal_out(i)*(2^abs(sin_yexp_out(i)));

    sin_imag_out(i) = sin_yimag_out(i)*(2^abs(sin_yexp_out(i)));

    sin_mod_out(i) = sqrt(sin_real_out(i)^2 + sin_imag_out(i)^2);%计算幅值

    end

    figure;

    plot(abs(sin_mod_out));

    title('sin mod out');

    figure;

    plot(sin_real_out);

    title('sin real out');

    figure;

    plot(sin_imag_out);

    title('sin imag out');

    3个频率:0Hz、50Hz、75Hz,应该分别在第1个点、第201个点、  第301个点上出现峰值,其它各点应该接近0。

    根据某点n所表示的频率为:Fn=(n-1)*Fs/N,Fs为256Hz,N为1024,

    第1个点:就是0Hz,即是直流信号;

    第201个点:(201-1)*256/1024=50Hz;

    第301个点:(301-1)*256/1024=75Hz。由此,验证FFT IP核的正确性。

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

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

  • 相关阅读:
    结对-结对编项目作业名称-测试过程
    团队-团队编程项目作业名称-代码设计规范
    《团队-团队编程项目作业名称-项目总结》
    课后作业-阅读任务-阅读提问-4.
    课后作业-阅读任务-阅读提问-4
    课后作业-阅读任务-阅读笔记-4
    个人编程作业2
    团队编程项目作业6-程序维护
    团队-象棋游戏-项目总结
    团队编程项目作业6-程序维护
  • 原文地址:https://www.cnblogs.com/logic3/p/6284925.html
Copyright © 2011-2022 走看看