Регистрация | Последние сообщения | Персональный список | Поиск | Настройка конференции | Личные данные | Правила конференции | Список участников | Top 64 | Статистика раздела | faq | Что нового v.2.3 | Чат
Skunk Forum - Техника, Наука, Общество » Форум разработчиков РЭА »
Оценка нелинейных искажений усилительного каскада с помощью линейной модели.

Версия для печати (настроить)

Новая тема | Написать ответ

Подписаться

Автор Тема:   Оценка нелинейных искажений усилительного каскада с помощью линейной модели.
AlexOr
Member

Сообщений: 367
Откуда: СПб
Регистрация: Май 2003

написано 07 Января 2004 21:22ИнфоПравкаОтветитьIP

Тестировался простейший транзисторный самопальный УМЗЧ (25Вт на канал, 1/4 мощности), на входе попса.
ЦАП и АЦП 16 бит самые отстойные - встроенный кодек на ПК (поэтому шум относительно большой).
2 сек для идентификации из одной песенки, а сравнение 8 сек из другой.
Сигнал err_ звучит как шум, т.е. исходный сигнал НЕ ПРОСЛУШИВАЕТСЯ.
При прослушивании через наушники разницы между сигналами outmodel и outmodel+err_ НЕ СЛЫШНО.
Отклонение от линейной модели плюс шум плюс ошибка модели (сигнал err_) больше уровня статического шума всего в 1.5 раза!
Статический шум -56дб.
С учетом неполного размаха -56-6=-62 дб
Т.е. можно сделать вывод что составляющая всех нелинейных искажений УМЗЧ вместе АЦП и ЦАП находится на уровне -68дб.
Следовательно, THD не выше 0,039% НА РЕАЛЬНОМ СИГНАЛЕ

Было бы интересно протестировать транзисторный hi-end. Желающие есть?


Прога для MATLAB6.0_R12:


fprintf('For Pentium from 256 Mb RAM, duration of a signal for an estimation no more than 2 s,\n')
fprintf('Duration for comparison no more than 10 s\n')
fprintf('Otherwise exception Out of memory is possible\n')
fprintf('Time of an estimation about 1.5 hours on a Pentium 800 MHz \n')
while 1==1
fprintf('0 - Form wav-file for test\n')
fprintf('1 - Measuring\n')
fprintf('2 - Determination shift between input and output data\n')
fprintf('3 - Estimate\n')
fprintf('4 - Test estimat and compare\n')
fprintf('5 - Play Result\n')
fprintf('9 - Exit\n')

a=input(' ');
fs=44100;

%******************************************************
if a==9
break
end

%******************************************************
if a==0
pause1_=0.5;
pause2_=0.2;
p=[0 0 0 0 0]';
tmp1=[1: pause1_*fs ]'; tmp1=tmp1*0;
fprintf('loading file in1.wav (for estimate) ...\n')
sp=input('Input start point [s] ');
dr=input('Input Duration [s] ');
[tmp2,Fsample,bits] = wavread('in1.wav',[fs*sp+1 fs*(sp+dr)+1]);
if Fsample~=fs
error('erros fs')
end
p(2)=p(1)+pause1_;
p(3)=p(2)+dr;
p(4)=p(3)+pause2_;
tmp2=tmp2(:,1);
tmp1=[tmp1;tmp2];
tmp2=[1: pause2_*fs ]'; tmp2=tmp2*0;
tmp1=[tmp1;tmp2];
fprintf('loading file in2.wav (for compare) ...\n')
sp=input('Input start point [s] ');
dr=input('Input Duration [s] ');
[tmp2,Fsample,bits] = wavread('in2.wav',[fs*sp+1 fs*(sp+dr)+1]);
if Fsample~=fs
error('erros fs')
end
p(5)=p(4)+dr;
tmp2=tmp2(:,1);
tmp1=[tmp1;tmp2];
wavwrite(tmp1,fs,'in.wav')
fprintf('Main file in.wav created. see plot\n')
plot(tmp1)
while input('1 - play file in.wav 2 - Continue ')==1
wavplay(tmp1,fs)
end
StopTime=size(tmp1,1)/fs
clear tmp1 tmp2
end

