关于FFT 采样率,采样点数的疑问
论坛上朋友post出来关于FFT的解释:一个模拟信号,经过ADC采样之后,就变成了数字信号。采样定理告诉我们,采样频率要大于信号频率的两倍,
假设采样频率为Fs,信号频率F,采样点数为N。那么FFT之后结果就是一个为N点的复数。每一个点就对应着一个频率点。这个点的模值,就是该频率值下的 幅度特性。具体跟原始信号的幅度有什么关系呢?假设原始信号的峰值为A,那么FFT的结果的每个点(除了第一个点直流分量之外)的模值就是A的N/2倍。 而第一个点就是直流分量,它的模值就是直流分量的N倍。而每个点的相位呢,就是在该频率下的信号的相位。第一个点表示直流分量(即0Hz),而最后一个点 N的再下一个点(实际上这个点是不存在的,这里是假设的第N+1个点,可以看做是将第一个点分做两半分,另一半移到最后)则表示采样频率Fs,这中间被 N-1个点平均分成N等份,每个点的频率依次增加。例如某点n所表示的频率为: 。由上面的公式可以看出,Fn所能分辨到频率为 Fs/N,如果采样频率Fs为1024Hz,采样点数为1024点,则可以分辨到1Hz。1024Hz的采样率采样1024点,刚好是1秒,也就是说,采样1秒时间的信号并做FFT,则结果可以分析到1Hz,如果采样2秒时间的信号并做FFT,则结果可以分析到0.5Hz。如果要提高频率分辨力,则必须增加采样点数,也即采样时间。频率分辨率和采样时间是倒数关系。假设FFT之后某点n用复数a+bi表示,那么这个复数的模就是 ,相位就是 。根据以上的结果,就可以计算出n点(n≠1,且n<=N/2)对应的信号的表达式为: ,即 。对于n=1点的信号,是直流分量,幅度即为A1/N。由于FFT结果的对称性,通常我们只使用前半部分的结果,即小于采样频率一半的结果。
请教各位朋友,如果待FFT的信号频率是1000HZ,按采样频率是信号频率的2倍,也就是采样率最少2000HZ?
如果要求采样点数1024,如果按2000HZ的采样率,分辨率为2HZ? 如果要求1HZ的分辨率,只能增加点数至2048?
如果信号频率比较低如1000HZ,(如果保持点数不变的情况下)对应采样率 几十K或几百K是否也没有多少意义?
采样频率是采样频率,采样深度决定了FFT的频率成分的组成,采样少了,频率就少,书上这么说的,不知道对不对。。。。 1. 对,2. 对,3. 对,4. 没意义,还可能造成分辨率不够。 fft干啥啊,直接测频率不好吗。当然了fft有很多用途,但是测频率用实在是不推荐,绝大多数真正的频谱仪都不保证那个骂克点功率频率读数的准确性 串个问题,如果FFT模值算出来了,如果算相位角呢? ibmx311 发表于 2023-8-7 13:46
fft干啥啊,直接测频率不好吗。当然了fft有很多用途,但是测频率用实在是不推荐,绝大多数真正的频谱仪都不 ...
(引用自4楼)
如果信号不是纯正干净的,带有谐波的话,怎么去测试频率,这个时候FFT就有用了。 lgg88 发表于 2023-8-7 14:31
如果信号不是纯正干净的,带有谐波的话,怎么去测试频率,这个时候FFT就有用了。 ...
(引用自6楼)
过一下低通不就可以了。 如果待FFT的信号频率是1000HZ,按采样频率是信号频率的2倍,也就是采样率最少2000HZ?---应该是大于2000
如果要求采样点数1024,如果按2000HZ的采样率,分辨率为2HZ?---如果采样率是2048的话,是2hz
如果要求1HZ的分辨率,只能增加点数至2048?可以增加点数,也可以把采样率降到1000hz,
如果信号频率比较低如1000HZ,(如果保持点数不变的情况下)对应采样率 几十K或几百K是否也没有多少意义?是,如果预先知道信号频率大概范围,3-4倍采样率就行,如果精确知道信号频率,按照信号频率的整倍数采样,频谱泄露最小。如果不知道信号大致频率,可以以最高频率预先采集一次,做个fft,然后找到最高频率,再调整adc频率,精确采集。21年全国电赛,我带的学生就用这个办法把精度提高了一个数量级。
z31com 发表于 2023-8-7 14:09
串个问题,如果FFT模值算出来了,如果算相位角呢?
(引用自5楼)
你可以这么理解,信号是个矢量,有频率和相位两个参数,我做想把他们都求出来不好弄,那我认为这带相位的信号是由一个相位是零的正弦和一个相位是零的余弦拼成的(正交合成),我分别求每个频点下余弦的幅度和正弦的幅度,然后,信号的模长就是余弦的幅度和正弦的幅度平方和的根,相位就是这两个信号的比值求反正切。
所以fft的结果是个复数,实部对应的是信号的余弦部分,虚部对应的信号的虚部,虚部比实部是角度的tan,然后求个arctan就行了。 ibmx311 发表于 2023-8-7 13:46
fft干啥啊,直接测频率不好吗。当然了fft有很多用途,但是测频率用实在是不推荐,绝大多数真正的频谱仪都不 ...
(引用自4楼)
我没学明白之前也是这么觉得的,现在觉得很多很麻烦的问题都可以用fft,fir,iir,ifft这些方法解决,比时域方便的多。
ibmx311 发表于 2023-8-7 17:54
过一下低通不就可以了。
(引用自7楼)
低筒的频率多少,如果带个低频噪声咋办? 下一页 发表于 2023-8-7 20:16
你可以这么理解,信号是个矢量,有频率和相位两个参数,我做想把他们都求出来不好弄,那我认为这带相位的 ...
(引用自9楼)
感谢回答,有没有相关的代码可以参考。谢谢 假如采样频率是2k,信号频率超过1k,其实任然可以分辨的。只要信号带宽不超过1k。
你想达到什么效果。我可以告诉你怎么操作。 本帖最后由 下一页 于 2023-8-9 11:41 编辑
z31com 发表于 2023-8-9 09:05
感谢回答,有没有相关的代码可以参考。谢谢
(引用自12楼)
相位角=arctan(虚部/实部)
幅度=√(实部²+虚部²) 谢谢大家的回复,再追个问题,有看到FFT讲可以选择平均次数,这个意思是将采集到的原始数据先平均后再送FFT么?打个比方采集10轮波形,如何这10轮波形重合上?每次采样的起始点不一样将会导致每轮的数据会有错位,这样平均下来反而不准确了。 ajfan 发表于 2023-8-9 12:00
谢谢大家的回复,再追个问题,有看到FFT讲可以选择平均次数,这个意思是将采集到的原始数据先平均后再送FFT ...
(引用自15楼)
可以求完幅度后,再对幅度求平均。 下一页 发表于 2023-8-9 11:38
相位角=arctan(虚部/实部)
幅度=√(实部²+虚部²)
(引用自14楼)
感谢回复
如输入是50HZ,只要求FFT后,50HZ这个点上的数是吧。(max_num是50HZ的点)
我求出来的数据不对。
lX= (lBufOutArray << 16) >> 16; //高十六位代表虚部
lY= (lBufOutArray >> 16); //低十六位代表实部
X = NPT * ((float)lX) / 32768;
Y = NPT * ((float)lY) / 32768;
弧度 =atan(X/Y);
页:
[1]