FFT之频率与幅值为何要除以(N/2)

FFT之后获得的是啥?

FFT之后得到的一系列复数,是波形对应频率下的幅度特征,注意这个是幅度特征(特征值)不是幅值。

进行FFT变换,获取频率:

FFT傅里叶变换并没对频率进行任何计算,频率只与采样率和进行傅里叶变换的点数相关,注意这里是进行傅里叶变换的点数而不一定是信号的长度。

FFT变换完:
第一个数是0Hz频率,0Hz就是没有波动,没有波动有个专业一点的说法,叫直流分量。

第二个数,对应的频率是0Hz+频谱分辨率,每隔一个加一次,频谱分辨率Δf计算公式如下:
Δf=Fs/N
式中:
Fs为采样频率
N为FFT的点数
因此只要Fs和N定了,频域就定下来了。

FFT变换后的第一个实数 - 直流分量
FFT之后的第一个结果表示了时域信号中的直流成分的多少,所谓直流信号,代表和基准0的偏移量。
上面的结果不好说明,下面再看一个例子:

print(rfft([1,1,1,1,1,1,1,1]))
#输出[8.+0.j 0.-0.j 0.+0.j 0.+0.j 0.+0.j]

明明直流分量为1,但计算结果是8,重点来了,这里又引入一个问题,FFT之后的数值不是真实的幅值,需要进行转换,第一个点需要除以N,才能还原为原来的结果。

FFT变换后的复数模 - 幅度
假设原始信号的峰值为A,那么FFT的结果的每个点(除了第一个点直流分量之外)的模值就是A
的N/2倍。而第一个点就是直流分量,它的模值就是直流分量的N倍

这是因为傅里叶级数对应时域幅值,其中已经包含了1/N项,而FFT变换中没有该系数,因此,进行FFT变换后,需除以N/2才能与时域对上。

FFT的计算公式
Fn=∑i=0N−1xie−2πjNni

全球绝大部分的FFT算法,计算出来后都需要进行幅度转换,因此需要大家根据需求处理。

好的,以下是Matlab程序: ``` %定义质量矩阵和刚度矩阵 M = [10 0; 0 2]; K = [1000 -200; -200 200]; %求解特征和特征向量 [V, D] = eig(K, M); %求解自然频率和阻尼比 omega_n = sqrt(diag(D)); zeta = [0.1 0.2]; %定义时间范围和时间步长 t = 0:0.01:10; dt = t(2) - t(1); %定义激励力信号 F = zeros(size(t)); F(1:100) = 10; %定义初始位移和速度 q0 = [0; 0]; v0 = [0; 0]; %求解强迫响应 q = zeros(2, length(t)); for i = 1:length(zeta) c = 2*zeta(i)*omega_n(i); for j = 2:length(t) q(:, j) = exp(-zeta(i)*omega_n(i)*t(j))*((q0 - V(:, i)*((V(:, i)'*q0)/(V(:, i)'*M*V(:, i))))*cos(omega_n(i)*sqrt(1-zeta(i)^2)*t(j))... + (v0 + (q0 - V(:, i)*((V(:, i)'*q0)/(V(:, i)'*M*V(:, i))))*zeta(i)*omega_n(i)*V(:, i)/(V(:, i)'*M*V(:, i))... *sin(omega_n(i)*sqrt(1-zeta(i)^2)*t(j)))/sqrt(1-zeta(i)^2)... + V(:, i)*(F(j-1)/omega_n(i)/omega_n(i)/sqrt((1-zeta(i)^2)^2+(2*zeta(i)*sqrt(1-zeta(i)^2))^2)); end %绘制响应的波形图 figure(i) plot(t, q(1, :), 'r', t, q(2, :), 'b') xlabel('Time (s)') ylabel('Displacement (m)') legend('q1', 'q2') title(['Forced Response with \zeta = ' num2str(zeta(i))]) %求解傅里叶变换谱图 N = length(q(1, :)); Y = fft(q(1, :))/N*2; f = 1/dt*(0:N/2-1)/N; figure(i+2) plot(f, abs(Y(1:N/2))) xlabel('Frequency (Hz)') ylabel('Magnitude') title(['FFT of q1 with \zeta = ' num2str(zeta(i))]) end ``` 程序中,首先定义了质量矩阵M和刚度矩阵K,然后求解特征和特征向量,进而得到自然频率和阻尼比。接着定义了时间范围和时间步长,并设定了激励力信号、初始位移和速度。然后,利用强迫响应的公式求解了两个自由度系统的响应,并分别绘制了波形图和傅里叶变换谱图。最后,利用Matlabfft函数进行傅里叶变换,并注意将变换后的结果除以N/2
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值