Привет, я провел несколько ручных измерений частотной характеристики предварительного усилителя, и теперь я хочу сделать полифит, чтобы получить более плавное приближение (поскольку я измерил только некоторые ключевые точки, разрешение довольно неравномерно) 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)
СМОТРИТЕ ПОЛНЫЙ ОТВЕТ НАЖМИТЕ НА ССЫЛКУ