Tuning parameters using signal constraint blockset wtih an AC signal as the reference
2 次查看(过去 30 天)
显示 更早的评论
I feed it a 60hz reference variable from teh workspace and it just pops out the parameter values that I already have. Plus the signal that is generated doesn't look anything like the reference that I am asking it to tune it's response to.
The question is can I use an AC signal for the reference? If so how do I use it? Thank you, Daniel
采纳的回答
Alec Stothert
2011-7-7
Hi Daniel,
I don't know your exact problem but generally trying to match frequency characteristics from time domain signals is tricky.
For example consider a simple frequency estimation problem, where we try to use a sum-squared-error value to optimize a sinusoid frequency to match a reference:
w0 = 2*pi*60; %Reference frequency
w = linspace(0.5*w0,2*w0,1e3); %Frequency to tune/identify
T = 0.2; %Time horizon
%Compute analytic SSE(w) = \int_0^T | sin(w_0 t) - sin(w t) |^2 dt
SSE = T - 0.5 * sin(2*w0*T)/(2*w0) - 0.5*sin(2*w*T)./(2*w)...
- sin( (w-w0)*T )./(w-w0) + sin( (w+w0)*T )./(w+w0);
%Plot SSE
plot(w,SSE)
title('SSE(w)=\int_0^T | sin(w_0 t) - sin(w t) |^2 dt')
xlabel('w')
Notice that the SSE has multiple local minima. I believe this is similar to what you are observing, that is the optimizer is getting stuck in a local minima. For the simple problem above I tried using a Signal constraint block with simplex algorithm instead of gradient descent and achieved reasonable results.
If possible an alternative is to formulate the problem directly in terms of frequency. Could you calculate the frequency of the signal that you want to tune and pass that to the Signal Constraint block and have it track the reference 60hz constant value?
Hope that helps
-Alec
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Nonlinear Control 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!