FFT 傅里叶 推导







% 验证DFT公式:手动计算 vs MATLAB的fft clear; clc; % 1. 输入信号(随便取4个点) x = [1, 2, 3, 4]; N = length(x); % 2. 手动计算DFT(按照你给的公式) X_manual = zeros(1, N); for k = 0:N-1 % 每个频率 sum_val = 0; for n = 0:N-1 % 每个时间点 W = exp(-1j * 2*pi * n * k / N); % W_N^(nk) sum_val = sum_val + x(n+1) * W; % 累加 end X_manual(k+1) = sum_val; end % 3. 用MATLAB自带的fft X_matlab = fft(x); % 4. 对比 disp('手动计算DFT结果:'); disp(X_manual); disp('MATLAB fft结果:'); disp(X_matlab);





% 可视化:不同的k代表不同的振荡速度 clear; clc; close all; N = 16; % 16个点 n = 0:N-1; figure('Position', [100,100,1200,800]); for k = 0:4 % 看k=0,1,2,3,4 % 探针的实部(余弦部分) probe_real = cos(2*pi*k*n/N); subplot(5,1,k+1); stem(n, probe_real, 'b', 'LineWidth', 1.5); hold on; plot(n, probe_real, 'r--', 'LineWidth', 1); ylim([-1.2, 1.2]); title(sprintf('k = %d:在%d个点内完成%d个完整周期', k, N, k)); xlabel('时间序号 n'); ylabel('探针值'); grid on; end




-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------










【数字信号处理考研】基2-DIT-FFT基于时间抽取的快速傅里叶变换算法-推导及蝶形图画法_哔哩哔哩_bilibili






% 极简FFT示例:100Hz正弦波,采样率800Hz,8点FFT clear; clc; % 输入数据(和手算一样) x = [1, 0.707, 0, -0.707, -1, -0.707, 0, 0.707]; % 做FFT X = fft(x); % 频率轴 fs = 800; N = 8; f = (0:N-1) * fs/N; % 显示结果 disp('FFT输出(复数):'); disp(X); % 归一化幅度谱 mag_normalized = abs(X) * 2 / N; mag_normalized(1) = mag_normalized(1) / 2; % 直流特殊处理 disp('归一化后的真实幅度:'); disp(mag_normalized); % 绘图 figure; subplot(2,1,1); stem(f, mag_normalized, 'b', 'LineWidth', 2); xlabel('频率 (Hz)'); ylabel('幅度'); title('幅度谱(归一化后)'); grid on; subplot(2,1,2); stem(f, angle(X)*180/pi, 'r', 'LineWidth', 2); xlabel('频率 (Hz)'); ylabel('相位 (度)'); title('相位谱'); grid on;



posted on 2026-06-14 16:36 taylorrrrrrrrrr 阅读(3) 评论(0) 收藏 举报
浙公网安备 33010602011771号