Problem with polyfit and polyval
Hello there, I took some manual measurements of the frequency response of a pre-amplifier and now I want to do a polyfit to get a smoother approximation (as I only measured some key points, the resolution is quite irregular) of the FR, which I do with polyfit. But so far, it returns me ZERO for all the polynomial coefficients! I’m probably doing a really simple mistake.
This is the code (the Amp.mat file is annexed):
%%Frequency Response Plotclose all; clear allload('Amp.mat'); % Manual Measurements of the FRFreq = Amp(:,1); % Frequency
G = Amp(:,3)./Amp(:,2); % Gain
Phase = Amp(:,4); % PhaseGFit = polyfit(Freq,G,length(Freq));
GFitVal = polyval(GFit,Freq); PhaseFit = polyfit(Freq,Phase,length(Freq));
PhaseFitVal = polyval(PhaseFit,Freq); figure;subplot(2,1,1)semilogx(Freq,G, ...
Freq,GFitVal);
grid on;
legend('G', ...
'GFitVal');
xlabel('Frequency (Hz)')
ylabel('Gain')
title('Gain x Frequency of the Pre-amplifier')subplot(2,1,2)semilogx(Freq,Phase, ...
Freq,PhaseFitVal);
grid on;
legend('Phase', ...
'PhaseFit');
xlabel('Frequency (Hz)')
ylabel('Phase (degrees)')
title('Phase x Frequency of the Pre-amplifier')% Impulse Responsex = 0:1e5;GS = polyval(GFit,x);
PhaseS = polyval(PhaseFit,x);FilterFreq = [flip(GS(2:end)).*exp(1i*(-flip(PhaseS(2:end)))) ...
GS.*exp(1i*PhaseS)];FilterIR = ifft(FilterFreq);figure;stem(FilterIR)
grid on;
xlabel('Samples (n)')
ylabel('Level')
title('Impulse Response of the Pre-amplifier')
ANSWER
Matlabsolutions.com provide latest MatLab Homework Help,MatLab Assignment Help for students, engineers and researchers in Multiple Branches like ECE, EEE, CSE, Mechanical, Civil with 100% output.Matlab Code for B.E, B.Tech,M.E,M.Tech, Ph.D. Scholars with 100% privacy guaranteed. Get MATLAB projects with source code for your learning and research.
It took me a few minutes to come up with this purely signal processing approach, so no curve fitting required. Experiment with the numerator and denominator orders of the transfer function to get the result you want. (Another option would be the firls function, and there are other empirical methods to consider depending on what you want to do. There is also the entire System Identification Toolbox! You are doing system identification here.)
It should give you everything you want:
D = load('Philippe Amp.mat');
Freq = D.Amp(:,1); % Hz Frequency Vector
Vi = D.Amp(:,3);
Vo = D.Amp(:,4);
H = Vo./Vi; % Amplitude Transfer Function
Phase = D.Amp(:,4);
W = Freq/max(Freq)*pi; % Radian Frequency Vectorfigure(1) % Look At The Data
subplot(2,1,1)
plot(Freq,Vi, Freq,Vo)
grid
subplot(2,1,2)
plot(Freq, Phase)
gridfigure(2)
SEE COMPLETE ANSWER CLICK THE LINK