⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ex0806.m

📁 通信课程仿真
💻 M
字号:
%  [ex8.6] 用FFT分析周期矩形脉冲及其频谱
%  [CTFSfft.m]    这是计算周期矩形脉冲双边频谱的程序。
function [A,B,C,fn,t,x]=CTFSfft(T,M,Nf)
% 利用FFT,计算[0,T}区间上定义的时间波形的Fourier级数展开系数A,B和频谱C,fn 。
%	T		时间波形周期
%	M		用作2的幂次
%	Nf		输出谐波的阶次,决定A,B的长度为(Nf+1)。Nf不要超2^(M-1)。
%	A,B		分别是Fourier级数中cos,sin展开项的系数。A(1)是直流量。
%	C		是定义在[-fs/2,fs/2]上的频谱
%	t,x		是原时间波形数据对
T=5;
if (nargin<2 | isempty(M));M=8;end										
if nargin<3;Nf=input('plear Input 所需展开的最高谐波次数:Nf=');end	
N=2^M;     %  使总采样点是2的整数倍
f=1/T;     % 被变换函数的频率
w0=2*pi*f; 
dt=T/N;     % 时间分辨率
n=0:1:(N-1);  % 采样点序列
t=n*dt;       % 采样时间序列
x=time_fun(t,T);	    % 被变换时间函数的采样序列, 调用CTFSfft.m的子函数		
W=fft(x);     % 给出n=0,1,…..,N-1上的DFT数据值
cn=W/N;       % 据式(3.1.2)计算n=0,1,…,N-1上的FS系数
z_cn=find(abs(cn)<1.0e-10);    % 寻找有限字长运算而产生(原应为0)的"小"复数
cn(z_cn)=zeros(length(z_cn),1); % 强制那些"小"复数为0						
cn_SH=fftshift(cn);	% 据式(3.1.3)计算n=-N/2,…,-1,0,1,…..,(N/2)-1上的FS系数
C=[cn_SH cn_SH(1)];  %  形成关于0对称的(N+1)个FS系数
A(1)=C(N/2+1);
A(2:N/2+1)=2*real(C((N/2+2):end));
B(2:N/2+1)=-2*imag(C((N/2+2):end));
if Nf>N/2;error(['第三输入宗量 Nf 应小于 ' int2str(N/2-1)]);end
A(Nf+2:end)=[];
B(Nf+2:end)=[];
n1=-N/2*2*pi/T:2*pi/T:N/2*2*pi/T;   % 产生总点数为(N+1)个关于0对称的FS系数
fn=n1*f;         % 关于0对称的频率分度序列
y=time_fun_e(t)   % 调用CTFSfft.m的子函数
subplot(2,1,2),
stem(n1,abs(C));
title('周期矩形脉冲频谱')
 axis([-150,150,0,0.12])
hold off
%-------------------------
function   x=time_fun(t,T)
% 该函数是CTFSfft.m的子函数。
%	t		是时间数组
%	T		是周期
A=1;tao=1;T=5;
x=zeros(size(t));ii=find(t>=-tao /2& t<=tao/2);
x(ii)=ones(size(ii)).*A;x(t==0)=1;

%------------------------------
function y=time_fun_e(t)
% 该函数是CTFSfft.m的子函数。它由符号变量和表达式写成。
%	t		是时间数组
%	T		是周期   duty=tao/T=0.2
T=5;t=-2*T:0.01:2*T;tao=T/5;
y=rectpuls(t,1);     %产生一个宽度tao=1的矩形脉冲
subplot(2,2,2)
plot(t,y)
hold on
y=rectpuls(t-5,1);   %产生一个宽度tao=1的矩形脉,中心位置在t=5处
plot(t,y)   
hold on
y=rectpuls(t+5,1);  %产生一个宽度tao=1的矩形脉,中心位置在t=-5处
plot(t,y)
title('周期为T=5,脉宽tao=1的矩形脉冲')
axis([-10,10,0,1.2])



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -