首页 > 解决方案 > matlab如何把方波信号变成三角波

问题描述

我想把下面的方形信号变成三角形信号。我怎么做?我曾尝试使用锯齿/方形函数来做到这一点,但我必须在不使用这些函数的情况下做到这一点(另外,锯齿不是三角形的,所以就这样)。我已经设法编写了方形信号的代码,但我不知道究竟要改变什么才能使它成为三角形。

P=40; 
D=12; 
N=50; 
f=1/P; 
w0=2*pi*f; %angular frequency
rez=0.1; %signal's temporal resolution

s1=[ones(1,D/rez),zeros(1,(P-D)/rez)]; %a period of the square signal
t=0:rez:P; %equivalent time for a period
perioada=P/rez;%number of samples in a period
inter1=0:rez:P;
stem(inter1(1:400),s1)
title('Square Signal x(t)'),
xlabel('t[s]')
ylabel('A')

semnal=repmat(s1,1,5);%initial signal repeated 5 times
figure
plot(semnal)
title('5 periods from the signal')
xlabel('t[s]')
ylabel('A')

标签: matlab

解决方案


您可以s1通过构建左三角形边、右三角形边并连接两边来创建三角形。

使用linspace from 1to 0with D/rez+1points构建左侧:

s1_left = linspace(1, 0, D/rez+1);

使用linspace from 0to 1with (P-D)/rez+1points构建右侧:

s1_right = linspace(0, 1, (P-D)/rez+1);

连接左右部分(1:end-1用于平滑过渡)

s1 = [s1_left(1:end-1), s1_right(1:end-1)];

这是完整的(更新的)代码:

P=40; 
D=12; 
N=50; 
f=1/P; 
w0=2*pi*f; %angular frequency
rez=0.1; %signal's temporal resolution

%s1=[ones(1,D/rez),zeros(1,(P-D)/rez)]; %a period of the square signal

s1_left = linspace(1, 0, D/rez+1);  %Left size of triangle
s1_right = linspace(0, 1, (P-D)/rez+1); %Right size of triangle
s1 = [s1_left(1:end-1), s1_right(1:end-1)]; %Concatenate left part and right part (use 1:end-1 for creating smooth connection).

t=0:rez:P; %equivalent time for a period
perioada=P/rez;%number of samples in a period
inter1=0:rez:P;
stem(inter1(1:400),s1)
title('Square Signal x(t)'),
xlabel('t[s]')
ylabel('A')

semnal=repmat(s1,1,5);%initial signal repeated 5 times

figure
plot(semnal)
title('5 periods from the signal')
xlabel('t[s]')
ylabel('A')

结果:
在此处输入图像描述

同一图中的方波信号和三角波信号:
在此处输入图像描述


推荐阅读