Problem with polyfit and polyval

Technical Source
2 min readFeb 1, 2021

--

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); % Phase
GFit = 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 Vector
figure(1) % Look At The Data
subplot(2,1,1)
plot(Freq,Vi, Freq,Vo)
grid
subplot(2,1,2)
plot(Freq, Phase)
grid
figure(2)

SEE COMPLETE ANSWER CLICK THE LINK

--

--

Technical Source
Technical Source

Written by Technical Source

Simple! That is me, a simple person. I am passionate about knowledge and reading. That’s why I have decided to write and share a bit of my life and thoughts to.

No responses yet