这几天每天就是到12点才睡,外设功能已经测试的差不多了,都是一些简单的程序,也就没必要再发贴了,最终还是要做自己的项目的。
今天 就先测试一下官方给出的FFT算法的能力 。
首先,导入FFT工程 。
可以看到,工程中多了一个.m的文件 ,这就是
matlab的程序文件,既然有,那就运行一下,看看吧。
以下是matlab程序文件。
- fs=1000; % 采样频率
- N=1024; % 数据点数
- n=0:N-1;t=n/fs; % 时间序列
- x=5*sin(2*pi*150*t)+15*sin(2*pi*350*t); % 信号
- subplot(2,1,1),plot(t,x); % 绘制时域信号图
- y=fft(x,N); % 对信号进行快速傅里叶变换
- mag=abs(y);mag=mag*2/N; % 振幅
- f=n*fs/N; % 频率序列
- subplot(2,1,2),plot(f,mag); % 绘制振幅图
- xlabel('频率/Hz');
- ylabel('振幅');title('N=1024');grid on;
- grid on; % 绘制振幅图
可以看到,这个算法是与程序中的c文件是一样的。在matlab中运行一下。可以看到结果
以下是FFT的原始信号。
以下是FFT后的幅值。可以看到在150与350的地方才会有值。这与原始信号的函数是一样的。
- x=5*sin(2*pi*150*t)+15*sin(2*pi*350*t);
回来看看一下CCS5.5中的程序
仿真结果。
可以看到工程中有两个仿真器配置文件,simulation.ccxml是软件仿真配置文件。默认情况下是有效的。
直接点Debug就可以了。在产生信号后加上断点,查看一下产生信号的波形。
如下图,打开信号查看窗口。
在窗口中设置好相应的参数。点击 OK
会生成如下的信号波形,可以看出,与matl***产生的波形是一样的。
C文件中的程序为
- Input[i]=5*sin(2*PI*150*(i/Fs))+15*sin(2*PI*350*(i/Fs));
如上方法,再建一个窗口,查看幅值。一定是与matlab的结果相同的。
以上就是对官方FFT测试的结果,用profile clock测了下,有9416个时钟。效率还是很高的,虽然这根实际运行时的时间有误差,但也能说明问题。