频率计算

afu00 2003-10-20 11:23:46
如果采集到一组波形的各个描波数值点,放到Data[]数组里面
怎样通过采集到的数据计算出采集到数据有几种频率?
...全文
95 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
dcyu 2003-10-23
  • 打赏
  • 举报
回复
如果是纯随机的信号,那有无穷多个频率,知道吧.
不是说几个频率那么简单.
dcyu 2003-10-23
  • 打赏
  • 举报
回复
不是各个频率值为多少,老大.
既然你不懂原理,说了也没用.
回去好好翻一下信号与系统的书,这样你才能明白什么是频谱.
afu00 2003-10-23
  • 打赏
  • 举报
回复
你提供的算法很复杂,数字信号处理方面我不熟悉,
我现在是提供一个随机信号,信号存在一个data[1000]
数组里,请问如果应用void four1(data,nn,isign)函数
来计算出我采集到的那一段data[1000]信号有几个不同的
频率,各个频率值为多少?

前提知道:随机信号一般的频率为4Hz-34Hz
afu00 2003-10-23
  • 打赏
  • 举报
回复
我只是采集一小部分数据啊,那有无穷多个频率啊?
我确实不懂原理,但急用到,你能告示我相关吗?
过后我一定会认真去看书的。
afu00 2003-10-22
  • 打赏
  • 举报
回复
不是一个时域波形,如脑波
dcyu 2003-10-22
  • 打赏
  • 举报
回复
那你的意思是空间的电磁波,而不是时间上的强度变化,很多时候空间上和时间上的波形是差不多一致的,不同只是相位的差异。不过不管怎么说要求一个波形的频率分布,都是用傅立叶变换求得的,用计算机来求的话,就是fft算法。这里有一份代码,你可以看一下。

#include <math.h>

#define SWAP(a,b) tempr=(a);(a)=(b);(b)=tempr

void four1(data,nn,isign)
float data[];
int nn,isign;
{
int n,mmax,m,j,istep,i;
double wtemp,wr,wpr,wpi,wi,theta;
float tempr,tempi;

n=nn << 1;
j=1;
for (i=1;i<n;i+=2) {
if (j > i) {
SWAP(data[j],data[i]);
SWAP(data[j+1],data[i+1]);
}
m=n >> 1;
while (m >= 2 && j > m) {
j -= m;
m >>= 1;
}
j += m;
}
mmax=2;
while (n > mmax) {
istep=2*mmax;
theta=6.28318530717959/(isign*mmax);
wtemp=sin(0.5*theta);
wpr = -2.0*wtemp*wtemp;
wpi=sin(theta);
wr=1.0;
wi=0.0;
for (m=1;m<mmax;m+=2) {
for (i=m;i<=n;i+=istep) {
j=i+mmax;
tempr=wr*data[j]-wi*data[j+1];
tempi=wr*data[j+1]+wi*data[j];
data[j]=data[i]-tempr;
data[j+1]=data[i+1]-tempi;
data[i] += tempr;
data[i+1] += tempi;
}
wr=(wtemp=wr)*wpr-wi*wpi+wr;
wi=wi*wpr+wtemp*wpi+wi;
}
mmax=istep;
}
}

#undef SWAP
gambolgs 2003-10-20
  • 打赏
  • 举报
回复
fft
dcyu 2003-10-20
  • 打赏
  • 举报
回复
你问的就不对,一个时域波形对应的它的频域,频域本身就是一个波形,哪是问有几种频率?

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