cpubbs论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

LabVIEW+单片机学习套件全套教程资料下载[免费]LabVIEW论坛精华列表贴USB0816数据采集卡《LabVIEW宝典》
LabWindows/CVI论坛精华贴NET0816以太网数据采集卡RC0210远程设备授权系统 关闭关停锁定打开设备 户外分布式数据采集
NET1624低速高精度以太网数据采集卡WIFI0824SD无线WIFI网络数据采集卡脱机运行 SD存储 小尺寸微型 串口采集远程采集 安卓 手持移动采集 纪录仪
查看: 1887|回复: 4

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

[复制链接]
发表于 2008-6-12 22:32:50 | 显示全部楼层 |阅读模式
请问在频谱分析中,如何得到主频?
发表于 2008-6-13 15:32:41 | 显示全部楼层
查看频谱仪的Programming Manual ,因为每一家的指令会有差异
 楼主| 发表于 2008-6-13 18:58:08 | 显示全部楼层

回复 2# drywell 的帖子

自己编的采集和分析程序,不是用现成的频谱仪,该怎么办啊
发表于 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[i+startpoint].TorqueCommand;
                                response = loadBuf[i+startpoint].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[1];
                                //input = input -offset;
                                if(fabs(input+3)< 0.1 && first == 0 ){point1 = i; first =1;}
                        }  
                        if(point1 == 0)point1 = numberOfElementsForFFT;
 楼主| 发表于 2008-6-14 21:34:22 | 显示全部楼层

回复 4# sunshuai03 的帖子

好复杂啊..
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cpubbs论坛. ( 粤ICP备09171248号 )

GMT+8, 2025-4-22 01:35 , Processed in 0.703054 second(s), 6 queries , Gzip On, File On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表