zdJack0305
2008-05-05, 15:33
下面是上数据通讯的时候老师给的代码,到现在还不怎么懂:confused: 大家研究一下:
周期信号的傅里叶级数
周期信号定义: ,k为整数,T为信号的周期
傅里叶级数展开:
其中,T为周期信号的最小周期, , 为傅里叶展开系数,它的物理意义为频率分量 的幅度和相位。
例子:设周期信号的一个周期波形为 ,该周期信号的傅里叶级数展开解析式为:
采用Matalab程序画出了取2N+1项近似式的波形(N=100)
程序实例:fb_jinshi.m
代码如下:
%周期信号(方波)的展开
close all;
close all;
N=100;%取展开式的项数为2N+1项
T=1;
fs=1/T;
N_sample=128;%为了画出波形,设置每个周期的采样点数
dt=T/N_sample;
t=0:dt:10*T-dt;%画出10个周期的信号
n=-N:N;%展开式的取值范围
Fn=sinc(n/2).*exp(-j*n*pi/2);%傅里叶级数展开的解析(求Fn)
Fn(N+1)=0;%超出范围的取0
ft=zeros(1,length(t));%length()为获得序列长度,取全1序列
for m=-N:N
ft=ft+Fn(m+N+1)*exp(j*2*pi*m*fs*t);%傅里叶级数展开
end
plot(t,ft)
编写脚本文件:计算信号的频谱并与信号的真实频谱的抽样比较
程序实例:fb_spec.m(利用T2F.m函数调用)
fb_spec.m代码:
%方波的傅里叶变换
clear all;
close all;
T=1;
N_sample=128;%设置每个周期的采样点数
dt=T/N_sample;%采样点的时间
t=0:dt:T-dt;%一个周期
st=[ones(1,N_sample/2),-ones(1,N_sample/2)];%方波一个周期
subplot(211);%绘制方波时域图
plot(t,st);
axis([0 1 -2 2]);%坐标轴的取值范围
xlabel('t');ylabel('S(t)');%图标识
subplot(212);%绘制频谱图
[f,sf]=T2F(t,st);%傅里叶变换
plot(f,abs(sf));hold on;%绘制方波频谱
axis([-10 10 0 1]);%坐标轴的取值范围
xlabel('f');ylabel('/S(f)/');%图标识
sff=T^2*j*pi*f*0.5.*exp(-j*2*pi*f*T).*sinc(f*T*0.5).*sinc(f*T*0.5);
%根据傅里叶变换得到的信号频谱相应位置的抽样值
plot(f,abs(sff),'r-')
T2F.m函数代码:
function[f,sf]=T2F(t,st)
%离散傅里叶变换
dt=t(2)-t(1);%求时间间隔
T=t(end);%周期
df=1/T;%求频率
N=length(st);%求项数
f=-N/2*df:df:N/2*df-df;%频率范围取值
sf=fft(st);%傅里叶变换
sf=T/N*fftshift(sf);%离散傅里叶变换
周期信号的傅里叶级数
周期信号定义: ,k为整数,T为信号的周期
傅里叶级数展开:
其中,T为周期信号的最小周期, , 为傅里叶展开系数,它的物理意义为频率分量 的幅度和相位。
例子:设周期信号的一个周期波形为 ,该周期信号的傅里叶级数展开解析式为:
采用Matalab程序画出了取2N+1项近似式的波形(N=100)
程序实例:fb_jinshi.m
代码如下:
%周期信号(方波)的展开
close all;
close all;
N=100;%取展开式的项数为2N+1项
T=1;
fs=1/T;
N_sample=128;%为了画出波形,设置每个周期的采样点数
dt=T/N_sample;
t=0:dt:10*T-dt;%画出10个周期的信号
n=-N:N;%展开式的取值范围
Fn=sinc(n/2).*exp(-j*n*pi/2);%傅里叶级数展开的解析(求Fn)
Fn(N+1)=0;%超出范围的取0
ft=zeros(1,length(t));%length()为获得序列长度,取全1序列
for m=-N:N
ft=ft+Fn(m+N+1)*exp(j*2*pi*m*fs*t);%傅里叶级数展开
end
plot(t,ft)
编写脚本文件:计算信号的频谱并与信号的真实频谱的抽样比较
程序实例:fb_spec.m(利用T2F.m函数调用)
fb_spec.m代码:
%方波的傅里叶变换
clear all;
close all;
T=1;
N_sample=128;%设置每个周期的采样点数
dt=T/N_sample;%采样点的时间
t=0:dt:T-dt;%一个周期
st=[ones(1,N_sample/2),-ones(1,N_sample/2)];%方波一个周期
subplot(211);%绘制方波时域图
plot(t,st);
axis([0 1 -2 2]);%坐标轴的取值范围
xlabel('t');ylabel('S(t)');%图标识
subplot(212);%绘制频谱图
[f,sf]=T2F(t,st);%傅里叶变换
plot(f,abs(sf));hold on;%绘制方波频谱
axis([-10 10 0 1]);%坐标轴的取值范围
xlabel('f');ylabel('/S(f)/');%图标识
sff=T^2*j*pi*f*0.5.*exp(-j*2*pi*f*T).*sinc(f*T*0.5).*sinc(f*T*0.5);
%根据傅里叶变换得到的信号频谱相应位置的抽样值
plot(f,abs(sff),'r-')
T2F.m函数代码:
function[f,sf]=T2F(t,st)
%离散傅里叶变换
dt=t(2)-t(1);%求时间间隔
T=t(end);%周期
df=1/T;%求频率
N=length(st);%求项数
f=-N/2*df:df:N/2*df-df;%频率范围取值
sf=fft(st);%傅里叶变换
sf=T/N*fftshift(sf);%离散傅里叶变换