MATLAB - 傅里叶分析及 FFT 频谱分析

本文通过两个案例详细介绍了如何使用MATLAB中的fft函数进行频谱分析。案例一展示了如何从含有噪声的信号中提取特定频率成分;案例二则进一步说明了如何绘制频谱图并进行幅值修正。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

声明

纯属个人阅读存档,内容摘自网络,侵删~

案例1

该部分摘自MATLAB下使用fft进行频域分析

clear all
clc

Fs = 1000;            % Sampling frequency HZ                   
T = 1/Fs;             % Sampling period  S     
N = 2000;             % Number of signal 
t = (0:N-1)*T;        % Time vector

%构造一个信号,其中包含幅值为 0.750 Hz 正弦量和幅值为 1120 Hz 正弦量
y1 = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);
%用均值为零、方差为 1 的白噪声叠加该信号
y2 = y1 + randn(size(t));

%波形快速傅里叶运算
Y1 = fft(y1);
Y2 = fft(y2);

%计算双侧频谱P2
P1_2 = abs(Y1/N);
%取出前面一半进行分析
P1_1 = P1_2(1:N/2+1);
%最终转化为单侧幅频
P1_1(2:end-1) = 2*P1_1(2:end-1);

%计算双侧频谱P2
P2_2 = abs(Y2/N);
%取出前面一半进行分析
P2_1 = P2_2(1:N/2+1);
%最终转化为单侧幅频
P2_1(2:end-1) = 2*P2_1(2:end-1);

%确定频域映射,转化为HZ
f = Fs*(0:(N/2))/N;

subplot(4,1,1);
plot(t,y1);
title('原始信号0.7幅值50HZ,1幅值120HZ')
subplot(4,1,2);
plot(f,P1_1);
title('原始信号FFT分析')
subplot(4,1,3);
plot(t,y2);
title('原始信号上叠加0.5的白噪声')
subplot(4,1,4);
plot(f,P2_1);
title('白噪声后FFT')

在这里插入图片描述

案例2:直接使用fft()绘制

该部分摘自Matlab的FFT绘制频谱图

% 两个频率分别为15HZ 和 20HZ 的正弦信号
Fs=50;%采样频率50Hz
f1=15;
f2=20;
t = 0:1/Fs:10-1/Fs % 0-9.98s 一共500个点
x = sin(2*pi*f1*t) + sin(2*pi*f2*t);%原始信号
N=length(x)% N=500
figure(1);
plot(t,x);
title('Original Signal');
xlabel('Time'); 
ylabel('Amplitude'); 
%直接使用fft
figure(2);
y0 = abs(fft(x)); %快速傅里叶变换的幅值
%将横坐标转化,显示为频率f= n*(fs/N)
f = (0:N-1)*Fs/N
plot(f,y0);
xlabel('Frequency'); 
ylabel('Amplitude'); 

%fftshift()调整0频位置
figure(3);
f1=(0:N-1)*Fs/N-Fs/2 ;%频率范围-25Hz-25Hz, 500个采样点
y1=abs(fftshift(fft(x)));
plot(f1,y1);
xlabel('Frequency'); 
ylabel('Amplitude'); 

% fs=50Hz,Nyquist频率为fs/2=25Hz。
% 整个频谱图是以Nyquist频率为对称轴的。
% 并且可以明显识别出信号中含有两种频率成分:15Hz和20Hz。由此可以知道FFT变换数据的对称性。
% 因此用FFT对信号做谱分析,只需考察0~Nyquist频率范围内的幅频特性。
% 幅值修正:y3=2*y2(N/2:N-1)/N


figure(4)
f3=(N/2:N-1)*Fs/N-Fs/2 ;%频率范围0Hz-25Hz
y2=abs(fftshift(fft(x)));
y3=2*y2(N/2:N-1)/N;%幅值修正得到真实幅值
plot(f3,y3);
xlabel('Frequency'); 
ylabel('Amplitude');

官方文档摘录

当数据表示为时间或空间的函数时,傅里叶变换会将数据分解为频率分量。
在这里插入图片描述
在这里插入图片描述

