您的位置:首页 > 其它

连续信号在有限区间上频谱分析实例、实验

2014-03-04 13:43 295 查看
上接:连续信号(模拟信号)在有限区间上的傅立叶级数展开,离散频谱

此文用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(~(t<-0.5 | t>0.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');
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: