реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> белый шум в матлабе
vadimuzzz
сообщение Jul 5 2010, 04:54
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата(samurad @ Jul 5 2010, 10:05) *
Судя по хелпу, y=awgn(x,SNRdB) принимает в х амплитуды отчетов сигнала-вектора, и по умолчанию считает, что амплитуды нормированы, так что мощность вектора х есть 0 дБВт; иначе вызов этой функции другой: y=awgn(x,SNRdB,XPowdBW).

я тоже сначала так подумал, но там есть еще вариант y=awgn(x,SNRdB,'measured'), который сам меряет вх. мощность. результаты тоже не сошлись, тогда я проверил "в лоб":
Код
SNRdB=3;
SNR=10.^(SNRdB/10);
Eb=1;
No=Eb/SNR;
n=1000000;
N1=sqrt(No/2)*randn(n,1);
BPSK_sig=-2*randint(n,1)+1;
s1=BPSK_sig+N1;
s2=awgn(BPSK_sig,SNRdB,'measured');
N2=s2-BPSK_sig;

и, что характерно, std(N1)~0.5; std(N2)~0.707. 0.707 подозрительно похож на sqrt(2)/2, из чего я и сделал вывод, что awgn работает с мощностями, в то время как я давал амплитуды.
Go to the top of the page
 
+Quote Post
samurad
сообщение Jul 5 2010, 10:54
Сообщение #17


Частый гость
**

Группа: Свой
Сообщений: 121
Регистрация: 9-05-08
Из: Япония
Пользователь №: 37 385



Цитата(vadimuzzz @ Jul 5 2010, 07:54) *
я тоже сначала так подумал, но там есть еще вариант y=awgn(x,SNRdB,'measured'), который сам меряет вх. мощность. результаты тоже не сошлись, тогда я проверил "в лоб":
Код
SNRdB=3;
SNR=10.^(SNRdB/10);
Eb=1;
No=Eb/SNR;
n=1000000;
N1=sqrt(No/2)*randn(n,1);
BPSK_sig=-2*randint(n,1)+1;
s1=BPSK_sig+N1;
s2=awgn(BPSK_sig,SNRdB,'measured');
N2=s2-BPSK_sig;

и, что характерно, std(N1)~0.5; std(N2)~0.707. 0.707 подозрительно похож на sqrt(2)/2, из чего я и сделал вывод, что awgn работает с мощностями, в то время как я давал амплитуды.

Если отбросить подозрительность и рассмотреть факты (продолжая ваш код), то получается:
Код
BPSK_sig_pow = sum(abs(BPSK_sig.^2))./n   % измеренная мощность BPSK_sig
BPSK_sig_pow =
   1.0
% Для заданного SNR = 3dB, мощность шума должна быть в 2 раза меньше, т.е. 1/2
% Проверяем:
N1_pow = sum(abs(N1.^2))./n   % измеренная мощность шума N1
N1_pow =
   0.25  % ошибка
N2_pow = sum(abs(N2.^2))./n   % измеренная мощность шума N2
N2_pow =
   0.5  % верно

% Для проверки awgn(BPSK_sig,SNRdB):
s21 = awgn(BPSK_sig,SNRdB);  % можно, т.к. Eb = 1 W
N21 = s21 - BPSK_sig;
N21_pow = sum(abs(N21.^2))./n   % измеренная мощность шума N21
N21_pow =
   0.5  % опять верно

Вы ошиблись в моделировании шума N1: для реального сигнала BPSK весь шум так же реальный, поэтому правильно моделировать N1 так
Код
N11 = sqrt(No)*randn(n,1);
N11_pow = sum(abs(N11.^2))./n   % измеренная мощность шума N11
N11_pow =
   0.5 % верно
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Jul 5 2010, 11:25
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата(samurad @ Jul 5 2010, 17:54) *
Вы ошиблись в моделировании шума N1: для реального сигнала BPSK весь шум так же реальный, поэтому правильно моделировать N1 так
Код
N11 = sqrt(No)*randn(n,1);