%******************************************************
if a==1
fprintf('Play...Rec...\n')
sim('getaudio')
[x,Fsample,bits] = wavread('in.wav',fs*StopTime);
if Fsample~=fs
error('erros fs')
end
[y,Fsample,bits] = wavread('out.wav',fs*StopTime);
if Fsample~=fs
error('erros fs')
end
fprintf('Stop Play-Rec. See plot - "input and output".\n')
plot([x,y])
end

%******************************************************
if a==2
T1=0.15; %max search period [s]
T2=0.25; %max possible shift [s]
N1=p(2)*fs;
N2=p(3)*fs;
if N2-N1>fs*T1
N2=N1+fs*T1;
end
tmp3=x([N1:N2]);
plot(tmp3)
tmp3avr=sum(abs(tmp3)/size(tmp3,1))
ss=T2*fs;
err=[[1:ss]' [1:ss]'];
for index = 1:1:ss
tmp4=y([index+N1:index+N2]);
tmp4avr=sum(abs(tmp4)/size(tmp4,1));
tmp4=tmp4*(tmp3avr/tmp4avr);
tmp4=tmp3-tmp4;
err(index,2)=sum(abs(tmp4)/size(tmp4,1));
index
end
clear tmp3 tmp4

[minerr, minerrind]=min(err(:,2))
shift=minerrind
fprintf('see plot - "error vs shift"\n')
plot(err(:,2))
if minerr>0.02
error('shift not found')
end
fprintf('pause\n')
pause

x_=x; y_=y;
N=size(x_,1);
x_(N-shift+1:N)=[];
y_(1:shift)=[];
fprintf('see plot "data with zero shift\n')
fprintf('pause\n')
plot([x_,y_])
y_avr=sum(abs(y_)/size(y_,1));
x_avr=sum(abs(x_)/size(x_,1));
y_=y_*(x_avr/y_avr);
y_=y_-x_;
ErrOnFullData=sum(abs(y_)/size(y_,1))
if ErrOnFullData>1.5*minerr
error('Measuring data corrupt')
end
clear x_ y_ err
end

%******************************************************
if a==3
do=input('Delay in object= ? - ');
shift_=shift-do
x_=x; y_=y;
N=size(x,1)
x_(N-shift_+1:N)=[];
y_(1:shift_)=[];
fprintf('see plot - "data"\n')
plot([x_,y_])
fprintf('pause\n')
pause

st=(p(2)-0.1)*fs;
en=p(3)*fs;
mydatae = [y_([st:en]),x_([st:en])];
plot([mydatae(:,2),mydatae(:,1)])
fprintf('see plot - "data for estimate"\n')
fprintf('pause\n')
pause

fprintf('start estimate\n')
amx = armax(mydatae,[24 24 24 1])
amx.EstimationInfo
step(amx)
wavplay(wavread('notify.wav'),fs);
end

%******************************************************
if a==4
clear x y
%error estimate...
in=mydatae(:,2);
out=mydatae(:,1);
outmodel=sim(amx,in);
err_=outmodel-out;
rms_in = sqrt(sum(in.^2)/size(in,1))
rms_err_ = sqrt(sum(err_.^2)/size(err_,1))
SER=20*log10(rms_err_/rms_in) %signal error ratio
fprintf('see plot "Error estimate + Noise"\n')
plot(err_)
fprintf('Pause. Press any key.\n')
pause

%compare all...
in=x_;
out=y_;
outmodel=sim(amx,in);
err_=out-outmodel;
rms_in = sqrt(sum(in.^2)/size(in,1))
rms_err_ = sqrt(sum(err_.^2)/size(err_,1))
SER=20*log10(rms_err_/rms_in) %signal error ratio
fprintf('see plot "Deviation from linear model + error estimate + Noise. For full signal"\n')
plot(err_)
fprintf('Pause. Press any key.\n')
pause

