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\n',signal);

fprintf(fidi,'%d\n',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所有,切勿用于商业! 若引用资料、代码、图片、文字等等请注明出处,谢谢!

posted @ 2017-01-14 11:18  logic3  阅读(1910)  评论(0编辑  收藏  举报