主题中讨论的其他部件:C2000WARE
大家好,
是否有人尝试使用F2.8379万D添加两个正弦波? 控制套件中是否有任何示例?
我想这可能是模拟传感器读数的第一个动作,用来分析其正弦波的FFT。
任何帮助都将很有帮助。 非常感谢。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
大家好,
是否有人尝试使用F2.8379万D添加两个正弦波? 控制套件中是否有任何示例?
我想这可能是模拟传感器读数的第一个动作,用来分析其正弦波的FFT。
任何帮助都将很有帮助。 非常感谢。
您好,Richard:
正如您所说,我正在尝试在TMU上实施两个正弦波,但我遇到了问题。 我想这是关于RAM大小或链接的问题。 正如你在下面的代码中看到的,我刚刚为第二个正弦波创建了一个在其名称末尾带有“A”的变量,我将频率更改为250 MHz。 我截取了这些问题的屏幕截图。
您能帮我吗?
再次感谢Richard,您是一位出色的导师。
----------------------------------
#include <mathing.h>
#include <stdio.h>
#include "F28x_Project.h"
#define vector_size 1024
#define vector_Sizea 1024
#Define MAX_ARG 1.0
#Define Min_ARG -1.0
#define profile_FREQ 200 //以MHz为单位指定
#define profile_FREQa 250 //以MHz为单位指定
#define profile_per 1000 //以微秒为单位指定
#define two_pi 6.28.3185万307179586476925286766559</xmt-block>30.7179万</s>58.6476万 92.5286万76.6559万
#define tolerance 1.0e-6
#define start_timer (x){ \
X = CpuTimer1Regs.TIM.all; \
CpuTimer1Regs.tcr.bit.ts = 0; \
}
#define start_TIMERA (y){ \
Y = CpuTimer2Regs.TIM.all; \
CpuTimer2Regs.tcr.bit.ts = 0; \
}
#define stop_timer (x) { \
CpuTimer1Regs.tcr.bit.ts = 1; \
X = CpuTimer1Regs.TIM.all; \
CpuTimer1Regs.tcr.bit.trb = 1; \
}
#define stop_TIMERA (y) { \
CpuTimer2Regs.tcr.bit.ts = 1; \
Y = CpuTimer2Regs.TIM.all; \
CpuTimer2Regs.tcr.bit.trb = 1; \
}
uINT16_t pass=0;
UINT16_t失败=0;
浮点输入矢量[vector_size];
浮点输入Vectora[vector_Sizea];
浮点rtsOutput[vector_size];
浮点rtsOutputa[vector_Sizea];
浮点tmuOutput[vector_size];
浮点tmuOutputa[vector_Sizea];
浮点错误矢量[vector_size];
浮点errorVectora[vector_Sizea];
浮点tickRTS,ticktMU,timeRTS, timeTMU;
float ticksRTSa,ticksTMUa,timeRTSa, timeTMUa;
浮点maxError;
浮点maxErrora;
void genInputVector (float *输入矢量,Int16_t大小);
void genInputVectora (float *inputVectora,Int16_t size);
float genErrorVector (float *rtsOutput,float *tmuOutput,
浮点*errorVector,Int16_t大小);
float genErrorVectora(float *rtsOutputa, float *tmuOutputa,
float *errorVectora,Int16_t大小);
浮点RTS_RunTest(浮点*inputVector,浮点*rtsOutput,
Int16_t大小);
float rts_runTesta (float *inputVectora, float *rtsOutputa,
Int16_t大小);
FLOAT TMU_RunTest(float *inputVector,float *tmuOutput,
Int16_t大小);
float tmu_runTesta (float *inputVectora, float *tmuOutputa,
Int16_t大小);
Void主(void)
{
InitSysCtrl();
色调;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectorTable();
InitCpuTimers();
ConfigCpuTimer(&CpuTimer1, profile_FREQ, profile_PER);
ConfigCpuTimer(&CpuTimer2, profile_FREQ, profile_per;
EINT; //启用全局中断INTM
ERTM; //启用全局实时中断DBGM
genInputVector (输入矢量,矢量大小);
genInputVectora(inputVectora, vector_Sizea);
tickRTS = RTS_RunTest (输入矢量,rtsOutput,矢量大小);
ticksRTSa = rts_runTesta (inputVectora,rtsOutputa,vector_Sizea);
ticksTMU = TMU_RunTest (输入矢量,tmuOutput,vector_size);
ticksTMUa = TMU_runTesta (inputVectora,tmuOutputa,vector_Sizea);
maxError = genErrorVector (rtsOutput,tmuOutput,errorVector,vector_size);
maxErrora = genErrorVectora(rtsOutputa, tmuOutputa, errorVectora, vector_Sizea);
timeRTS = tickRTS *(1.0 /配置文件_FREQ);
timeRTSa = tickRTSa *(1.0 /配置文件FREQa);
timeTMU = tickTMU *(1.0 /配置文件_FREQ);
TimeTMUa = tickTMUa *(1.0 / PROGE_FREQa);
printf ("执行结果\n");
printf ("RTS时间:%10.6f us\n",timeRTS);
printf ("TMU时间:%10.6f us\n",timeTMU);
printf ("RTS时间:%10.6f us\n",timeRTSa);
printf ("TMU时间:%10.6f us\n",timeTMUa);
}
void genInputVector (float *输入矢量,Int16_t大小)
{
Int16_t i;
浮动步长=(MAX_ARG - MIN_ARG)/大小;
InputVector[0]= min_ARG;
对于(i = 1;i <大小;I++)
{
inputVector [i]= inputVector [I-1]+ step;
}
}
void genInputVectora (float *inputVectora,Int16_t大小)
{
Int16_t i;
浮动步长=(MAX_ARG - MIN_ARG)/大小;
inputVectora[0]= min_arg;
对于(i = 1;i <大小;I++)
{
inputVectora[i]= inputVectora[I-1]+ step;
}
}
float genErrorVector (float *rtsOutput,float *tmuOutput,
浮点*errorVector,Int16_t大小)
{
Int16_t i;
浮点maxError =-maxError; 1.0
对于(i = 0;i <大小;I++)
{
errorVector[i]= fabs(rtsOutput[i]- tmuOutput[i]);
IF (errorVector [i]> maxError)
{
maxError = errorVector[i];
}
IF (errorVector [i]<容差)
{
pass++;
}
否则
{
失败++;
}
}
Return (maxError);
}
float genErrorVectora(float *rtsOutputa, float *tmuOutputa,
float *errorVectora,Int16_t大小)
{
Int16_t j;
浮点maxErrora =-Errora; 1.0
对于(j = 0;j <大小;j++)
{
errorVectora[j]= fabs(rtsOutputa[j]- tmuOutputa[j]);
IF (errorVectora[j]> maxErrora)
{
maxErrora = errorVectora[j];
}
IF (errorVectora[j]<容差)
{
pass++;
}
否则
{
失败++;
}
}
Return (maxErrora);
}
浮点RTS_RunTest(浮点*inputVector,浮点*rtsOutput,
Int16_t大小)
{
Int16_t i;
FLOAT START_TIME = 0.0 ;
float stop_time = 0.0 ;
START_TIMER (START_TIME);
对于(i = 0;i <大小;I++)
{
rtsOutput[i]= sin (inputVector [i]* two_pi);
}
STOP_TIMER (STOP_TIME);
返回(start_time - stop_time);
}
float rts_runTesta (float *inputVectora, float *rtsOutputa,
Int16_t大小)
{
Int16_t i;
FLOAT START_TIME = 0.0 ;
float stop_time = 0.0 ;
START_TIMERA (START_TIME);
对于(i = 0;i <大小;I++)
{
rtsOutputa[i]= sin (inputVectora[i]* two_pi);
}
STOP_TIMERA (STOP_TIME);
返回(start_time - stop_time);
}
FLOAT TMU_RunTest(float *inputVector,float *tmuOutput,
Int16_t大小)
{
Int16_t i;
FLOAT START_TIME = 0.0 ;
float stop_time = 0.0 ;
START_TIMER (START_TIME);
对于(i = 0;i <大小;I++)
{
tmuOutput[i]=_sinpuf32 (inputVector [i]);
}
STOP_TIMER (STOP_TIME);
返回(start_time - stop_time);
}
float tmu_runTesta(float *inputVector1,float *tmuOutputta,
Int16_t大小)
{
Int16_t j;
FLOAT START_TIME = 0.0 ;
float stop_time = 0.0 ;
START_TIMERA (START_TIME);
对于(j = 0;j <大小;j++)
{
tmuOutputa[j]=_sinpuf32(inputVectora[j]);
}
STOP_TIMERA (STOP_TIME);
返回(start_time - stop_time);
}
Ellen,
很高兴知道您找到并解决了问题。 感谢您告知我们。
现在,您将知道当您将8个浮点矢量的长度设为1024时,它们消耗16 K字(每个浮点变量消耗两个16位字),但GS2 - GS4 RAM块只包含12 K字。 矢量长度减半可将您的总需求减少到8 K字,因此现在矢量可以舒适地适应。 如果您以后需要更多分辨率,另一个解决方案是返回到1024长度向量,并通过添加GS5 (可能还有GS6)为.ebss分配更多内存。
此致,
Richard
Ellen,
是的,如果您尚未将GS5和GS6分配给其他任何设备,您所做的工作将有效。 或者,您可以在链接程序文件的内存部分创建单个命名部分(如“RAMGS2_GS6”),并按名称引用该部分,这实际上是相同的。
ebss部分用于所有全局变量存储,因此,除了向量外,它还用于maxError,PASS,FAIL,...等内容,并且始终比向量大小的总和大一些。 如果需要,可以使用data_section pragma将引导程序分配到特定的命名内存段(有关详细信息,请参阅C编译器用户指南)。 此设备上有足够的内存,因此您可以一直添加4K GS块,直到GS15,并返回到1024长度向量。
CPU计时器应该没有任何问题-您看到了问题吗?
此致,
Richard
您好,Ellen:
您应该能够将所有24个向量分配到这些GS内存块中。 我认为最干净的方法是将它们合并到一个命名的内存段中,并使用它来容纳矢量。 链接程序命令文件可能如下所示:
内存
{
...
第1页:
RAMGS2_GS4:原点= 0x00E000,长度= 0x0.3万
RAMGS5_GS15:原点= 0x1.1万,长度= 0x00B000
...
}
章节
{
...
.ebss:> RAMGS2_GS4,页= 1
SineVecsSection:> RAMGS5_GS15,page =1.
...
}
此选项保留三个GS部分作为.ebbs,另有11个部分作为引导程序。 然后,在代码中,使用以下#pragma将每个引导程序连接到相同的命名部分:
#define vector_length 256
#pragma data_section(vectra 1,"SineVecsSection")
float vectra 1[vector_length];
#pragma data_section (矢量2,"SineVecsSection)
float vectra 2[vector_length];
………………………………………………… 必须为每个矢量使用单独的pragma。
我希望这能有所帮助。
此致,
Richard
您好,Ellen:
感谢您发送代码。 跟随时有点困难,但排队...
tmuOutputr[k]= tmuOutput[k]+tmuOutputta[k];
...seems对两个正弦向量求和,每个正弦向量长度为1024个数据点。 我猜顶部的genInputVectorX()函数是引导程序初始化的位置吗? 那么,您如何加载这些? 我正在寻找频率与数据点数量的关系。 谢谢。
此致,
Richard
您好,Richard:
当然。 再次感谢!
下面是所有代码:
P.s.:你想要的是粗体.
//
//包含的文件
//
#include <mathing.h>
#include <stdio.h>
#include "F28x_Project.h"
//
//定义
//
#define vector_size 1024
#Define MAX_ARG 1.0
#define MIN_ARG - 1.0
#define profile_FREQ 0.0.0006万 //以MHz为单位指定
#define profile_FREQa 0.0003 //以MHz为单位指定
#define profile_FREQr 0.0.0006万 //以MHz为单位指定
#define profile_per 100万 //以微秒为单位指定
#define two_pi 6.28.3185万307179586476925286766559</xmt-block>30.7179万</s>58.6476万 92.5286万76.6559万
#define tolerance 1.0e-6
#define start_timer (x){\
X = CpuTimer1Regs.TIM.all;\
CpuTimer1Regs.tcr.bit.ts = 0;\
}
#define start_TIMERA (y){\
Y = CpuTimer0Regs.TIM.all;\
CpuTimer0Regs.tcr.bit.ts = 0;\
}
#define start_TIMER(r){\
R = CpuTimer2Regs.TIM.all;\
CpuTimer2Regs.tcr.bit.ts = 0;\
}
#define STOP_TIMER (x){\
CpuTimer1Regs.tcr.bit.ts = 1;\
X = CpuTimer1Regs.TIM.all;\
CpuTimer1Regs.tcr.bit.trb = 1;\
}
#define STOP_TIMERA (y){\
CpuTimer0Regs.tcr.bit.ts = 1;\
Y = CpuTimer0Regs.TIM.all;\
CpuTimer0Regs.tcr.bit.trb = 1;\
}
#define stop_TIMER(r){\
CpuTimer2Regs.tcr.bit.ts = 1;\
R = CpuTimer2Regs.TIM.all;\
CpuTimer2Regs.tcr.bit.trb = 1;\
}
//
//全局
//
uINT16_t pass=0;
UINT16_t失败=0;
浮点输入矢量[vector_size];
浮点输入Vectora[vector_size];
浮点输入Vectorb[vector_size];
浮点输入Vectorr[vector_size];
浮点rtsOutput[vector_size];
浮点rtsOutputa[vector_size];
浮点rtsOutputb[vector_size];
浮点rtsOutputr[vector_size];
浮点tmuOutput[vector_size];
浮点tmuOutputa[vector_size];
浮点tmuOutputr[vector_size];
浮点错误矢量[vector_size];
浮点errorVectora[vector_size];
浮点errorVectorr[vector_size];
浮点tickRTS,ticktMU,timeRTS,timeTMU;
float ticksRTSa,ticksTMUa,timeRTSa,timeTMUa;
float ticksRTSr, ticktmur, timeRTSr, timeTMUr;
浮点maxError;
浮点maxErrora;
浮点maxErrorr;
//
//函数原型
//
void genInputVector (float *输入矢量,Int16_t大小);
void genInputVectorr (float *inputVectorr,Int16_t size);
void genInputVectora (float *inputVectora,Int16_t size);
float genErrorVector (float *rtsOutput,float *tmuOutput,
浮点*errorVector,Int16_t大小);
float genErrorVectora(float *rtsOutputa, float *tmuOutputa,
float *errorVectora,Int16_t大小);
float genErrorVectorr (float *rtsOutputr,float *tmuOutputr,
float *errorVectorr,Int16_t大小);
浮点RTS_RunTest(浮点*inputVector,浮点*rtsOutput,
Int16_t大小);
float rts_runTesta (float *inputVectora, float *rtsOutputa,
Int16_t大小);
float rts_runTestr(float *inputVectorr,float *rts Outputr,
Int16_t大小);
FLOAT TMU_RunTest(float *inputVector,float *tmuOutput,
Int16_t大小);
float tmu_runTesta (float *inputVectora, float *tmuOutputa,
Int16_t大小);
float tmu_runTestr(float *inputVectorr,float *tmuOutputrt,
Int16_t大小);
//
//主菜单
//
Void主(void)
{
//
//步骤1. 初始化系统控制:
// PLL,看门狗,启用外设时钟
//此示例函数可在F2837xD_sysctrl.c文件中找到。
//
InitSysCtrl();
//
//步骤2. 清除所有中断并初始化PIE矢量表:
//禁用CPU中断
//
色调;
//
//将PIE控件寄存器初始化为其默认状态。
//默认状态是禁用所有PIE中断和标志
//被清除。
//此函数位于F2837xD_PIECTRL.c文件中。
//
InitPieCtrl();
//
//禁用CPU中断并清除所有CPU中断标志:
//
IER = 0x0000;
IFR = 0x0000;
//
//使用指向外壳中断的指针初始化PIE矢量表
//服务例程(ISR)。
//这将填充整个表,即使中断也是如此
//在本例中不使用。 这对于调试非常有用。
// shell ISR例程位于F2837xD_DefaultIsr.C.中
//此函数位于F2837xD_PieVect.C.中
//
InitPieVectorTable();
//
//步骤3. 配置用于分析TMU和RTS例程的计时器
//
InitCpuTimers();
ConfigCpuTimer(&CpuTimer1, profile_FREQ, profile_PER);
ConfigCpuTimer(&CpuTimer0, profile_FREQ, profile_per;
ConfigCpuTimer(&CpuTimer2, profile_FREQr, profile_per;
//
//步骤4. 启用全局中断和更高优先级的实时调试事件:
//
EINT;//启用全局中断INTM
ERTM;//启用全局实时中断DBGM
//
//步骤5. 运行测试,生成输入向量,调用RTS/TMU
//例程,获取错误矢量,最后打印执行时间。
//
genInputVector (输入矢量,矢量大小);
genInputVectora (inputVectora,vector_size);
genInputVectorr(inputVectorr, vector_size);
tickRTS = RTS_RunTest (输入矢量,rtsOutput,矢量大小);
ticksRTSa = rts_runTesta (inputVectora,rtsOutputa,vector_size);
ticksRTSr = rts_runTestr (inputVectorr,rtsOutputr,vector_size);
ticksTMU = TMU_RunTest (输入矢量,tmuOutput,vector_size);
ticksTMUa = TMU_runTesta (inputVectora,tmuOutputa,vector_size);
ticksTMUr = TMu_runTestr(inputVectorr, tmuOutputr, vector_size);
maxError = genErrorVector (rtsOutput,tmuOutput,errorVector,vector_size);
maxErrora = genErrorVectora(rtsOutputa, tmuOutputa, errorVectora, vector_size);
maxErrorr = genErrorVectorr (rtsOutputr,tmuOutputr,errorVectorr,vector_size);
timeRTS = tickRTS *(1.0 /配置文件_FREQ);
timeRTSa = tickRTSa *(1.0 /配置文件FREQa);
timeRTSr = tickRTSr *(1.0 /配置文件频率);
timeTMU = tickTMU *(1.0 /配置文件_FREQ);
TimeTMUa = tickTMUa *(1.0 / PROGE_FREQa);
timeTMUr = tickTMUr *(1.0 /配置文件频率);
//
//要使用printf语句,请为.cio,.sysmem部分分配空间,
//增加属性中.text,stack和heap部分的分配
//和链接程序命令文件。
//
printf ("执行结果\n");
printf ("RTS时间:%10.6f us\n",timeRTS);
printf ("TMU时间:%10.6f us\n",timeTMU);
printf ("RTS时间:%10.6f us\n",timeRTSa);
printf ("TMU时间:%10.6f us\n",timeTMUa);
printf ("RTS时间:%10.6f us\n",timeRTSr);
printf ("TMU时间:%10.6f us\n",timeTMUr);
}
//
// genInputVector -生成输入矢量数组
//
void genInputVector (float *输入矢量,Int16_t大小)
{
Int16_t i;
浮动步长=(MAX_ARG - MIN_ARG)/大小;
InputVector[0]= min_ARG;
对于(i = 1;i <大小;I++)
{
inputVector [i]= inputVector [I-1]+ step;
}
}
void genInputVectora (float *inputVectora,Int16_t大小)
{
Int16_t i;
浮动步长=(MAX_ARG - MIN_ARG)/大小;
inputVectora[0]= min_arg;
对于(i = 1;i <大小;I++)
{
inputVectora[i]= inputVectora[I-1]+ step;
}
}
void genInputVectorr (float *inputVectorr,Int16_t大小)
{
Int16_t i;
浮动步长=(MAX_ARG - MIN_ARG)/大小;
inputVectorr[0]= min_arg;
对于(i = 1;i <大小;I++)
{
inputVectorr[i]= inputVectorr[I-1]+ step;
}
}
//
// genErrorVector -生成错误矢量数组
//
float genErrorVector (float *rtsOutput,float *tmuOutput,
浮点*errorVector,Int16_t大小)
{
Int16_t i;
浮点maxError =-maxError; 1.0
对于(i = 0;i <大小;I++)
{
errorVector[i]= fabs(rtsOutput[i]- tmuOutput[i]);
IF (errorVector [i]> maxError)
{
maxError = errorVector[i];
}
IF (errorVector [i]<容差)
{
pass++;
}
否则
{
失败++;
}
}
Return (maxError);
}
float genErrorVectora(float *rtsOutputa, float *tmuOutputa,
float *errorVectora,Int16_t大小)
{
Int16_t j;
浮点maxErrora =-Errora; 1.0
对于(j = 0;j <大小;j++)
{
errorVectora[j]= fabs(rtsOutputa[j]- tmuOutputa[j]);
IF (errorVectora[j]> maxErrora)
{
maxErrora = errorVectora[j];
}
IF (errorVectora[j]<容差)
{
pass++;
}
否则
{
失败++;
}
}
Return (maxErrora);
}
float genErrorVectorr (float *rtsOutputr,float *tmuOutputr,
float *errorVectorr,Int16_t大小)
{
Int16_t i;
浮点maxErrorr =- 1.0 ;
对于(i = 0;i <大小;I++)
{
errorVector[i]= fabs(rtsOutputr[i]- tmuOutputr[i]);
IF (errorVectorr[i]> maxErrorr)
{
maxErrorr = errorVectorr[i];
}
IF (errorVectorr[i]<容差)
{
pass++;
}
否则
{
失败++;
}
}
return (maxErrorr);
}
//
// RTS_RunTest -执行SIN生成测试(C28)
//
浮点RTS_RunTest(浮点*inputVector,浮点*rtsOutput,
Int16_t大小)
{
Int16_t i;
FLOAT START_TIME = 0.0 ;
float stop_time = 0.0 ;
START_TIMER (START_TIME);
对于(i = 0;i <大小;I++)
{
rtsOutput[i]= sin (inputVector [i]* two_pi);
}
STOP_TIMER (STOP_TIME);
返回(start_time - stop_time);
}
float rts_runTesta (float *inputVectora, float *rtsOutputa,
Int16_t大小)
{
Int16_t i;
FLOAT START_TIME = 0.0 ;
float stop_time = 0.0 ;
START_TIMERA (START_TIME);
对于(i = 0;i <大小;I++)
{
rtsOutputa[i]= sin (inputVectora[i]* two_pi);
}
STOP_TIMERA (STOP_TIME);
返回(start_time - stop_time);
}
float rts_runTestr(float *inputVectorr,float *rts Outputr,
Int16_t大小)
{
Int16_t i;
FLOAT START_TIME = 0.0 ;
float stop_time = 0.0 ;
START_TIMERr (START_TIME);
对于(i = 0;i <大小;I++)
{
rtsOutputr[i]= sin (inputVectorr[i]* two_pi);
}
STOP_TIMERr (STOP_TIME);
返回(start_time - stop_time);
}
//
// TMU_RunTest -执行SIN生成测试(TMU)
//
FLOAT TMU_RunTest(float *inputVector,float *tmuOutput,
Int16_t大小)
{
Int16_t i;
FLOAT START_TIME = 0.0 ;
float stop_time = 0.0 ;
START_TIMER (START_TIME);
对于(i = 0;i <大小;I++)
{
tmuOutput[i]=_sinpuf32 (inputVector [i]);
}
STOP_TIMER (STOP_TIME);
返回(start_time - stop_time);
}
float tmu_runTesta (float *inputVectora, float *tmuOutputa,
Int16_t大小)
{
Int16_t j;
FLOAT START_TIME = 0.0 ;
float stop_time = 0.0 ;
START_TIMERA (START_TIME);
对于(j = 0;j <大小;j++)
{
tmuOutputa[j]=__sinpuf32(inputVectora[j]+inputVectora[j]);
}
STOP_TIMERA (STOP_TIME);
返回(start_time - stop_time);
}
float tmu_runTestr(float *inputVectorr,float *tmuOutputrt,
Int16_t大小)
{
Int16_t k;
FLOAT START_TIME = 0.0 ;
float stop_time = 0.0 ;
START_TIMERr (START_TIME);
对于(k = 0;k <大小;k++)
{
tmuOutputr[k]= tmuOutput[k]+tmuOutputta[k];
}
STOP_TIMERr (STOP_TIME);
返回(start_time - stop_time);
}
//
//文件结束
//
您好,Ellen:
很抱歉耽误您的时间和多个帖子。
程序生成两个大小为1024的数组,其中包含正弦曲线数据。 一个数组正好包含两个数据句点(tmuOutput),而另一个数组包含四个句点(tmuOutputa)。 这些数组在函数"TMU_runTestr()"中求和。 您在之前发布的时间图表中看到的是这两个波形(tmuOutputr)的总和,您可以看到它们的频率之间的关系是2:1,如预期。 因此,它们不能代表60Hz和300Hz的波形。
该程序不会对任何事物进行物理采样,因此数据与时间或频率没有明确的关系,但如果我们假设较低的频率代表60Hz,我们在1024阵列中有两个时间段的数据, 或每秒1/60的512个采样,因此我们的采样周期大约是32.55 Us,而我们的采样率是30.72 kHz。 这是CCS图窗口中所需的数字。 您能否尝试一下,让我知道FFT幅度图是否更有意义? 我们应该看到60Hz和120Hz的峰值。 谢谢。
此致,
Richard