Matlab方波傅里叶变换学习记录
f = 1/(200e-9); %方波信号的频率,5Mhz,200ns
L = 512; % 每个周期采样的点数
Fs = L*f; % Sampling frequency ,采样率=信号频率*每个周期的采样数
T = 1/Fs; % Sampling period 两次采样的时间间隔
t = (0:L-1)*T; % Time vector 通过采样时间间隔和采样的点数生成时间矩阵。这里选取一个周期的方波信号:512个点=1个方波周期,时间从0开始所以最后减去一个点。
x = square(t*f*2*pi); %square可以方便的生成方波信号,生成方式和正弦信号一样,角速度*时间,官方说明文档有很多实例。
plot(t,x); %画出方波信号幅值随时间的变化图
%n = 2^nextpow2(L); %在有些文档里对进行快速傅里叶变化的点数进行补零。(可能可以加快运算,测试了1024和1000点精度上没有区别)
Y = fft(x); %快速傅里叶变换
P2 = abs(Y/L); %双边频谱,Matlab做快速傅里叶变换后会保留负频部分需要后处理。这里取绝对值和除上数据长度,是为了还原纵坐标和功率的对应关系。(具体原有可能和傅里叶快速变换的数学推导有关)
P1 = P2(1:L/2+1); %截取频谱一半加一个点(方法参考的官方文档加一个点可能是由于直流部分和最高频只有一个?)
P1(2:end-1) = 2*P1(2:end-1); %单边频谱,除头尾乘2。根据上面猜想对有正负频两部分的进行合并,还原正确的频间功率关系
f_fft = Fs*(0:(L/2))/L; %给这截取一半的频谱图对应正确的横坐标,频率。257个点有256个间隔。
plot(f_fft,P1) %画出频谱图