% 带有噪声的信号
t = 0:.001:.25;
x = sin(2*pi*50*t) + sin(2*pi*120*t);
y = x + 2*randn(size(t));

% 对信号进行fft变换
Y = fft(y,251);

% 使用复共轭 (CONJ) 计算功率谱密度,即测量不同频率下的能量。
% 为前 127 个点构造一个频率轴,并使用该轴绘制结果图形。(其余的点是对称的。)
Pyy = Y.*conj(Y)/251;
f = 1000/251*(0:127);
plot(f,Pyy(1:128))
title('Power spectral density')
xlabel('Frequency (Hz)')

在这里插入图片描述

### 回答1: 在MATLAB Simulink中,FFT(快速傅里叶变换)是一种经常被用来将频域信号转化为时域信号的方法。频域信号是信号的幅度和相位在不同频率上的分布,而时域信号是信号随时间变化的波形。 在使用MATLAB Simulink进行频域转时域时,你可以按照以下步骤进行操作: 1. 打开MATLAB Simulink并创建一个新的模型。 2. 在模型中添加输入信号源(Input Signal Source)。这可以是任何信号,如正弦波。 3. 添加FFT模块(FFT block)。该模块将输入信号从时域转换为频域。 4. 添加IFFT模块(IFFT block)。该模块将频域信号转换回时域。 5. 连接输入信号源到FFT模块的输入端口。 6. 连接FFT模块的输出端口到IFFT模块的输入端口。 7. 连接IFFT模块的输出端口到输出信号显示(Output Signal Display)模块。 8. 在模型中添加信号显示器,以便查看转换后的结果。 9. 运行模型。 运行模型后,你将能够观察到通过FFT和IFFT模块转换后的信号。可以使用信号显示器来查看时域信号的波形,并检查转换前后是否一致。 通过以上步骤,你可以实现在MATLAB Simulink中进行FFT和IFFT操作,将频域信号转换为时域的信号。 ### 回答2: MATLAB Simulink中的FFT(快速傅里叶变换)模块可以将频域信号转换为时域信号。FFT是一种数字信号处理技术,用于将信号从时域转换为频域,并且可以反向转换成时域。 在Simulink中,频域信号可以表示为复数形式的量,其中实部表示实数部分,虚部表示虚数部分。FFT模块接收频域信号作为输入,然后对信号进行傅里叶变换,并将输出转换为时域信号。 FFT模块的输入是一个复数向量,它表示频域信号的幅度和相位。幅度表示信号在不同频率上的能量分布,而相位表示信号在不同频率上的相对延迟。 通过使用FFT模块,可以将频域信号转换成时间序列信号。输出是一个复数向量,其中实部表示信号的实数部分,虚部表示信号的虚数部分。可以从输出中提取实部来获取转换后的时域信号。 在Simulink中,还可以使用其他模块来处理时域信号,例如滤波、放大、编码等。FFT模块在信号处理和分析中非常有用,可以用于频谱分析、信号恢复和频域滤波等应用。 总而言之,MATLAB Simulink中的FFT模块可以将频域信号转换为时域信号,使得信号可以在时域进行处理和分析。 ### 回答3: MATLAB Simulink中可以使用FFT函数进行频域转时域的操作。在Simulink模型中,可以使用FFT块将时域信号转换为频域信号,然后再使用Inverse FFT(IFFT)块将频域信号转换回时域信号。 首先,将需要进行频域转时域处理的信号输入到FFT块中。FFT块将信号转换为其相应的频域表示。可以设置FFT块的参数,如采样频率和窗函数,以优化频域转换的结果。频域信号的幅度和相位信息可以使用Scope或To Workspace等块进行可视化或保存。 然后,将FFT块的输出连接到IFFT块。IFFT块将频域信号转换回时域信号。与FFT块类似,可以设置IFFT块的参数,如采样频率和窗函数。IFFT块的输出即为频域转时域后得到的信号。 通过在Simulink中构建这样的模型,可以简便地实现频域转时域的操作。这可以对信号进行处理或分析,例如滤波、频谱分析等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值