%compare...
N=size(x_,1)
in=x_([(p(4)-0.3*pause2_)*fs:N]);
out=y_([(p(4)-0.3*pause2_)*fs:N]);
outmodel=sim(amx,in);
err_=outmodel-out;
rms_in = sqrt(sum(in.^2)/size(in,1))
rms_err_ = sqrt(sum(err_.^2)/size(err_,1))
SER=20*log10(rms_err_/rms_in) %signal to error ratio
fprintf('see plot "Deviation from linear model + Error estimate + Noise"\n')
plot(err_)
fprintf('Pause. Press any key.\n')
pause

%static noise...
ysn=y_( [ (p(1)+0.5*pause1_)*fs : (p(2)-0.05*pause1_)*fs] );
rms_sn = sqrt(sum(ysn.^2)/size(ysn,1))
SNR=20*log10(rms_sn/1) %signal noise ratio
fprintf('see plot - "static noise"\n')
plot(err_)
fprintf('Pause. Press any key.\n')
pause

%error to static noise ratio
ESNR=rms_err_/rms_sn
ESNR_=20*log10(rms_err_/rms_sn)
end

%******************************************************
if a==5
fprintf('Testing normalize err_ ...\n')
wavplay(err_/max(abs(err_)),fs)
fprintf('Pause. Press any key.\n')
pause
fprintf('Testing outmodel ...\n')
wavplay(outmodel,fs)
fprintf('Pause. Press any key.\n')
pause
fprintf('Testing out=outmodel+err_ ...\n')
wavplay(outmodel+err_,fs)
end

end

[Это сообщение изменил AlexOr (изменение 08 Января 2004 19:00).]

Alex P.
Member

Сообщений: 4144
Откуда: SPb
Регистрация: Июнь 2001

написано 08 Января 2004 13:59ИнфоПравкаОтветитьIP

AlexOr
Что будет, если на выход подключить реактивный эквивалент нагрузки по какому либо стандарту?
Подать на вход известную смесь сигналов для измерения интермодуляционных искажений?
усилитель в реальности работает не на воздух..
Имхо, можно считать единственно гарантирующим видение всего спектра искажений на выходе усилителя анализатор спектра

AlexOr
Member

Сообщений: 369
Откуда: СПб
Регистрация: Май 2003

написано 08 Января 2004 14:25ИнфоПравкаОтветитьIP

Alex P.
Что будет, если на выход подключить реактивный эквивалент нагрузки по какому либо стандарту?
А зачем? У меня подключены колонки. Можно считать, что это его родная нагрузка.

усилитель в реальности работает не на воздух..
В смысле?

Подать на вход известную смесь сигналов для измерения интермодуляционных искажений?
Ну, давайте подадим, расскажите плз, что за смесь.
Хотя помнится в соседней ветке кто-то сильно возмущался, что эта смесь не есть реальный сигнал.

Alex P.
Member

Сообщений: 4145
Откуда: SPb
Регистрация: Июнь 2001

написано 08 Января 2004 15:32ИнфоПравкаОтветитьIP

AlexOr
В верхнем посте ничего не написано, была ли подключена нагрузка к усилителю в момент проведения замера, надо понимать, что подключена? Смесь сигналов надо обязательно использовать при испытании, поскольку реальный источник не всегда содержит своем спектре составляющие с частотой выше 12-14 кГц с достаточным уровнем и некоторые неисправности и баги разработки могут быть пропущены при таких измерениях, но вылезут на других композициях

AlexOr
Member

Сообщений: 371
Откуда: СПб
Регистрация: Май 2003

написано 08 Января 2004 18:12ИнфоПравкаОтветитьIP

Шум был не просто шумом, а обычным фоном который, кстати, неслышно, если не напрягаться. Поставил усилок рядом с компом, поднял порядок модели до 24. Вот что она выдает
rms_in =
0.1936
rms_err_ =
1.2366e-004
SER =
-63.8955
see plot "Deviation from linear model + Error estimate + Noise"
Pause. Press any key.
rms_sn =
8.6887e-005
SNR =
-81.2209
see plot - "static noise"
Pause. Press any key.
ESNR =
1.4233
ESNR_ =
3.0656

Добавление от 08 Января 2004 18:46:

