justin566 发表于 2008-6-12 22:32:50

请问在频谱分析中,如何得到主频?

请问在频谱分析中,如何得到主频?

drywell 发表于 2008-6-13 15:32:41

查看频谱仪的Programming Manual ,因为每一家的指令会有差异

justin566 发表于 2008-6-13 18:58:08

回复 2# drywell 的帖子

自己编的采集和分析程序,不是用现成的频谱仪,该怎么办啊

sunshuai03 发表于 2008-6-14 17:22:23

对信号进行时频转换,得到频域信号之后强度最大的就是主频,就是频域中的最大值,你需要得到这个最大值对应的频率,下面一段程序是我以前写的,有点乱,我也没有时间写说明了,呵呵,自己试试看吧,用点功夫,你会收获很多的。
        tbl = CreateFFTTable(numberOfElementsForFFT);//Create N-point table
                       
                        input = (double *)malloc(sizeof(double)*numberOfElementsForFFT);
                        response = (double *)malloc(sizeof(double)*numberOfElementsForFFT);
                        temparray1 = (double *)malloc(sizeof(double)*numberOfElementsForFFT);
                        temparray2 = (double *)malloc(sizeof(double)*numberOfElementsForFFT);
                        fitarray =   (double *)malloc(sizeof(double)*numberOfElementsForFFT);      
                        frequents =(double *)malloc(sizeof(double)*numberOfElementsForFFT);   
                        fftresult1 = (NIComplexNumber*)malloc(sizeof(NIComplexNumber) * numberOfElementsForFFT);
                        fftresult2 = (NIComplexNumber*)malloc(sizeof(NIComplexNumber) * numberOfElementsForFFT);
                       
                        for(i = 0;i< numberOfElementsForFFT;i++)
                        {
                                input = loadBuf.TorqueCommand;
                                response = loadBuf.TorqueSample;
                                temparray1 = 0;
                                temparray2 = 0;
                                frequents = i * samplerate / numberOfElementsForFFT;
                        }
                        //HamWin(input, numberOfElementsForFFT);
                        //HamWin(response,numberOfElementsForFFT);
                        FFTEx(input,numberOfElementsForFFT,numberOfElementsForFFT,tbl,0, fftresult1);
                        FFTEx(response,numberOfElementsForFFT,numberOfElementsForFFT,tbl,0, fftresult2);

                       
                        for( i =0 ;i< numberOfElementsForFFT;i++)
                        {
                                //借用前面已经申请内存的连个数组
                                temparray1 = sqrt(pow(fftresult1.real,2)+pow(fftresult1.imaginary,2));       
                                temparray2 = sqrt(pow(fftresult2.real,2)+pow(fftresult2.imaginary,2));
                                input = 20 * log10(temparray2 / temparray1) ;
                                //if(i == 1)offset = input;
                                //input = input -offset;
                                if(fabs(input+3)< 0.1 && first == 0 ){point1 = i; first =1;}
                        }
                        if(point1 == 0)point1 = numberOfElementsForFFT;

justin566 发表于 2008-6-14 21:34:22

回复 4# sunshuai03 的帖子

好复杂啊..
页: [1]
查看完整版本: 请问在频谱分析中,如何得到主频?