dsp28335fft得到python fft 频域分析信号的实部和虚部怎么一直在变化

21ic官方微信-->
后使用快捷导航没有帐号?
请完成以下验证码
查看: 664|回复: 60
TMS320F28335 FFT后发现与真实幅值差别很大
&&未结帖(20)
主题帖子积分
中级技术员, 积分 120, 距离下一级还需 180 积分
中级技术员, 积分 120, 距离下一级还需 180 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
中级技术员, 积分 120, 距离下一级还需 180 积分
中级技术员, 积分 120, 距离下一级还需 180 积分
本帖最后由 williamzjy 于
14:48 编辑
用TMSF28335的ADC模块以8.3MHz的采样率采样函数发生器产生的24KHz正弦波(0--2V)做FFT分析验证,现发现采样是准确的,运算的频点分布也是正确的,可是FFT后的RFFTmagBuff怎么和真实的信号幅值对不上啊,直流分量1V,信号幅值1V,不知道我理解的对不对,
还有就是
RFFT_adc_f32u(&rfft_adc);& &// This version of FFT doesn't need buffer alignment这个和RFFT_f32u(&rfft_adc)有什么区别,我同时还发现AdcMirror.ADCRESULT0不用右移4位了,本身就是右对齐的,之前右移四位,运算完全是0,求各位指点怎么和信号真实幅值对上,好像*2/N也不对啊。。。表示疑惑
/*采样不连续率提高到8.3M,之前的不准确,连续采样可以有8.3M的采样率 */
#include &DSP2833x_Device.h& // DSP2833x Headerfile Include File
#include &DSP2833x_Examples.h& // DSP2833x Examples Include File
#include &DSP28x_Project.h& // Device Headerfile and Examples Include File
#include &math.h&
#include &fpu_rfft.h&
#define RFFT_STAGES 10
#define RFFT_SIZE (1 && RFFT_STAGES)
#define ADC_BUF_LEN RFFT_SIZE // ADC buffer length
//#define ADC_SAMPLE_PERIOD 3124 // 3124 = (3125-1) = 48 KHz sampling w/ 150 MHz SYSCLKOUT
#define F_PER_SAMPLE L/(float)RFFT_SIZE //Internal sampling rate is 48kHz
RFFT_ADC_F32_STRUCT rfft_
RFFT_F32_STRUCT
float RFFToutBuff[RFFT_SIZE]; //Calculated FFT result
float RFFTF32Coef[RFFT_SIZE]; //Coefficient table buffer
float RFFTmagBuff[RFFT_SIZE/2+1]; //Magnitude of frequency spectrum
//--- Global Variables
//uint16_t AdcBuf[ADC_BUF_LEN]; // ADC buffer allocation
volatile uint16_t FFTStartFlag = 0; // One frame data ready flag
// ADC start parameters
#if (CPU_FRQ_150MHZ) // Default - 150 MHz SYSCLKOUT
#define ADC_MODCLK 0x3 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 150/(2*3) = 25.0 MHz
#endif
#if (CPU_FRQ_100MHZ)
#define ADC_MODCLK 0x2 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 100/(2*2) = 25.0 MHz
#endif
#define CPU_FREQ 150E6
#define LSPCLK_FREQ CPU_FREQ/4
#define SCI_FREQ 115200
#define SCI_PRD (LSPCLK_FREQ/(SCI_FREQ*8))-1
interrupt void sciaRxFifoIsr(void);
void scia_fifo_init(void);
void scia_xmit(int a);
void scia_msg(Uint16 *msg);
Uint16 sdataA[160]; // Send data for SCI-A
Uint16 rdataA[160]; // Received data for SCI-A
#define ADC_CKPS 0x0 // ADC module clock = HSPCLK/1 = 25.5MHz/(1) = 25.0 MHz
#define ADC_SHCLK 0x1 // S/H width in ADC module periods = 2 ADC cycle
//#define BUF_SIZE 160 // Sample buffer size
// Global variable for this example
//Uint16 j = 0,ADC_END = 0; // ADC finish flag
//#pragma DATA_SECTION(ADC_Result,&DMARAML4&);
//volatile float ADC_Result[160];
#pragma DATA_SECTION(AdcBuf,&DMARAML6L7&);
//volatile Uint16 AdcBuf[ADC_BUF_LEN];
uint16_t AdcBuf[ADC_BUF_LEN];
float AdcBuf2[ADC_BUF_LEN];
volatile Uint16 *DMAD
volatile Uint16 *DMAS
interrupt void local_DINTCH1_ISR(void);
main()
{
uint16_t i,j;
// Frequency of single-frequency-component signal
InitSysCtrl();
InitSciaGpio();
EALLOW;
SysCtrlRegs.HISPCP.all = ADC_MODCLK; // HSPCLK = SYSCLKOUT/ADC_MODCLK
EDIS;
InitPieCtrl();
// Disable CPU interrupts and clear all CPU interrupt flags:
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
// #ifdef FLASH
// MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);
// InitFlash();
// #endif
// Interrupts that are used in this example are re-mapped to
// ISR functions found within this file.
EALLOW; // Allow access to EALLOW protected registers
PieVectTable.DINTCH1= &local_DINTCH1_ISR;
PieVectTable.SCIRXINTA = &sciaRxFifoI
EDIS; // Disable access to EALLOW protected registers
rfft_adc.Tail = &rfft.OutB //Link the RFFT_ADC_F32_STRUCT to
//RFFT_F32_STRUCT. Tail pointer of
//RFFT_ADC_F32_STRUCT is passed to
//the OutBuf pointer of RFFT_F32_STRUCT
rfft.FFTSize = RFFT_SIZE; //Real FFT size
rfft.FFTStages = RFFT_STAGES; //Real FFT stages
rfft_adc.InBuf = &AdcBuf[0]; //Input buffer
rfft.OutBuf = &RFFToutBuff[0]; //Output buffer
rfft.CosSinBuf = &RFFTF32Coef[0]; //Twiddle factor
rfft.MagBuf = &RFFTmagBuff[0]; //Magnitude output buffer
RFFT_f32_sincostable(&rfft); //Calculate twiddle factor
//Clean up output buffer
for (i=0; i & RFFT_SIZE; i++)
{
RFFToutBuff[i] = 0;
}
//Clean up magnitude buffer
for (i=0; i & RFFT_SIZE/2+1; i++)
{
RFFTmagBuff[i] = 0;
}
scia_fifo_init(); // Init SCI-A
// EnableInterrupts();
PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // Enable the PIE block
PieCtrlRegs.PIEIER9.bit.INTx1=1; // PIE Group 9, int1
PieCtrlRegs.PIEIER7.bit.INTx1 = 1;
IER |= 0x100; // Enable CPU INT
IER |= M_INT7 ; //Enable INT7 (7.1 DMA Ch1)
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
InitAdc(); // For this example, init the ADC
// Specific ADC setup for this example:
AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK; // Sequential mode: Sample rate = 1/[(2+ACQ_PS)*ADC clock in ns]
// = 1/(3*40ns) =8.3MHz (for 150 MHz SYSCLKOUT)
// = 1/(3*80ns) =4.17MHz (for 100 MHz SYSCLKOUT)
// If Simultaneous mode enabled: Sample rate = 1/[(3+ACQ_PS)*ADC clock in ns]
AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS;
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; // 1 Cascaded mode
AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 = 1;// Enable SOCA from ePWM to start SEQ1
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1; // Enable SEQ1 interrupt (every EOS)
AdcRegs.ADCTRL2.bit.RST_SEQ1 = 0x1;
// AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0;
AdcRegs.ADCTRL1.bit.CONT_RUN = 1; // Setup continuous run
AdcRegs.ADCTRL1.bit.SEQ_OVRD = 0; // Enable Sequencer override feature
AdcRegs.ADCCHSELSEQ1.all = 0x0; // Initialize all ADC channel selects to A0
AdcRegs.ADCCHSELSEQ2.all = 0x0; // Initialize all ADC channel selects to A0
AdcRegs.ADCCHSELSEQ3.all = 0x0; // Initialize all ADC channel selects to A0
AdcRegs.ADCCHSELSEQ4.all = 0x0; // Initialize all ADC channel selects to A0
AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 15; // convert and store in 8 results registers
// Assumes ePWM1 clock is already enabled in InitSysCtrl();
// EPwm1Regs.ETSEL.bit.SOCAEN = 1; // Enable SOC on A group
EPwm1Regs.ETSEL.bit.SOCASEL = 4; // Select SOC from from CPMA on upcount
EPwm1Regs.ETPS.bit.SOCAPRD = 1; // Generate pulse on 1st event
EPwm1Regs.CMPA.half.CMPA = 150; // Set compare A value
EPwm1Regs.TBPRD =300; // Set period for ePWM1
EPwm1Regs.TBCTL.bit.CTRMODE = 0; // count up and start
// EALLOW;
/* 在 InitSysCtrl()中已经将ePWM1的时钟进行了使能 */
/* 用来配置ADC的采样率 */
// SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; // Disable TBCLK within the ePWM
/* ePWM1的相关配置,以供片内ADC的启动 */
// EPwm1Regs.TBCTL.bit.CLKDIV = 0;
// EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0; /* TBCLK = SYSCLK/2 = 75MHz*/
// EPwm1Regs.ETSEL.bit.SOCAEN = 1; /* 使能ADC开始转换A脉冲,使能ePWMxSOCA脉冲 */
// EPwm1Regs.ETSEL.bit.SOCASEL = 4;/* 使能,ePWMxSOCA脉冲当定时器递增时时间基准计数器等于CMPA */
// EPwm1Regs.ETPS.bit.SOCAPRD = 1; /* 在第一个事件上生成ePWMxSOCA脉冲 */
// EPwm1Regs.TBPRD = 750; /* 设置时间基准计数器的周期,决定 PWM1的频率 */
// EPwm1Regs.CMPA.half.CMPA = 150; // Set compare A value
// EPwm1Regs.TBCTR = 0; /* 清空计数器 */
// EPwm1Regs.TBCTL.bit.CTRMODE = 0; /* 设置计数器模式为递增计数模式 */
// SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; // Enable TBCLK within the ePWM
// Initialize DMA
DMAInitialize();
// Clear Table
for (i=0; i&ADC_BUF_LEN; i++)
{
AdcBuf[i] = 0x0000;
}
// Configure DMA Channel
DMADest = &AdcBuf[0]; //Point DMA destination to the beginning of the array
DMASource = &AdcMirror.ADCRESULT0; //Point DMA source to ADC result register base
DMACH1AddrConfig(DMADest,DMASource);
DMACH1BurstConfig(15,2,2);
DMACH1TransferConfig(63,-14,2);
DMACH1WrapConfig(600,600,600,600); //Don't use wrap function
DMACH1ModeConfig(DMA_SEQ1INT,PERINT_ENABLE,ONESHOT_DISABLE,CONT_ENABLE,SYNC_DISABLE,SYNC_SRC,
OVRFLOW_DISABLE,THIRTYTWO_BIT,CHINT_END,CHINT_ENABLE);
StartDMACH1();
EPwm1Regs.ETSEL.bit.SOCAEN = 1; // Enable SOC on A group
while(1)
{
// Waiting ADC finish
if(FFTStartFlag) // If one frame data ready, then do FFT
{
for (i=0; i&ADC_BUF_LEN; i++)
{
AdcBuf2[i] = (float)((AdcBuf[i]) * 3.0 / 4096.0);//不用右移4位了?之前一直右移4位,发现全是0
}
RFFT_adc_f32u(&rfft_adc); // This version of FFT doesn't need buffer alignment
RFFT_f32_mag(&rfft); // Calculate spectrum amplitude
j = 1;
freq = RFFTmagBuff[1];
for(i=2;i&RFFT_SIZE/2+1;i++)
{
//Looking for the maximum valude of spectrum magnitude
if(RFFTmagBuff[i] & freq)
{
j =
freq = RFFTmagBuff[i];
freq = F_PER_SAMPLE * (float)j; //Convert normalized digital frequency to analog frequency
FFTStartFlag = 0; //Start collecting the next frame of data
EPwm1Regs.ETSEL.bit.SOCAEN = 1; // Enable SOC on A group
AdcRegs.ADCTRL1.bit.CONT_RUN = 1;
}
// INT7.1
interrupt void local_DINTCH1_ISR(void) // DMA Channel 1
{
// To receive more interrupts from this PIE group, acknowledge this interrupt
DMADest = &AdcBuf[0]; //Point DMA destination to the beginning of the array
DMASource = &AdcMirror.ADCRESULT0; //Point DMA source to ADC result register base
EPwm1Regs.ETSEL.bit.SOCAEN = 0; // DISable SOC on A group
AdcRegs.ADCTRL1.bit.CONT_RUN = 0;
PieCtrlRegs.PIEACK.all = PIEACK_GROUP7;
FFTStartFlag = 1; // One frame data ready
// EPwm1Regs.TBCTL.bit.CTRMODE = 1; // count up and start
// EPwm1Regs.TBCTR = 0; /* 清空计数器 */
interrupt void sciaRxFifoIsr(void)
{
// rdataA[0]=SciaRegs.SCIRXBUF. // Read data
// scia_xmit(rdataA[0]);
Uint16
for(i=0; i& 12; i++)
{
rdataA[i]=SciaRegs.SCIRXBUF. // Read data
}
for(i=0; i& 12; i++)
{
SciaRegs.SCITXBUF=rdataA[i]; // Send data
}
//SciaRegs.SCIFFRX.bit.RXFFOVRCLR=1; // Clear Overflow flag
SciaRegs.SCIFFRX.bit.RXFFINTCLR=1; // Clear Interrupt flag
PieCtrlRegs.PIEACK.all|=0x100; // Issue PIE ack
}
void scia_fifo_init()
{
SciaRegs.SCICCR.all =0x0007; // 1 stop bit, No loopback
// No parity,8 char bits,
// async mode, idle-line protocol
SciaRegs.SCICTL1.all =0x0003; // enable TX, RX, internal SCICLK,
// Disable RX ERR, SLEEP, TXWAKE
SciaRegs.SCICTL2.bit.TXINTENA =1;
SciaRegs.SCICTL2.bit.RXBKINTENA =1;
SciaRegs.SCIHBAUD = 0x0000;
SciaRegs.SCILBAUD = SCI_PRD;
SciaRegs.SCICCR.bit.LOOPBKENA =0; // disEnable loop back
SciaRegs.SCIFFTX.all=0xC021;
SciaRegs.SCIFFRX.all=0x0021;//接收12个字节中断
SciaRegs.SCIFFCT.all=0x00;
SciaRegs.SCICTL1.all =0x0023; // Relinquish SCI from Reset
SciaRegs.SCIFFTX.bit.TXFIFOXRESET=1;
SciaRegs.SCIFFRX.bit.RXFIFORESET=1;
// Transmit a character from the SCI
void scia_xmit(int a)
{
while (SciaRegs.SCICTL2.bit.TXRDY == 0) {}
SciaRegs.SCITXBUF=a;
void scia_msg(Uint16 * msg)
{
i = 0;
while(msg[i] != '\0')
{
scia_xmit(msg[i]);
i++;
}
}
//===========================================================================
// No more.
//===========================================================================
&/P&复制代码
本帖子中包含更多资源
才可以下载或查看,没有帐号?
主题帖子积分
助理工程师, 积分 1852, 距离下一级还需 148 积分
助理工程师, 积分 1852, 距离下一级还需 148 积分
主题帖子积分
专家等级:结帖率:100%打赏:0.00受赏:8.00
主题帖子积分
助理工程师, 积分 1852, 距离下一级还需 148 积分
助理工程师, 积分 1852, 距离下一级还需 148 积分
你的变量定义的对不对
主题帖子积分
助理工程师, 积分 1852, 距离下一级还需 148 积分
助理工程师, 积分 1852, 距离下一级还需 148 积分
主题帖子积分
专家等级:结帖率:100%打赏:0.00受赏:8.00
主题帖子积分
助理工程师, 积分 1852, 距离下一级还需 148 积分
助理工程师, 积分 1852, 距离下一级还需 148 积分
这个149/采样频率才是最后数值
主题帖子积分
中级技术员, 积分 120, 距离下一级还需 180 积分
中级技术员, 积分 120, 距离下一级还需 180 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
中级技术员, 积分 120, 距离下一级还需 180 积分
中级技术员, 积分 120, 距离下一级还需 180 积分
谢谢回复,仔细想了下,考虑到采样的不完整,频谱泄漏的情况,得到的模值大体符合傅立叶公式
主题帖子积分
初级工程师, 积分 2436, 距离下一级还需 564 积分
初级工程师, 积分 2436, 距离下一级还需 564 积分
主题帖子积分
专家等级:结帖率:0%打赏:0.00受赏:1.00
主题帖子积分
初级工程师, 积分 2436, 距离下一级还需 564 积分
初级工程师, 积分 2436, 距离下一级还需 564 积分
直流分量在0位置上。
主题帖子积分
初级工程师, 积分 2436, 距离下一级还需 564 积分
初级工程师, 积分 2436, 距离下一级还需 564 积分
主题帖子积分
专家等级:结帖率:0%打赏:0.00受赏:1.00
主题帖子积分
初级工程师, 积分 2436, 距离下一级还需 564 积分
初级工程师, 积分 2436, 距离下一级还需 564 积分
幅值和采样频率、采样点数有计算关系。
主题帖子积分
助理工程师, 积分 1058, 距离下一级还需 942 积分
助理工程师, 积分 1058, 距离下一级还需 942 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
助理工程师, 积分 1058, 距离下一级还需 942 积分
助理工程师, 积分 1058, 距离下一级还需 942 积分
你的其他数据呢?
主题帖子积分
助理工程师, 积分 1058, 距离下一级还需 942 积分
助理工程师, 积分 1058, 距离下一级还需 942 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
助理工程师, 积分 1058, 距离下一级还需 942 积分
助理工程师, 积分 1058, 距离下一级还需 942 积分
计算的幅值/数组个数计算。
主题帖子积分
助理工程师, 积分 1362, 距离下一级还需 638 积分
助理工程师, 积分 1362, 距离下一级还需 638 积分
主题帖子积分
专家等级:结帖率:100%打赏:0.00受赏:5.00
主题帖子积分
助理工程师, 积分 1362, 距离下一级还需 638 积分
助理工程师, 积分 1362, 距离下一级还需 638 积分
你使用波形显示看过了吗
主题帖子积分
助理工程师, 积分 1362, 距离下一级还需 638 积分
助理工程师, 积分 1362, 距离下一级还需 638 积分
主题帖子积分
专家等级:结帖率:100%打赏:0.00受赏:5.00
主题帖子积分
助理工程师, 积分 1362, 距离下一级还需 638 积分
助理工程师, 积分 1362, 距离下一级还需 638 积分
可能ADC采样有什么问题吧。
主题帖子积分
初级工程师, 积分 2121, 距离下一级还需 879 积分
初级工程师, 积分 2121, 距离下一级还需 879 积分
主题帖子积分
专家等级:结帖率:33%打赏:0.00受赏:11.00
主题帖子积分
初级工程师, 积分 2121, 距离下一级还需 879 积分
初级工程师, 积分 2121, 距离下一级还需 879 积分
你算的幅值是多大?
主题帖子积分
初级工程师, 积分 2121, 距离下一级还需 879 积分
初级工程师, 积分 2121, 距离下一级还需 879 积分
主题帖子积分
专家等级:结帖率:33%打赏:0.00受赏:11.00
主题帖子积分
初级工程师, 积分 2121, 距离下一级还需 879 积分
初级工程师, 积分 2121, 距离下一级还需 879 积分
楼主的FFT计算之后的频率是多大的?
主题帖子积分
初级工程师, 积分 2121, 距离下一级还需 879 积分
初级工程师, 积分 2121, 距离下一级还需 879 积分
主题帖子积分
专家等级:结帖率:33%打赏:0.00受赏:11.00
主题帖子积分
初级工程师, 积分 2121, 距离下一级还需 879 积分
初级工程师, 积分 2121, 距离下一级还需 879 积分
如果是做固定频率识别可以做DFT。
主题帖子积分
中级技术员, 积分 120, 距离下一级还需 180 积分
中级技术员, 积分 120, 距离下一级还需 180 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
中级技术员, 积分 120, 距离下一级还需 180 积分
中级技术员, 积分 120, 距离下一级还需 180 积分
谢谢大家的热情回复,我需要做标签信号波形分析,想从FFT中发现单张和多张标签的幅值规律,发现特征,写个算法,可是信号太窄,只有1US,但是一个信号的周期是10ms,我的采样率是8.3M的,数据量太大,几万个点,不好处理啊,有什么好的办法吗?怎么减少采样点
主题帖子积分
初级工程师, 积分 2446, 距离下一级还需 554 积分
初级工程师, 积分 2446, 距离下一级还需 554 积分
主题帖子积分
专家等级:结帖率:14%
主题帖子积分
初级工程师, 积分 2446, 距离下一级还需 554 积分
初级工程师, 积分 2446, 距离下一级还需 554 积分
呵呵,有难度
主题帖子积分
资深工程师, 积分 16582, 距离下一级还需 3418 积分
资深工程师, 积分 16582, 距离下一级还需 3418 积分
主题帖子积分
专家等级:结帖率:100%打赏:0.00受赏:16.00
主题帖子积分
资深工程师, 积分 16582, 距离下一级还需 3418 积分
资深工程师, 积分 16582, 距离下一级还需 3418 积分
谢谢大家的热情回复,我需要做标签信号波形分析,想从FFT中发现单张和多张标签的幅值规律,发现特征,写个 ...
DSP做1024就很慢了,周期太大了。
主题帖子积分
资深工程师, 积分 16582, 距离下一级还需 3418 积分
资深工程师, 积分 16582, 距离下一级还需 3418 积分
主题帖子积分
专家等级:结帖率:100%打赏:0.00受赏:16.00
主题帖子积分
资深工程师, 积分 16582, 距离下一级还需 3418 积分
资深工程师, 积分 16582, 距离下一级还需 3418 积分
谢谢大家的热情回复,我需要做标签信号波形分析,想从FFT中发现单张和多张标签的幅值规律,发现特征,写个 ...
信号频率太低,采样计算也不容易,试试DFT。
主题帖子积分
资深工程师, 积分 11412, 距离下一级还需 8588 积分
资深工程师, 积分 11412, 距离下一级还需 8588 积分
主题帖子积分
专家等级:结帖率:64%打赏:0.00受赏:0.10
主题帖子积分
资深工程师, 积分 11412, 距离下一级还需 8588 积分
资深工程师, 积分 11412, 距离下一级还需 8588 积分
这个需要注意AD采样率的设计的
后来乍到,前辈们多多包涵了啊。。
主题帖子积分
中级工程师, 积分 3798, 距离下一级还需 1202 积分
中级工程师, 积分 3798, 距离下一级还需 1202 积分
主题帖子积分
专家等级:结帖率:100%打赏:0.00受赏:17.00
主题帖子积分
中级工程师, 积分 3798, 距离下一级还需 1202 积分
中级工程师, 积分 3798, 距离下一级还需 1202 积分
执行的效率怎么样?
主题帖子积分
中级工程师, 积分 3798, 距离下一级还需 1202 积分
中级工程师, 积分 3798, 距离下一级还需 1202 积分
主题帖子积分
专家等级:结帖率:100%打赏:0.00受赏:17.00
主题帖子积分
中级工程师, 积分 3798, 距离下一级还需 1202 积分
中级工程师, 积分 3798, 距离下一级还需 1202 积分
8.3MHz这么高频率采样怎么样?
精华达人奖章
等级类勋章
奔腾之江水
发帖类勋章
技术高手奖章
人才类勋章
精英会员奖章
等级类勋章
时间类勋章
突出贡献奖章
等级类勋章
湍急之河流
发帖类勋章君,已阅读到文档的结尾了呢~~
dsp28335的调试总结,这是一份总结很全面的资料(共5篇)
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
dsp28335的调试总结,这是一份总结很全面的资料(共5篇)
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口关于controlSUITE中RFFT例程的问题(28335做FFT的一些问题)。 - C2000(TM) 32位实时 MCU - 德州仪器在线技术支持社区
关于controlSUITE中RFFT例程的问题(28335做FFT的一些问题)。
发表于2年前
<input type="hidden" id="hGroupID" value="38"
&span style=&font-size:&>一直在用28335做FFT进行谐波分析。过程中遇到一些问题,放在这里与大家讨论交流,也有一些问题希望得到大家的解答,希望在相互交流中大家都能更好的解决问题。&/span>&/p>
&p>&span style=&font-size:&>我根据论坛的提示首先在TI官网下载了&span style=&color:#ff0000;&>FFT库SPRC081&/span>。&span style=&color:#ff0000;&>例程&/span>主要看了两个,1、&span style=&color:#ff0000;&>&a href=&.cn/tool/cn/controlsuite& target=&extwin&>controlsuite&/a>中定点库fixpiont中的F2833X REAL FFT&/span>。2、使用&span style=&color:#ff0000;&>SPRC081中的dspbox中rfft程序&/span>(SPRC081中有一个安装程序,安装后电脑中会有相应的FFT例程文件夹,在CCS打开)。下面分别说一下这两个例程。&span style=&color:#ff0000;&>文档看的是SPRC081中的PDF文件fft_ml.pdf,文件名字是FFT Library。&/span>&/span>&/p>
&p>&span style=&font-size:&>一、&span>&a href=&.cn/tool/cn/controlsuite& target=&extwin&>controlsuite&/a>中定点库fixpiont中的F2833X REAL FFT。个人觉得该例程有点问题。&/span>&/span>&/p>
&p>&span style=&font-size:&>&span>1、该例程中有有加窗语句&span style=&color:#ff0000;&>const long win[N/2]=HAMMING32; &fft.winptr=(long *)win&/span>; 但是在fft.h中只有一个窗,而且点数是32(如下图),但是主程序的分析点数N是512,个人觉得不对。请问大家怎么看待?&/span>&/span>&/p>
&p>&span style=&font-size:&>&span>&a href=&/cfs-file.ashx/__key/communityserver-discussions-components-files/56/A_.png&>&img src=&/resized-image.ashx/__size/550x0/__key/communityserver-discussions-components-files/56/A_.png& border=&0& alt=& &>&/a>&/span>&/span>&/p>
&div>&img alt=& &>&/div>
&p>&span style=&font-size:&>&span>2、我在PDF中看到28335做RFFT时,是把2N点实数转换为N点复数进行运算,然后在进行分解,得到最终结果,所以需要split函数,但是该例程中并没有出现split函数,这和PDF描述不同。我在网上看到说现在的TI没有split函数了,这是真的吗,如果这样那算法是怎么进行的呢,希望TI的技术人员能够帮忙解释一下。另外PDF中有两个fftinit函数,这是怎么回事?下图左为PDF,右为程序。&/span>&/span>&/p>
&p>&span style=&font-size:&>&span>&a href=&/cfs-file.ashx/__key/communityserver-discussions-components-files/56/_YF4C_2500_TKQ5_5D00_N_7B00_TA_5D00_KXWXO_2900_JFFTR.png&>&img src=&/resized-image.ashx/__size/550x0/__key/communityserver-discussions-components-files/56/_YF4C_2500_TKQ5_5D00_N_7B00_TA_5D00_KXWXO_2900_JFFTR.png& border=&0& alt=& &>&/a>&a href=&/cfs-file.ashx/__key/communityserver-discussions-components-files/56/6266.L7YYVW_5F00_AT_2800_Y4SL_7D00_65NT9Y_6000_4.png&>&img src=&/resized-image.ashx/__size/550x0/__key/communityserver-discussions-components-files/56/6266.L7YYVW_5F00_AT_2800_Y4SL_7D00_65NT9Y_6000_4.png& border=&0& alt=& &>&/a>&/span>&/span>&/p>
&p>&span style=&font-size:&>&span>3、该例程中,从程序看,结果只得到了幅值,但是我是想得到所有的幅值、频率、相位,请问如何能得到呢?&/span>&/span>&/p>
&p>&span style=&font-size:&>&span>&a href=&/cfs-file.ashx/__key/communityserver-discussions-components-files/56/_S7Q_2800_SE9X_5B007E005F00_ZE_2400_K_6000_H_2400_3EWB.png&>&img src=&/resized-image.ashx/__size/550x0/__key/communityserver-discussions-components-files/56/_S7Q_2800_SE9X_5B007E005F00_ZE_2400_K_6000_H_2400_3EWB.png& border=&0& alt=& &>&/a>&/span>&/span>&/p>
&p>&span style=&font-size:&>&span>二、&span>SPRC081中的dspbox中rfft程序。这个程序和PDF描述基本一致(因为都是从SPRC081解压的)。但是我在学习中也遇到一些不解:&/span>&/span>&/span>&/p>
&p>&span style=&font-size:&>&span>&span>1、从工程配置来看,头文件应该包含的文件,我在相应的文件夹中没有找到相应的头文件,所以在CCS中也显示灰色。我觉得因此编译时提示有的头文件找不到,比如#include &stb.h&。请问大家遇到这样的问题没,还是我安装有问题?&/span>&/span>&/span>&/p>
&p>&span style=&font-size:&>&span>&span>&a href=&/cfs-file.ashx/__key/communityserver-discussions-components-files/56/1004.7ZDMN7_0_MR8AW_7E00_U9O6M2.png&>&img src=&/resized-image.ashx/__size/550x0/__key/communityserver-discussions-components-files/56/1004.7ZDMN7_0_MR8AW_7E00_U9O6M2.png& border=&0& alt=& &>&/a>&/span>&/span>&/span>&/p>
&p>&span style=&font-size:&>&span>&span>2、该例程中,比特倒序使用的是RFFT32_ACQ方式,程序中对该模块进行了初始化和配置,但是在程序中,还多次使用RFFT32_brev,这样是不是不正确的啊。&/span>&/span>&/span>&/p>
&p>&span style=&font-size:&>&span>&span>&a href=&/cfs-file.ashx/__key/communityserver-discussions-components-files/56/_00_38F_4000_T_2800_IC4DOMM1U.png&>&img src=&/resized-image.ashx/__size/550x0/__key/communityserver-discussions-components-files/56/_00_38F_4000_T_2800_IC4DOMM1U.png& border=&0& alt=& &>&/a>&a href=&/cfs-file.ashx/__key/communityserver-discussions-components-files/56/4670.61NBK__68_2400_Q__DE7H_2800_U6IR.png&>&img src=&/resized-image.ashx/__size/550x0/__key/communityserver-discussions-components-files/56/4670.61NBK__68_2400_Q__DE7H_2800_U6IR.png& border=&0& alt=& &>&/a>&/span>&/span>&/span>&/p>
&p>&span style=&font-size:&>&span>&span>3、我看了该例程的CMD文件,和其他的CMD文件差别很大,其中对adc_cal等都没分配地址,下面给出了cmd,这是对28335的配置吗?&/span>&/span>&/span>&/p>
&p>&span style=&font-size:&>&span>&span>&a href=&/cfs-file.ashx/__key/communityserver-discussions-components-files/56/3010.7ULQWW0_IAAQ4F_5D00_GEF.png&>&img src=&/resized-image.ashx/__size/550x0/__key/communityserver-discussions-components-files/56/3010.7ULQWW0_IAAQ4F_5D00_GEF.png& border=&0& alt=& &>&/a>&/span>&/span>&/span>&/p>
&p>&span style=&font-size:color:#ff0000;&>这是我在这么多天的实验中的一些看法和疑惑,希望对大家有一点启发,也非常希望的到大家的帮组,尽快解决问题!!!欢迎大家指正和帮组!!!&/span>&/p>&div style=&clear:&>&/div>" />
关于controlSUITE中RFFT例程的问题(28335做FFT的一些问题)。
此问题已被解答
All Replies
一直在用28335做FFT进行谐波分析。过程中遇到一些问题,放在这里与大家讨论交流,也有一些问题希望得到大家的解答,希望在相互交流中大家都能更好的解决问题。
我根据论坛的提示首先在TI官网下载了FFT库SPRC081。例程主要看了两个,1、中定点库fixpiont中的F2833X REAL FFT。2、使用SPRC081中的dspbox中rfft程序(SPRC081中有一个安装程序,安装后电脑中会有相应的FFT例程文件夹,在CCS打开)。下面分别说一下这两个例程。文档看的是SPRC081中的PDF文件fft_ml.pdf,文件名字是FFT Library。
一、中定点库fixpiont中的F2833X REAL FFT。个人觉得该例程有点问题。
1、该例程中有有加窗语句const long win[N/2]=HAMMING32; &fft.winptr=(long *)win; 但是在fft.h中只有一个窗,而且点数是32(如下图),但是主程序的分析点数N是512,个人觉得不对。请问大家怎么看待?
2、我在PDF中看到28335做RFFT时,是把2N点实数转换为N点复数进行运算,然后在进行分解,得到最终结果,所以需要split函数,但是该例程中并没有出现split函数,这和PDF描述不同。我在网上看到说现在的TI没有split函数了,这是真的吗,如果这样那算法是怎么进行的呢,希望TI的技术人员能够帮忙解释一下。另外PDF中有两个fftinit函数,这是怎么回事?下图左为PDF,右为程序。
3、该例程中,从程序看,结果只得到了幅值,但是我是想得到所有的幅值、频率、相位,请问如何能得到呢?
二、SPRC081中的dspbox中rfft程序。这个程序和PDF描述基本一致(因为都是从SPRC081解压的)。但是我在学习中也遇到一些不解:
1、从工程配置来看,头文件应该包含的文件,我在相应的文件夹中没有找到相应的头文件,所以在CCS中也显示灰色。我觉得因此编译时提示有的头文件找不到,比如#include &stb.h&。请问大家遇到这样的问题没,还是我安装有问题?
2、该例程中,比特倒序使用的是RFFT32_ACQ方式,程序中对该模块进行了初始化和配置,但是在程序中,还多次使用RFFT32_brev,这样是不是不正确的啊。
3、我看了该例程的CMD文件,和其他的CMD文件差别很大,其中对adc_cal等都没分配地址,下面给出了cmd,这是对28335的配置吗?
这是我在这么多天的实验中的一些看法和疑惑,希望对大家有一点启发,也非常希望的到大家的帮组,尽快解决问题!!!欢迎大家指正和帮组!!!
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
这里说明一下,今天看了一下SPRC081是2002年的了,已经十几年了,这么久估计TI公司对算法做了很多修改,所以和中的例程才有不少差别,之前没看中的PDF,今天刚看到,这两天抓紧看一下!!
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
您好,从网上看到你这篇文章,有几个问题想请教一下。因为不明白FFT的作用,现在想用这个函数来解决问题,但不知道如何开始,请指导一二。
我现在100V交流电压加上20%的谐波,请问我要计算谐波的话,该如何运用上面的函数。我一个周期采样点数为32个点。非常期待能得到你的回答。
若是得直接以邮箱回复,将非常感谢。yushan_
You have posted to a forum that requires a moderator to approve posts before they are publicly available.}

我要回帖

更多关于 基于dsp的fft计算 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信