嵌入式开发:傅里叶变换(3):FFT+matlab仿真

目录

1. FFT算法仿真

代码:

2. 频谱泄漏仿真

代码:

详细解释:

3. 幅频响应仿真

代码:

代码解释:

结果分析:

4. 相频响应仿真

代码:

代码解释:

结果分析:

总结


关于快速傅里叶变换的理论知识见博客:

嵌入式开发:傅里叶变换(1):理论-优快云博客

嵌入式开发:傅里叶变换(2):FFT-优快云博客

1. FFT算法仿真

我们有一个信号,它含有 2V 的直流分量,频率为 50Hz、相位为-30 度、幅度为 3V 的交流信号,以及一个频率为 75Hz、相位为 90 度、幅度为 1.5V 的交流信号。

用数学表达式就是如下:

x = 2+3*cos(2*pi*50*t-pi*30/180)+1.5*cos(2*pi*75*t+pi*90/180)

对该信号进行傅里叶变换,FFT变换,将这三个信号分离开来。

代码:
% 参数设置
Fs = 256;          % 采样频率 (Hz)
N = 256;           % 采样点数
n = 0:N-1;         % 采样点索引
t = n / Fs;        % 时间向量,时间范围从0到1秒,步长为1/Fs

% 原始信号:由多个频率成分的余弦波组成
x = 2 + 3*cos(2*pi*50*t - pi*30/180) + 1.5*cos(2*pi*75*t + pi*90/180); 

% 绘制原始信号的时域图
subplot(2,1,1);  % 创建2行1列的子图,选择第1个子图区域
plot(t, x);       % 绘制时域信号
title('Original Signal (Time Domain)'); % 设置标题
xlabel('Time (s)');  % 设置x轴标签
ylabel('Amplitude'); % 设置y轴标签

% 进行快速傅里叶变换 (FFT)
y = fft(x);        % 对原始信号进行FFT变换
M = abs(y);        % 计算FFT结果的幅度(模值)

% 绘制频域信号的幅频谱图
subplot(2,1,2);    % 创建2行1列的子图,选择第2个子图区域
plot(n, M);        % 绘制FFT幅频谱
title('FFT of the Signal (Magnitude Spectrum)'); % 设置标题
xlabel('Frequency (Hz)'); % 设置x轴标签
ylabel('Magnitude'); % 设置y轴标签

详细解释:

  1. 信号参数设置:

    • Fs = 256; 设定采样频率为256 Hz,即每秒采样256次。
    • N = 256; 信号的采样点数为256。
    • n = 0:N-1; 生成一个从0到255的整数序列,表示采样点的索引。
    • t = n / Fs; 生成时间向量 t,它的长度为 N,且时间间隔为 1/Fs。这个向量表示信号的采样时刻。
  2. 创建信号:

    • x 是原始信号,它是由多个频率成分的余弦波组成的。
    • 信号的组成:
      • 2 是常数偏置(直流分量)。
      • 3*cos(2*pi*50*t - pi*30/180) 是一个幅值为3,频率为50 Hz,初相位为 -30° 的余弦波。
      • 1.5*cos(2*pi*75*t + pi*90/180) 是一个幅值为1.5,频率为75 Hz,初相位为 +90° 的余弦波。
  3. FFT变换:

    • Y = fft(signal); 对信号进行FFT变换,得到频域表示 Yfft 函数计算离散傅里叶变换(DFT),其结果是复数。
  4. 频谱计算:

    • y = fft(x):对原始信号 x 执行快速傅里叶变换(FFT),得到频域信号 y。FFT计算的结果是复数,因此包含了幅度和相位信息。
    • M = abs(y):计算FFT结果的幅度,即信号在频域的强度,abs(y) 取复数的模值。
  5. 时域与频域绘图:

    • subplot(2,1,1):创建一个2行1列的子图布局,选择第1个子图来绘制时域信号。
    • plot(t, x):绘制时域信号,x轴是时间 t,y轴是信号幅度 x
    • subplot(2,1,2):选择第2个子图区域,用于绘制频域信号的幅频谱。
    • plot(n, M):绘制频域信号的幅频谱图,x轴是采样点 n,y轴是信号的幅度 M。在频域图中,你可以看到信号在不同频率成分上的强度。

仿真结果:

如下为Matlab中的仿真结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魂兮-龙游

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值