Función de vagón suave (función de pulso rectangular)
Hay algunas respuestas sobre cómo obtener una función de onda cuadrada suave. Pero me gustaría tener una función de vagón suave o una función de rectángulo con 2 anchos diferentes .: wup, ywdown
Una solución es la Transformada de Fourier, pero prefiero tener una aproximación con un factor de suavidad.
Muchas gracias.
Aquí está la versión no suave. Me gustaría suavizarlo. Tenga en cuenta que: esta no es una función de onda cuadrada (la versión suave es la solución conocida . Esta es la función de vagón con 2 anchos: el ancho hacia arriba es 2 y el ancho hacia abajo es 3.
pulse[h_, wup_, wdown_, t_] :=
With[{period = wup + wdown, duty = wup/(wup + wdown)},
h*UnitBox[Mod[t/period, 1.]/(2. duty)]]
Plot[{pulse[1, 2, 3, t]}, {t, 0, 10}, Exclusions -> None]
Pulso de onda cuadrada con ancho uniforme:
Puedo hacer una versión suave solo para una función de onda cuadrada, con un ancho uniforme, pero no la función de rectángulo.
smoothPulse[ePulse_, wup_, wdown_, smoothness_, t_] :=
ePulse/2 + ePulse/\[Pi]*ArcTan[Sin[\[Pi] t/wup]*smoothness]
Pulso rectangular con 2 anchos diferentes:
No conozco la versión suave. Traté de construir una versión fluida de UnitBox.
smoothunitbox[t_, sharpness_] :=
Piecewise[{{Tanh[sharpness*(2 t + 1)] + 1,
t < 0}, {1 - Tanh[sharpness*(2 t - 1)], t >= 0}}]/2
smoothRectangle[h_, wup_, wdown_, smoothness_, t_] :=
With[{period = wup + wdown, duty = wup/(wup + wdown)},
h*smoothunitbox[Mod[t/period, 1.]/(2. duty), smoothness]]
Plot[smoothRectangle[1, 2, 4, 20, t], {t, 0, 10}, Exclusions -> None]
Pero la suavidad no es buena. ¿Cómo mejorar?
Respuestas
use el mollifieren matemáticas. También funciona para la Piecewisefunción.
Responder el comentario
a = 2;
b = 3;
S[x_ /; 0 <= x <= a] := 1;
S[x_ /; a <= x <= a + b] := 0;
S[x_ /; x >= a + b] := S[x - (a + b)];
S[x_ /; x <= a + b] := S[x + a + b];
ρ = 1/NIntegrate[Exp[-1/(1 - x^2)], {x, -1, 1}];
φ[x_, ϵ_] = (ρ/ϵ)* Piecewise[{{Exp[-ϵ^2/(ϵ^2 - x^2)], -ϵ < x < ϵ}}];
Plot[S[x], {x, -2 (a + b), 2 (a + b)}]
Plot[NIntegrate[φ[t - x, .3]*S[x], {x, -2 (a + b),
2 (a + b)}], {t, -2 (a + b), 2 (a + b)}]
Actualizado
f[x_] = Piecewise[{{1, 0 <= x <= 2}}];
s[x_] = f[Mod[x, 4, -2]];
ρ = 1/NIntegrate[Exp[-1/(1 - x^2)], {x, -1, 1}];
φ[x_, ϵ_] = (ρ/ϵ)*Piecewise[{{Exp[-ϵ^2/(ϵ^2 - x^2)], -ϵ < x < ϵ}}];
Plot[s[x], {x, -4, 4}]
Plot[NIntegrate[φ[t - x, .3]*s[x], {x, -4, 4}], {t, -4, 4}]
Original
Pero no sé cómo suavizar el rectángulo, solo trato de suavizar la Absfunción.
g[x_] = Piecewise[{{x, 0 <= x <= 1}, {-x, -1 <= x <= 0}}];
h[x_] = g[Mod[x, 2, -1]];
Plot[h[x], {x, -4, 4}]
ρ = 1/NIntegrate[Exp[-1/(1 - x^2)], {x, -1, 1}];
φ[x_, ϵ_] = (ρ/ϵ)*Piecewise[{{Exp[-ϵ^2/(ϵ^2 - x^2)], -ϵ < x < ϵ}}];
Plot[NIntegrate[φ[t - x, 1/8]*h[x], {x, -4, 4}], {t, -4,4}]
Suponga que desea que la onda cuadrada sea alta el 20% del tiempo. Lo siguiente ayuda.
DutyCycle = 0.2; Plot[Piecewise[{{x/(2 DutyCycle),
x < DutyCycle}, {(1 - 2 DutyCycle + x)/(2 - 2 DutyCycle),
DutyCycle < 1}}], {x, 0, 1}]
singlePeriod[t_, Smoothness_, DutyCycle_] := Piecewise[{
{ArcTan[Sin[2 \[Pi] t/(2 DutyCycle)]*Smoothness]/
ArcTan[Smoothness], t < DutyCycle},
{ArcTan[Sin[\[Pi] (1 - 2 DutyCycle + t)/(1 - DutyCycle)]*Smoothness]/
ArcTan[Smoothness], DutyCycle < 1}
}]; Plot[singlePeriod[t, 12, 0.2], {t, 0, 1}, PlotRange -> All,Exclusions -> None]
smoothPulse[t_,Smoothness_,DutyCycle_]:=singlePeriod[Mod[t,1],Smoothness,DutyCycle]; Plot[smoothPulse[t,12,0.2],{t,0,4},PlotRange->All,Exclusions->None]
Con el uso apropiado de smoothPulse anterior, podemos cambiar el valor alto, el valor bajo, el período y la fase de un smoothPulse. Aquí hay un ejemplo:
Plot[2.5+2.5*smoothPulse[12t+0.2,12,0.2],{t,0,0.33333},PlotRange->All,Exclusions->None]