тогда не сходятся результаты с berawgn(snr_axis,'psk',2,'nondiff')
обратите внимание, везде берется No/2
http://www.dsplog.com/2007/08/05/bit-error...psk-modulation/

http://www.dsplog.com/db-install/wp-conten...criptbpsk_ber.m

http://gaussianwaves.blogspot.com/2010/04/...ation-over.html
Go to the top of the page
 
+Quote Post
samurad
сообщение Jul 6 2010, 09:25
Сообщение #19


Частый гость
**

Группа: Свой
Сообщений: 121
Регистрация: 9-05-08
Из: Япония
Пользователь №: 37 385



Цитата(vadimuzzz @ Jul 5 2010, 14:25) *
тогда не сходятся результаты с berawgn(snr_axis,'psk',2,'nondiff')
обратите внимание, везде берется No/2
http://www.dsplog.com/2007/08/05/bit-error...psk-modulation/

http://www.dsplog.com/db-install/wp-conten...criptbpsk_ber.m

http://gaussianwaves.blogspot.com/2010/04/...ation-over.html

А они и не должны сходиться. Аргументом berawgn() является не SNR, a Es/No, который для комплексных сигналов на 3 дБ больше чем для действительных в Матлабе. См. раздел AWGN Channel в хелпе Communications Toolbox.
Вообще-то, различие смысла аргументов родственных функций создает некоторую неопределенность. Цена универсальности Матлаба.

Брать No/2 или No при генерации шума - это условность. Важно соблюсти соответствие между SNR, Es/No и Eb/No на протяжении всей цепи генерации и обработки сигнала в рамках той библиотеки функций, которую вы используете.
Go to the top of the page
 
+Quote Post
Muscat
сообщение Jul 6 2010, 10:25
Сообщение #20


Местный
***

Группа: Свой
Сообщений: 277
Регистрация: 8-04-09
Из: Москва
Пользователь №: 47 382



Есть такой вопрос

Моделирую декодер Витерби, есть необходимость оценить, при каком уровне ошибок на входе он исправляет ошибки, а при каком размножает. До этого делал все функцией awgn, после чего квантовал и смотрел число ошибочных бит.
Есть ли функция вида Исказить Х бит в последовательности А,чтобы ошибки были распределены равновероятны


--------------------
Because it's there
Go to the top of the page
 
+Quote Post
samurad
сообщение Jul 8 2010, 07:04
Сообщение #21


Частый гость
**

Группа: Свой
Сообщений: 121
Регистрация: 9-05-08
Из: Япония
Пользователь №: 37 385



Цитата(Muscat @ Jul 6 2010, 14:25) *
Есть такой вопрос

Моделирую декодер Витерби, есть необходимость оценить, при каком уровне ошибок на входе он исправляет ошибки, а при каком размножает. До этого делал все функцией awgn, после чего квантовал и смотрел число ошибочных бит.
Есть ли функция вида Исказить Х бит в последовательности А,чтобы ошибки были распределены равновероятны

Смысл вопроса неясен.
Уровень ошибок = количество ошибок?
Квантовали для получения мягких решений? Тогда равновероятные ошибки на входе (в канале) аннулируют преимущество мягких решений декодера Витерби.
Макс. количество исправляемых ошибок - величина зависящая в большей степени от использованного кода (сверточного для Витерби декодера), а именно от его минимального евклидова расстояния. Для минимизации размножения ошибок (burst errors) используют интерливер на входе и "накрывают" сверточный код блоковым, напр. Рида-Соломона.

Функции генерации векторов случайных величин в Communications Toolbox (обратите внимание на первые две):
- randerr() to generate random bit error patterns, as in a model of channel errors
- randint() to generate uniformly distributed random integers
- randsrc() to generate random symbols
- awgn() to generate additive white Gaussian noise
- wgn() to generate white Gaussian noise across a load
Так же в основном Матлабе есть функции так сказать более низкого уровня:
- rand() to generate uniformly distributed pseudorandom numbers
- randn() to generate normally distributed pseudorandom numbers
- randperm() to generate uniform random permutation
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 17:48
Рейтинг@Mail.ru


Страница сгенерированна за 0.01429 секунд с 7
ELECTRONIX ©2004-2016