%2017/8/22日 星期二
%工程北629
%功能:对复杂的信号进行傅里叶分解,得到频谱图。以1sin(2*pi*1*t)和0.5sin(2*pi*5*t)合成的信号为例。
%思想:傅里叶变换
%说明:振幅的大小是变化的,当N 从128,256,512,1024变化时,其振幅是逐渐增大,采样点数越多,越接近原始振幅。
clear all
clc
%输入信号
N = 256; %数据个数 数据点数为256个数据点,从下面的x中按照采样间隔0.02s 得到的。
dt = 0.02; %采样间隔 数据总的时间长度 = T = N*dt = 256*dt = 5.12秒
n = 0:N-1; %序号序列 n是0、1、2、3、4......253、254、255
t = n*dt; %时间序列 t是0.00、0.02、0.04、0.06、0.08......5.06、5.08、5.10
%信号处理
x = 1*sin(2*pi*1*t) + 0.5*sin(2*pi*5*t); %A = 1,fc = 1Hz信号 和 A = 0.5,fc = 5Hz信号的合成信号。合成信号最高频率是5Hz
%m = floor(N/2) + 1; %改变m的值可以看到不同的变化 m = N/2 + 1 = 128+1=129
m = N; %分解ab的最大序号值,为分解的N/2个参数再加参数a(0)
%m = 2*N;
%m = 3*N;
a = zeros(1,m); %系数ak,ak总个数是129个。初始化ak==0
b = zeros(1,m); %系数bk,bk总个数是129个。初始化bk==0
for k = 0:m-1 %k 是0、1、2、3......126、127、128
for ii = 0:N-1 %matlab的数组序号只能从1开始,ii是0、1、2、3......254、255
a(k+1) = a(k+1) + 2/N*x(ii+1)*cos(2*pi*k*ii/N); %ak 是离散傅里叶变换的公式
b(k+1) = b(k+1) + 2/N*x(ii+1)*sin(2*pi*k*ii/N); %bk 是离散傅里叶变换的公式
end
c(k+1) = sqrt(a(k+1).^2 + b(k+1).^2); %ck = sqrt(a_k^2+b_k^2) c(1)、c(2)......c(128)、c(129)
end
%输出信号
subplot(2,1,1),plot(t,x);title('图1--原始信号(时域)'),xlabel('时间t /s') %绘出时间域信号
subplot(2,1,2),plot((0:m-1)/(N*dt),c);title('图2--傅里叶变换(频域)'),xlabel('频率f /Hz'),ylabel('振幅') % N*dt = 5.12
%总结:数字信号处理,处理的是离散的点的数字信号
% 非周期的离散的时域信号 对应的傅里叶变换是 连续的周期的频域的幅度谱
% 两个正弦信号相加,还是正弦信号但是在这里,其实不是周期的,因为周期信号的时间是无穷的。
% 此处的原始信号千万不能当作周期来理解,应该看作有限长的非周期信号,而且还是离散的。
% 改变m的值,可以看到真正的非周期离散信号对应的是连续的周期的频域的频谱图,看到频谱的周期性。
% 画图时,横轴 == 点数序列*频率分辨率(即数据点总时间的倒数) == 点数序列/(采样点数*采样间隔) ==
% (点数序列*采样频率)/数据点数
% ak和bk 请参考:离散傅里叶变换的公式例3-1 将振幅为1的1Hz正弦波和振幅为0.5的5Hz正弦波相加后进行傅里叶变换。——傅里叶变换理解
最新推荐文章于 2026-06-10 13:38:22 发布
该博客通过MATLAB演示了对1Hz和5Hz正弦波相加后的信号进行傅里叶变换的过程,探讨了离散傅里叶变换在数字信号处理中的应用,强调了非周期离散信号在频域的连续周期特性,并展示了不同采样点数对结果的影响。
9256

被折叠的 条评论
为什么被折叠?



