生成一段可以在CCS运行的c程序,使得一个信号分别经FIR以及IIR滤波器处理,能够比较FIR与IIR滤波器的性能,并说明如何通过CCS调出原始信号的时域波形、原始信号的频谱、滤波后信号的时域波形以及滤波后信号的频谱的窗口
时间: 2024-01-22 22:18:23 浏览: 114
下面是一个可以在CCS运行的c程序,用于比较FIR与IIR滤波器的性能:
```c
#include "DSP28x_Project.h"
#include "DSP2833x_Mcbsp.h"
#include "DSP2833x_Xintf.h"
#include "DSP2833x_Spi.h"
#include "DSP2833x_Gpio.h"
#include "DSP2833x_Dma.h"
#define FIR_LENGTH 51
#define IIR_LENGTH 4
float32 FIR_coeff[FIR_LENGTH] = {0.0, 0.002, 0.004, 0.006, 0.008, 0.01, 0.012, 0.014, 0.016, 0.018, 0.02, 0.022, 0.024, 0.026, 0.028, 0.03, 0.032, 0.034, 0.036, 0.038, 0.04, 0.042, 0.044, 0.046, 0.048, 0.05, 0.052, 0.054, 0.056, 0.058, 0.06, 0.062, 0.064, 0.066, 0.068, 0.07, 0.072, 0.074, 0.076, 0.078, 0.08, 0.082, 0.084, 0.086, 0.088, 0.09, 0.092, 0.094, 0.096, 0.098, 0.1};
float32 IIR_coeff[IIR_LENGTH] = {0.2, -0.4, 0.6, -0.8};
float32 FIR_buffer[FIR_LENGTH];
float32 IIR_buffer[IIR_LENGTH];
float32 FIR_filter(float32 input)
{
int i;
float32 output = 0.0;
FIR_buffer[0] = input;
for(i = 0; i < FIR_LENGTH; i++)
{
output += FIR_coeff[i] * FIR_buffer[i];
}
for(i = FIR_LENGTH - 1; i > 0; i--)
{
FIR_buffer[i] = FIR_buffer[i - 1];
}
return output;
}
float32 IIR_filter(float32 input)
{
int i;
float32 output = 0.0;
IIR_buffer[0] = input;
for(i = 0; i < IIR_LENGTH; i++)
{
output += IIR_coeff[i] * IIR_buffer[i];
}
for(i = IIR_LENGTH - 1; i > 0; i--)
{
IIR_buffer[i] = IIR_buffer[i - 1];
}
return output;
}
void main(void)
{
int i;
float32 input_signal[1000];
float32 output_FIR[1000];
float32 output_IIR[1000];
InitSysCtrl();
InitPieCtrl();
DINT;
InitPieVectTable();
for(i = 0; i < 1000; i++)
{
input_signal[i] = sin(2 * PI * i / 1000);
output_FIR[i] = FIR_filter(input_signal[i]);
output_IIR[i] = IIR_filter(input_signal[i]);
}
while(1);
}
```
在上面的程序中,我们定义了FIR和IIR滤波器的系数以及缓冲区,并且实现了两个滤波器的函数。然后,我们使用一个正弦波作为输入信号,并分别使用FIR和IIR滤波器对信号进行处理,得到两个输出信号。
在CCS中,可以通过以下步骤来调出原始信号的时域波形、原始信号的频谱、滤波后信号的时域波形以及滤波后信号的频谱的窗口:
1. 点击“File”菜单,选择“New” -> “CCS Project”来创建一个新项目。
2. 在“Project Name”中输入项目名称,选择合适的存储路径,勾选“Use default location”选项,并选择“C2000” -> “F2837xD” -> “Empty CCS Project”作为“Project Type”,然后点击“Finish”按钮。
3. 在“Project Explorer”窗口中右键点击项目名称,选择“New” -> “Source File”,输入文件名并选择“C Source File (.c)”类型,然后点击“Finish”按钮。
4. 将上面的c程序复制到新创建的c文件中。
5. 点击“Project”菜单,选择“Properties”。
6. 在左侧导航栏中选择“C/C++ Build” -> “TI C2000 Compiler” -> “Advanced Options”。
7. 在右侧“Predefined Symbols”中添加“F28379D”符号。
8. 在左侧导航栏中选择“Build” -> “Steps”。
9. 在右侧“Commands”中添加以下命令:
```
${CG_TOOL_ROOT}/bin/cl2000 --advice:performance=all -g --diag_warning=225 --output_file="${ConfigName}/${TargetName}.out" "${InputFilePath}" --cmd_file="${BuildArtifactFileBaseName}.cmd" ${IncludeOptions} ${SourceOptions}
```
10. 点击“Apply”按钮,然后点击“OK”按钮。
11. 点击“Project”菜单,选择“Build All”来编译项目。
12. 点击“Debug”菜单,选择“Debug Configurations”。
13. 在左侧导航栏中选择“Texas Instruments XDS110 USB Debug Probe”并点击“New launch configuration”按钮。
14. 在“Main”选项卡中,选择“Project”为刚刚创建的项目,选择“Connection”为“Texas Instruments XDS110 USB Debug Probe”。
15. 在“Target”选项卡中,选择“Device”为“F28379D”。
16. 在“Program”选项卡中,选择“Load Program”为“${ConfigName}/${TargetName}.out”。
17. 点击“Apply”按钮,然后点击“Debug”按钮。
18. 等待CCS连接到目标设备,并在“Debug”视图中打开“Expressions”窗口。
19. 在“Expressions”窗口中添加以下表达式:input_signal[0:999]、output_FIR[0:999]、output_IIR[0:999]。
20. 点击“Run”按钮,然后在“Expressions”窗口中查看相应的变量值。
21. 点击“Window”菜单,选择“Signal Processing” -> “Real-time Graph”来打开时域波形窗口。
22. 在时域波形窗口中,点击“Add Plot”按钮并选择“input_signal”、“output_FIR”和“output_IIR”变量,然后点击“OK”按钮。
23. 点击“Window”菜单,选择“Signal Processing” -> “Spectrum Analyzer”来打开频谱分析窗口。
24. 在频谱分析窗口中,点击“Add Plot”按钮并选择“input_signal”、“output_FIR”和“output_IIR”变量,然后点击“OK”按钮。
25. 点击“Run”按钮,然后在时域波形窗口和频谱分析窗口中查看信号的时域波形和频域特性。
阅读全文