В общем, граждане сомневающиеся, можете проверить и послушать err_ своего УМЗЧ который напомню, равен Deviation from linear model + Error estimate + Noise.
Линейные модели получаются весьма точными, но есть ложка дегтя. Если шум будет меньше и УМЗЧ будет иметь THD круче чем -80дб то, очевидно, нужно повышать порядок модели. Выше 50-го мне получить не удалось, ошибки округления все губят. Короче имхо на ПК такого уже не посчитать. Хотя... может быть поможет свежая версия MATLAB.
Но в принципе это не важно, если сравнить outmodel и out=outmodel+err_ даже при SER =-63.8955.

Alex P.
надо понимать, что подключена?
Подключена. И какой смысл, по-вашему, тестировать усилитель без нагрузки?

Смесь сигналов надо обязательно использовать при испытании, поскольку реальный источник не всегда содержит своем спектре составляющие с частотой выше 12-14 кГц
Шум с равномерным спектром подойдет?

Alex P.
Member

Сообщений: 4147
Откуда: SPb
Регистрация: Июнь 2001

написано 08 Января 2004 21:15ИнфоПравкаОтветитьIP

AlexOr
Еще один момент, который, похоже, не был учтен вами- снимать сигнал необходимо не с выходных зажимов УМЗЧ, а с входных клемм акустической системы
Шум с равномерным спектром подойдет?
Нет, поскольку будет затруднен анализ выходящего спектра. Например, подойдет смесь сигналов 10 кГц и 250 Гц (и т.д. по диапазону)с пропорциями амплитуд 1:4. Далее все же желательно использовать анализатор спектра и на нем смотрим уровень комбинационных составляющих для более интересной для нас частоты 10 кГц (это будет 9750, 9500, 10250, 10500 и т.д. частоты). Но еще более интересным было бы увидеть различие в определении уровня искажений, применяя анализатор спектра и линейные модели
После замера интермодуляционных искажений значение Кг не очень интересно, оно будет сильно менее

AlexOr
Member

Сообщений: 372
Откуда: СПб
Регистрация: Май 2003

написано 09 Января 2004 03:03ИнфоПравкаОтветитьIP

Alex P.
Еще один момент, который, похоже, не был учтен вами- снимать сигнал необходимо не с выходных зажимов УМЗЧ, а с входных клемм акустической системы
Не согласен. Провода до АС, даже если их считать линией с распределенными параметрами, проявляет только линейные свойства и значит не может увеличить нелинейную составляющую.

Нет, поскольку будет затруднен анализ выходящего спектра.
Значит, вы не поняли как работает метод.
Оценивается не спектр, а сигнал отклонения от линейной и бесшумной системы(модели).
SER =-63.8955 дб - показывает насколько это отклонение меньше сигнала
ESNR_ =3.0656 дб –показывает насколько оно больше шума в режиме покоя.

Но еще более интересным было бы увидеть различие в определении уровня искажений, применяя анализатор спектра и линейные модели
Анализатор спектра всяко покажет меньше. Там совершенно нет составляющей Error estimate. Но насколько именно зависит не только от точности идентификации, но и от дрейфа параметров усилителя во время измерения.
Но проблем нет совместить эти методы в одной программе.

[Это сообщение изменил AlexOr (изменение 09 Января 2004 03:39).]

Alex P.
Member

Сообщений: 4150
Откуда: SPb
Регистрация: Июнь 2001

написано 09 Января 2004 19:14ИнфоПравкаОтветитьIP

AlexOr
Не согласен. Провода до АС, даже если их считать линией с распределенными параметрами, проявляет только линейные свойства и значит не может увеличить нелинейную составляющую.
Глубокое заблуждение. АС имеет существенно нелинейное сопротивление для сигналов не только разных частот, но и разных амплитуд, что вкупе с сопротивлением (комплексным)соединительных проводов (активное сопротивление 0.3-1 Ом на каждые 10 метров длины)дает Кг на зажимах АС порядка 0.5 %, тогда как на выходе непосредственно усилителя искажения будут в десятки раз менее. Об этом есть много материалов, начиная с 25 летней давности,, поищите

Значит, вы не поняли как работает метод.
Скорее вы не поняли, для чего применяется смесь именно этих разночастотных колебаний. Повторюсь, задача не столько в том, чтобы убедиться в низком уровне искажений, сколько в том, чтобы убедиться, что спектр искажений достаточно узок, спадает как положено и не имеет выраженных максимумов в определенных точках, что придает звуку особо утомительное звучание.

