Matlab 傅里叶变换三角脉冲

Matlab 傅里叶变换三角脉冲,matlab,telecommunication,pulse,Matlab,Telecommunication,Pulse,我有一个用matlab进行通信的基本练习,我必须在for循环中为M个脉冲绘制一个带(-c,0)到(c,0)的三角形脉冲,c=6,振幅=1,并使用N个傅里叶级数项逼近周期脉冲。到目前为止,我在互联网上找不到对我有帮助的东西 我制作并使用的rect pulse类似代码如下: a = 1; b = 3; N = 1000; t = linspace(a-2*a,b+2*b,N); A = 1; y = rect_pulse(A,a,b,t); plot(t,y); grid on axis([a-

我有一个用matlab进行通信的基本练习,我必须在for循环中为M个脉冲绘制一个带(-c,0)到(c,0)的三角形脉冲,c=6,振幅=1,并使用N个傅里叶级数项逼近周期脉冲。到目前为止,我在互联网上找不到对我有帮助的东西

我制作并使用的rect pulse类似代码如下:

a = 1;
b = 3;

N = 1000;
t = linspace(a-2*a,b+2*b,N);
A = 1;
y = rect_pulse(A,a,b,t);

plot(t,y);
grid on
axis([a-2*a b+2*b 0 2*A]);

M = 5;
T=7;

t_new = linspace(a-2*a,b+(M-1)*T+2*b,N);
y_new = zeros(1,N);

for index = 1:1:M
    temp_y = rect_pulse(A,a+(index-1)*T,b+(index-1)*T,t_new);
    y_new = y_new + temp_y;
end

figure;
plot(t_new,y_new);
grid on;
axis([a-2*a b+(M-1)*T+2*b 0 2*A]);
function y = rect_pulse (A,a,b,t)
N=length(t);
y = zeros(1,N);

for index = 1:1:N
    if(t(1,index)>=a) && (t(1,index)<=b)
        y(1,index) = A;
    end
end
function y_fourier = fourier_series_rect_pulse(a,b,To,N,t)

y_fourier = 0;
wo = (2*pi)/To;

for n = -N:1:N
    f_real = @(x) cos(n*wo*x);
    f_imag = @(x) sin(n*wo*x);
    cn = (1/To)*(quad(f_real,a,b)) - j*quad(f_imag,a,b));
    y_fourier = y_fourier + cn*exp(j*n*wo*t);
end

y_fourier = real(y_fourier);
这是什么地方:

a = 1;
b = 3;

N = 1000;
t = linspace(a-2*a,b+2*b,N);
A = 1;
y = rect_pulse(A,a,b,t);

plot(t,y);
grid on
axis([a-2*a b+2*b 0 2*A]);

M = 5;
T=7;

t_new = linspace(a-2*a,b+(M-1)*T+2*b,N);
y_new = zeros(1,N);

for index = 1:1:M
    temp_y = rect_pulse(A,a+(index-1)*T,b+(index-1)*T,t_new);
    y_new = y_new + temp_y;
end

figure;
plot(t_new,y_new);
grid on;
axis([a-2*a b+(M-1)*T+2*b 0 2*A]);
function y = rect_pulse (A,a,b,t)
N=length(t);
y = zeros(1,N);

for index = 1:1:N
    if(t(1,index)>=a) && (t(1,index)<=b)
        y(1,index) = A;
    end
end
function y_fourier = fourier_series_rect_pulse(a,b,To,N,t)

y_fourier = 0;
wo = (2*pi)/To;

for n = -N:1:N
    f_real = @(x) cos(n*wo*x);
    f_imag = @(x) sin(n*wo*x);
    cn = (1/To)*(quad(f_real,a,b)) - j*quad(f_imag,a,b));
    y_fourier = y_fourier + cn*exp(j*n*wo*t);
end

y_fourier = real(y_fourier);

有什么办法可以把它变成三角脉冲吗?

这可能与你的方法有很大的不同,但如果你好奇的话,这里有一个脚本,我想生成一个可以调整的三角脉冲序列。不幸的是,此方法使用的是
fft()
函数,在您的情况下,该函数可能是禁止使用的,也可能不是禁止使用的。大多数脚本使用索引和操纵向量。由于交替三角波的直流偏移和三角波矢量表示中可用的有限周期数,可以看到额外的光谱成分

三角脉冲和傅里叶变换:

具有工作关闭周期的三角形脉冲: 由于三角脉冲和占空比周期的过渡状态出现突变角,因此出现更高的频谱成分

