Привет, я провел несколько ручных измерений частотной характеристики предварительного усилителя, и теперь я хочу сделать полифит, чтобы получить более плавное приближение (поскольку я измерил только некоторые ключевые точки, разрешение довольно неравномерно) FR, который Я делаю с полифитом. Но пока он возвращает мне НОЛЬ для всех полиномиальных коэффициентов! Я, вероятно, делаю очень простую ошибку.

Это код (файл Amp.mat прилагается):

%%Frequency Response Plot
close all; clear all
load('Amp.mat'); % Manual Measurements of the FR
Freq = 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 Response
x = 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')

ОТВЕЧАТЬ

Matlabsolutions.com предоставляет последнюю Помощь по домашним заданиям MatLab, Помощь по заданию MatLab для студентов, инженеров и исследователей в различных отраслях, таких как ECE, EEE, CSE, Mechanical, Civil со 100% выходом. Код Matlab для BE, B.Tech , ME, M.Tech, к.т.н. Ученые со 100% конфиденциальностью гарантированы. Получите проекты MATLAB с исходным кодом для обучения и исследований.

Мне потребовалось несколько минут, чтобы придумать этот чисто обработка сигналов подход, поэтому подгонка кривой не потребовалась. Поэкспериментируйте с порядком числителя и знаменателя передаточной функции, чтобы получить желаемый результат. (Другим вариантом может быть функция firls, и есть и другие эмпирические методы, которые следует учитывать в зависимости от того, что вы хотите сделать. Существует также весь набор инструментов для идентификации системы! Здесь вы выполняете идентификацию системы.)

Он должен дать вам все, что вы хотите:

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)

СМОТРИТЕ ПОЛНЫЙ ОТВЕТ НАЖМИТЕ НА ССЫЛКУ