AlexOr
Member

Сообщений: 374
Откуда: СПб
Регистрация: Май 2003

написано 10 Января 2004 05:31ИнфоПравкаОтветитьIP

Alex P.
Глубокое заблуждение.
У вас.

нелинейное сопротивление для сигналов не только разных частот, но и разных амплитуд
Ну просто очень грамотное высказывание.
Не путайте плз зависимость от частоты с нелинейным сопротивлением.

дает Кг на зажимах АС порядка 0.5 %
Ну ясно понятно. Только это не имеет отношение к усилителю. Будь он даже идеальным, этот эффект останется.
Другое дело если бы ООС УМЗЧ была с АС.

Повторюсь, задача не столько в том, чтобы убедиться в низком уровне искажений, сколько в том, чтобы убедиться, что спектр искажений достаточно узок, спадает как положено и не имеет выраженных максимумов в определенных точках
И зачем если, например, выясняется что суммарные нелинейные искажения ниже уровня статического шума в два раза. Тогда ясно, что утомительного звучания по вине УМЗЧ быть не может в принципе.

[Это сообщение изменил AlexOr (изменение 10 Января 2004 05:43).]

Alex P.
Member

Сообщений: 4153
Откуда: SPb
Регистрация: Июнь 2001

написано 10 Января 2004 09:51ИнфоПравкаОтветитьIP

AlexOr
нелинейное сопротивление
Ну просто очень грамотное высказывание.
Что то не понравилось? Давайте еще раз- нелинейное сопротивление=нелинейной зависимости сопротивления для сигналов разных частот.

Глубокое заблуждение.
У вас.

Понятно, понятно, но тогда уж не только у меня Многие глубокоуважаемые разработчики пишут об этом, например, тов. Сухов в Р. №5 1989 г., Journal of the Electronic Industry, №8 1980 год, Toshiba " Clean Drive" System Overcomes Amplifier Distortion, есть статья, например, в проспекте фирмы Rotel (1985 год) Rotel High Perfomance- High Fidelity, можно найти и кучу других материалов по тому же радио

дает Кг на зажимах АС порядка 0.5 %
Ну ясно понятно. Только это не имеет отношение к усилителю. Будь он даже идеальным, этот эффект останется.

Неверно, посмотрите материалы по усилителям с отрицательным выходным сопротивлением

AlexOr
Member

Сообщений: 376
Откуда: СПб
Регистрация: Май 2003

написано 10 Января 2004 14:43ИнфоПравкаОтветитьIP

Alex P.
Тогда давайте обобщать: если Rвых>=0 то измерять нужно на клеммах усилителя, а если Rвых<0 то на АС.
Введение отрицательного сопротивления равного сопротивлению проводов эквивалентно (есно с погрешностью) приближению точки взятия сигнала ООС к АС и тогда на зажимах АС нелинейная составляющая будет меньше.
У тестируемого УМЗЧ Rвых>0 и близкое к нулю.

Давайте еще раз- нелинейное сопротивление=нелинейной зависимости сопротивления для сигналов разных частот.
Цепь, состоящая из линейных активных и реактивных элементов в общем случае имеет нелинейную зависимость сопротивления от частоты. Например z=sqrt(r^2+(w*L)^2)
А если есть нелинейные элементы (L=f1(i), r=f2(i) ) то Um*sin(wt)=r(i)*i+f1(i)di/dt…. Короче о сопротивлении как таковом говорить уже не приходится и обычно говорят что просто нагрузка нелинейная. Углубление в подробности типа что от чего зависит просто некорректно.

Ваш ответ:

Коды форума
Смайлики


Ник:    Пароль       
Отключить смайлики

Все время MSK

Склеить | Разбить | Закрыть | Переместить | Удалить

Новая тема | Написать ответ
Последние сообщения         
Перейти к:

Свяжитесь с нами | skunksworks.net

Copyright © skunksworks.net, 2000-2018

Разработка и техническая поддержка: skunksworks.net


Рейтинг@Mail.ru Яндекс.Метрика