%**************************************************************%
%可更改的属性%
%******************************************************%
绘制间隔=0.01;%0.01秒%
脉冲宽度=1/20;%6秒%
周期=1/20;%10秒(至少应为脉冲宽度)%
开始时间=0;
结束时间=脉冲宽度*1000;%(1000脉冲)%
%******************************************************%
中频(周期<脉冲宽度)
周期=脉冲宽度;
结束
时间向量=(开始时间:绘图间隔:结束时间);
每单位时间点数=1/绘图间隔;
半脉冲=脉冲宽度/2;
点数=脉冲宽度/绘图间隔;
上升坡度=linspace(0,1,楼层(点数/2)+1);
下降坡度=1-上升坡度;
三角形_脉冲=[上升_斜率下降_斜率(2:结束)];
t=(0:标绘间隔:脉冲宽度);
周期三角脉冲=零(1,长度(时间向量));
对于周期=1:+周期/绘图间隔:结束时间/绘图间隔
周期三角脉冲(1,周期:周期+长度(三角脉冲)-1)=三角脉冲(1,1:结束);
结束
周期三角脉冲=周期三角脉冲(1,1:长度(时间向量));
子批次(1,2,1);绘图(时间向量、周期三角脉冲);
三角形_频率=1/周期;
标题(“三角脉冲串”+num2str(三角频率)+“Hz(前10个周期)”;
轴([0周期*10 0 1]);
xlabel(“时间”);ylabel(“振幅”);
信号长度=长度(周期脉冲);
傅里叶变换=fft(周期三角脉冲);
Fs=1/u间隔;
P2=abs(傅里叶变换/信号长度);
P1=P2(1:楼层(信号长度/2)+1);
P1(2:end-1)=2*P1(2:end-1);
f=Fs*(0:(信号长度/2))/信号长度;
子批次(1,2,2);绘图(f,P1)
标题(“单边傅里叶变换”);
xlabel(“频率(Hz)”;伊拉贝尔(“震级”);

使用MATLAB R2019b运行

这可能与您的方法有很大的不同,但如果您好奇,这里有一个脚本,我可以生成一个可以调整的三角形脉冲序列。不幸的是,此方法使用的是
fft()
函数,在您的情况下,该函数可能是禁止使用的,也可能不是禁止使用的。大多数脚本使用索引和操纵向量。由于交替三角波的直流偏移和三角波矢量表示中可用的有限周期数,可以看到额外的光谱成分

三角脉冲和傅里叶变换:

具有工作关闭周期的三角形脉冲: 由于三角脉冲和占空比周期的过渡状态出现突变角,因此出现更高的频谱成分

%**************************************************************%
%可更改的属性%
%******************************************************%
绘制间隔=0.01;%0.01秒%
脉冲宽度=1/20;%6秒%
周期=1/20;%10秒(至少应为脉冲宽度)%
开始时间=0;
结束时间=脉冲宽度*1000;%(1000脉冲)%
%******************************************************%
中频(周期<脉冲宽度)
周期=脉冲宽度;
结束
时间向量=(开始时间:绘图间隔:结束时间);
每单位时间点数=1/绘图间隔;
半脉冲=脉冲宽度/2;
点数=脉冲宽度/绘图间隔;
上升坡度=linspace(0,1,楼层(点数/2)+1);
下降坡度=1-上升坡度;
三角形_脉冲=[上升_斜率下降_斜率(2:结束)];
t=(0:标绘间隔:脉冲宽度);
周期三角脉冲=零(1,长度(时间向量));
对于周期=1:+周期/绘图间隔:结束时间/绘图间隔
周期三角脉冲(1,周期:周期+长度(三角脉冲)-1)=三角脉冲(1,1:结束);
结束
周期三角脉冲=周期三角脉冲(1,1:长度(时间向量));
子批次(1,2,1);绘图(时间向量、周期三角脉冲);
三角形_频率=1/周期;
标题(“三角脉冲串”+num2str(三角频率)+“Hz(前10个周期)”;
轴([0周期*10 0 1]);
xlabel(“时间”);ylabel(“振幅”);
信号长度=长度(周期脉冲);
傅里叶变换=fft(周期三角脉冲);
Fs=1/u间隔;
P2=abs(傅里叶变换/信号长度);
P1=P2(1:楼层(信号长度/2)+1);
P1(2:end-1)=2*P1(2:end-1);
f=Fs*(0:(信号长度/2))/信号长度;
子批次(1,2,2);绘图(f,P1)
标题(“单边傅里叶变换”);
xlabel(“频率(Hz)”;伊拉贝尔(“震级”);
使用MATLAB R2019b运行