深入浅出解释FFT(四)

您所在的位置:网站首页 相位特性怎么求 深入浅出解释FFT(四)

深入浅出解释FFT(四)

2024-02-05 03:27| 来源: 网络整理| 查看: 265

很基础的问题往往很重要,做仿真时候有一个点的差错都会导致结果的错误。在网上找了前人写的东东,总结下希望对大家有帮助,让大家少走一些弯路。

1.  信号的时域采样点N和频域采样点数相同

%##################################################################

clear all; close all; Adc =1.25;                  %直流分量幅度 A1 =1;                      %频率F1信号的幅度 A2 =0.25;                    %频率F2信号的幅度 F1 =100;                   %信号1频率(Hz) F2 =1000;                   %信号2频率(Hz) Fs =5120;                  %采样频率(Hz)

Ts =1/Fs;                     %时域采样间隔,采样周期 P1 =-30;                   %信号1相位(度) P2 =90;                    %信号2相位(度) N =256;                     %采样点数,请注意时域采样N点,FFT时也是N点! t = [0 : 1/Fs : N/Fs];        %采样时刻,注意不是序列是真正的时间!t = [0:N]*Ts

% t = [0 : N]//Fs;  %共采样257个点,为了好看起见多采样了最后一个点,最后一个点在实际中应该是下一个采样周期的第一个点

%生成信号 %S=Adc+A1*cos(2*pi*F1*t+pi*P1/180)+A2*cos(2*pi*F2*t+pi*P2/180); %考虑相位 signal1=A1*sin(2*pi*F1*t); % 周期T1 = 2*pi/(2*pi*F1) = 0.01s,采样周期Ts = 0.00019531 < (T1)/2

signal2=A2*sin(2*pi*F2*t); % 周期T2 = 2*pi/(2*pi*F2) = 0.001s,采样周期Ts = 0.00019531 < (T2)/2 S=A1*sin(2*pi*F1*t)+A2*sin(2*pi*F2*t);                      %无直流偏置 S=Adc+A1*sin(2*pi*F1*t)+A2*sin(2*pi*F2*t);                  %直流偏置 %S=Adc+[A1*sin(2*pi*F1*t)+A2*sin(2*pi*F2*t)]/2;

S=Adc+A1*cos(2*pi*F1*t+pi*P1/180)+A2*cos(2*pi*F2*t+pi*P2/180);%考虑相位 %显示原始信号 plot(S); title('原始信号');

figure; Y = fft(S,N);           %做FFT变换 Ayy = (abs(Y));          %取模 plot(Ayy(1:N));          %显示原始的FFT模值结果 title('FFT 模值');

F = ([1:N] - 1) * Fs /N;              %换算成实际的频率值, N*Fs/2 对应着w = pi % 因为MATLAB中FFT的变换矩阵不是一个酉矩阵(Unitary Matrix),该阵除以1/sqrt(N)就是个酉矩阵。故经过变换后对信号有放大作用,

% 所以要在fft处理后结果除以N/2来,修正此“放大”作用。但是结果在直流的那一点是错误的,实际上直流应该除以N修正。

Ytemp = 2/N * fft(S,N); % 做FFT变换后除以N/2修正

figure; plot(F, abs(Ytemp));title('实际幅度-频率曲线图 --- abs前修正');

figure; Ayy = Ayy / (N /2);                   %换算成实际的幅度 Ayy(1) = Ayy(1) /2;                   %能看出来为什么直流信号除以N了吗?我开始没看出来啊

%假设采样频率为Fs,采样点数为N,做FFT之后,某一点n(n从1开始)表示的频率为:Fn=(n-1)*Fs/N;该点的模值除以N/2就是对应

%该频率下的信号的幅度(对于直流信号是除以N)

 

 

根据公式验证 --- 某点n所表示的频率为: Fn=(n-1)*Fs/N,因为没有fftshift

                                    f1=(6-1)*5120/256=100 (Hz) ---- 验证结果正确

                                    f2=(51-1)*5120/256=1000(Hz)---- 验证结果正确

 根据公式验证 --- 对于n=1点的信号,是直流分量,幅度即为A1/N   --- A1=320/256=1.25 --- 验证结果正确

                对于n点(n≠1,且n



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3