FFT MATLAB代码正确



我想生成七个级联余弦函数的频谱。

我不确定我的代码是否正确;特别地,N=time*freq*7是否正确,或者它是否应该是N=time*freq(没有时间7)。

我的代码如下:

sn = [1, 2, 3, 4, 5, 6, 7, 8];
time = 1;
freq = 22050;
N = time*freq*7;
dt = 1/freq;
t = 0 : dt : time - dt;
y = @(sn, phasePosNeg) cos(2*pi*(1200-100*sn) * t + phasePosNeg * sn*pi/10);
f = [y(sn(1), 1), y(sn(2), -1), y(sn(3), 1), y(sn(4), -1), y(sn(5), 1), y(sn(6), -1), y(sn(7), 1)];
F = abs(fftshift(fft(f)))/N;
df = freq/N;
faxis = -freq/2 : df : (freq/2-1/freq);
plot(faxis, F);
grid on;
axis([-1500, 1500, 0, 0.6]);
title('Frequency Spectrum Of Concatenated Cosine Functions');
xlabel('Frequency (Hz)');
ylabel('Magnitude');

我想我的问题的实质是:尖刺的高度应该等于0.5的1/7,还是简单地等于0.5?(所有余弦函数的振幅均为1。)

谢谢。

让我纠正/帮助您做一些事情:

1) 傅立叶变换的分量通常以dB为单位显示。20*log-base10(FFT系数)2) 不需要将FFT幅度除以任何N.值

F = abs(fftshift(fft(f)))/N; %get rid of the N or N =1

3) 如果N是FFT中的点数N=大小(t);因为你已经取了很多sin/cos函数的样本

4) 绘制函数时,请记住FFT的范围从-Pi到+Pi,您需要使用采样频率将其重新映射到频谱

5) 由于这些函数之间存在较大的相位不连续性,所以不要期望forrier变换是一堆大的窄峰。(否则,相位调制将是选择的调制方案…零带宽)

这显然是家庭作业,所以我只想给出一些方向:
在级联的情况下,把它想象成你在添加六个波形,每个波形都用零(波形长度的6倍)填充,然后偏移这些波形,使它们不重叠,然后加在一起形成级联波形。在添加单个波形的FFT的情况下,还要记住,您假设它们是周期性的。所以你基本上需要处理零填充,这样你就可以比较苹果和苹果了。当然,一种检查是在整个过程中只使用一个波形,并确保它在这种情况下工作(这应该会返回完全相同的结果,因为FFT假设波形是周期性的,也就是说,无限连接到它自己)。

从帕西瓦尔定理的角度思考这一点可能有助于弄清楚如何解释和规范事物。

使用N=(7*time)*freq是正确的,因为无论您如何构建波形,波形的实际时间都是7*time

一些评论谈到了不连续性,但应该注意的是,这些不连续性通常存在于FFT中,因为FFT波形被假设为周期性的,这通常意味着即使在非级联的情况下,边界处也存在有效的不连续性。

最新更新