N=200; %采用的数据点数
dt=4/N; %采样的间隔
for n=1:N %生成一个方波
if (n*dt>=2)
x(n)=0.8;
else
x(n)=-0.8;
end
end
figure
subplot(2,1,1)
plot((1:N)*dt,x)
hold on
plot((1:N)*dt,zeros(1,N),'k');
xlabel('时间/s')
ylabel('方波信号');
title('原始信号');
%下面开始计算傅里叶变换系数
a=zeros(1,N);
b=a;
c=b;
nn=floor(N/2)+1;
for k=0:nn-1
a(k+1)=0;
b(k+1)=0;
for ii=0:N-1
a(k+1)=a(k+1)+2/N*x(ii+1)*cos(2*pi*k*ii/N); %求解Fourier系数
b(k+1)=b(k+1)+2/N*x(ii+1)*sin(2*pi*k*ii/N);
end
c(k+1)=sqrt(a(k+1).^2+b(k+1).^2);
end
subplot(2,1,2)
freq=(0:nn-1)/(N*dt);
plot(freq,c(1:length(freq)));
title('Fourier变换');
xlabel('频率/Hz')
ylabel('振幅');
%下面通过逆变换重现信号
m=input('输入谐波的最大阶数:');
if(m>(floor(N/2)+1))
error('谐波最大阶数必须小于Nyquist频率对应的阶数.');
end
if(mod(N,2)~=1)
a(nn)=a(nn)/2;
end
%合成信号
for ii=0:N-1
xx(ii+1)=a(1)/2;
for k=1:m
xx(ii+1)=xx(ii+1)+a(k+1)*cos(2*pi*k*ii/N)+b(k+1)*sin(2*pi*k*ii/N);
end
end
% figure
plot((1:N)*dt,xx,(0:N-1)*dt,x);
hold on
plot((1:N)*dt,zeros(1,N),'k');
xlabel('时间/s')
ylabel('信号');
title('合成信号');
通过不断提高最大谐波的阶数,经过Fourier逆变换来重新原来的方波信号会越来越接近真实。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)