连续信号在有限区间上频谱分析实例、实验
扫描二维码
随时随地手机看文章
上接:连续信号(模拟信号)在有限区间上的傅立叶级数展开,离散频谱
此文用matlab作下实验。
实验一:由简谐波叠加起来的信号在有限区间上的傅立叶级数展开,离散频谱。
实验信号为:
我们取不同的时间区间(自变量t变化区间)对这个信号做频谱分析。
1.1、 当t变化为[2.5, 3.5]时
这里只是限定区间的长度为1,至于区间端点的取值,是我随意取得,没有限制。画图得到的图像:
图 1. [2.5, 3.5]上的信号
由 上篇 中公式(17)来求解信号x(t)在有限区间[2.5, 3.5]上的离散频谱c_n,积分采用matlab提供的数值积分函数quad()。
如图2,作出的是离散频谱n=-50,...,50的离散振幅谱|c_n|。图3事离散相位谱Arg(c_n),
图 2,x(t)在[2.5, 3.5]上的离散振幅谱
图 3, x(t)在[2.5, 3.5]上的离散相位谱
1.2、当t变化为[2.5, 3.6]时
此时,区间长度为1.1,图4、5、6分别给出了使用1.1节中相同程序作出的原信号图,离散振幅谱,离散相位谱。
图 4、区间[2.5, 3.6]上的信号
图 5、x(t)在[2.5,3.6]上的离散振幅谱
图 6、x(t)在[2.5, 3.6]上的离散相位谱
对比图2和5可以看到,在图2中,只有频率为1/T, 和2/T的两个简谐波的振幅不为零,频率相同的振幅的和就是原先信号解析式中相应的振幅值。而图5中并不事这样的,频率较小的简谐波的振幅越大,随着频率的增大,振幅逐渐变小。
实验中,我们可以看出来,实际上同一个信号在选取不同的时间长度后会得到不同的离散频谱!区间长度决定信号的离散频谱!
实验二:有限区间上方波信号的傅立叶级数展开,离散频谱。
实验一中用的是正弦信号的叠加,现在我们使用一般的方波信号,求解他的频谱。方波信号的解析形式为:
我们取T=2。将实验一中的程序中修改区间参数,以及信号函数后,运行结果:
图 7, 原信号
图 8, 信号振幅谱
图 9, 信号相位谱
附程序:
1.1的程序
函数文件:
function y = fun0001(t) y = 2.5*sin(2*pi*t + pi/3) + 3.1*sin(6*pi*t + pi/4); end
执行文件:
clear clc t_s = 2.5; % start of the interval T = 1.0; % length of the interval t_e = t_s + T; % the end of the interval num_samples = 1000; % number of samples t = linspace(t_s, t_e, num_samples); x = fun0001(t); figure; plot(t, x, 'LineWidth',2 ); title('signal'); f_0 = 1/T; % foundamental frequency. N = 50; % how many frequency we want to caculate. fn = f_0*(1:N); cn = zeros(N*2+1,1)*1i + zeros(N*2+1,1); for k = 1:N Fun = @(t)(fun0001(t).*exp(-2*pi*fn(k)*t*1i)); cn(N+1+k) = quad(Fun, t_s, t_e); Fun = @(t)(fun0001(t).*exp(2*pi*fn(k)*t*1i)); cn(N+1-k) = quad(Fun, t_s, t_e); end cn(N+1) = quad(@fun0001, t_s, t_e); figure; stem(-N:N, abs (cn)); title('amplitude'); figure; stem(-N:N, angle(cn)); title('angle');
1.2的程序
函数文件与1.1相同,只需要将执行文件的T的值改成1.1.
实验二的程序
函数文件
function y = fun0002(t) y = double(~(t0.5)); end
执行文件
clear clc t_s = -1.0; % start of the interval T = 2.0; % length of the interval t_e = t_s + T; % the end of the interval num_samples = 1000; % number of samples t = linspace(t_s, t_e, num_samples); x = fun0002(t); figure; plot(t, x, 'LineWidth',2 ); title('signal'); f_0 = 1/T; % foundamental frequency. N = 50; % how many frequency we want to caculate. fn = f_0*(1:N); cn = zeros(N*2+1,1)*1i + zeros(N*2+1,1); for k = 1:N Fun = @(t)(fun0002(t).*exp(-2*pi*fn(k)*t*1i)); cn(N+1+k) = quad(Fun, t_s, t_e); Fun = @(t)(fun0002(t).*exp(2*pi*fn(k)*t*1i)); cn(N+1-k) = quad(Fun, t_s, t_e); end cn(N+1) = quad(@fun0002, t_s, t_e); figure; stem(-N:N, abs (cn)); title('amplitude'); figure; stem(-N:N, angle(cn)); title('angle');