Перейти к содержанию
    

Ivan55

Участник
  • Постов

    212
  • Зарегистрирован

  • Посещение

Весь контент Ivan55


  1. Я умножал на Nfft/sqrt(nCar) собственно вы про это и говорите, но амплитуда для qpsk получилась если брать по модулю то от нуля до четырёх, для более высоких уровней модуляции соответственно выше, например кам-64 там от нуля где-то до семнадцати... Должен быть ещё коэфициентикнормировки для модуляции, попробовал функцию modnorm(qam, 'avpow',1) получил от нуля до 2-3 не зависимо от уровня модуляции
  2. Всем привет, есть вопрос Формирую офдм сигнал случайный поток данных модулирую например qpsk, расставляю поднесущие и делаю обратное фурье. Получаю что модуль амплитуды офдм сигнала во временной области очень маленький, а хотелось бы его иметь от нуля до единицы. На что нужно пронормировать? Должен быть какой-то коэффициент зависящий от количества поднесущих и уровня модуляции
  3. Добрый день! Есть вот такой вот алгоритм DDECS06_poster_A4.pdf объясните для чего нужен пункт 3.5. на что он влияет? на чем отразится его исключение из алгоритма?
  4. MMSE equalizer OFDM

    Добрый день! Подскажите откуда брать кореляционную матрицу канала(ну или импульсную характеристику) и дисперсию шума для реализации данного метода может у кого нибудь есть кусочек кода по оценке данных параметров?
  5. Доброго времени суток! Написал простую программу которая генерит синус косинус и переводит в fixedpoin строю спектр синуса косинуса в плавающей точке все класно спектры совпадают все красиво строю спектры синуса косинуса в fixedpoint: во первых он не строит, ругается на fixedpoint, это ладно... перевожу в double ругаться перестает, но спектр все равно не строит, выдает нули не понятно... убираю с конца два отсчета и тогда он строит спектр... че к чему, не понятно... при этом сами спектры не такие какие должны быть, во первых спектры синуса и косинуса почемуто разные, во вторых полка шума не соответствует той которая должна быть при заданной разрядности, да и изменение разрядности на нее почемуто не влияет скорее всего это из за того что приходится выкидывать последние два отсчета, но если не выкидывать то спектр почемуто не строится Помогите разобраться буду благодарен Fclc = 500e6; NFFT = 2^15; Fout = 1000*Fclc/NFFT; % Частота выходного сигнала T = 1/Fclc; t1 = (1:NFFT)*T; x1 = cos(2*pi*Fout*t1); x2 = sin(2*pi*Fout*t1); xf1 = fi(x1, 1, 18, 16); xf2 = fi(x2, 1, 18, 16); figure(1) periodogram(double(x1(1:end))); figure(2) periodogram(double(xf1(1:end-2)));
  6. Добрый день! Помогите найти ошибку если кто знает https://electronix.ru/forum/index.php?showtopic=145929 тему создал в другой ветке Заранее спасибо
  7. Добрый день! Написал модулятор, написал тест к нему все работает перевел на фиксид поинт но он почему то не работает переводил автоматически через fixed point convert вот исходники New_Folder__1_.rar там в тесте signal_mod1 = quadr(signal, fc, t); signal_mod2 = quadr_wrapper_fixpt(signal,fc,t); соответственно модулятор с плаввающей точкой и на fixed point
  8. Препод всетаки уперся и хочет чтоб было без double A = int32(randi(1000,5,5)); D = double(A); B = inv(D); Но блин я даже не знаю что делать матлаб ругаетя на все на det на lu Что делать? как найти обратную?
  9. улыбнуло ну а если серьезно то я толком ничего не нашел кроме алгоритма Штрассена, но его видимо надо реализовывыть на С++ и подключать к матлабу как MEX с чем я слабо знаком, может есть еще варианты менее извратные чем описал я и вы)))
  10. впринципе вариант) спасибо смысл действительно загадочен... есть еще более загадочный вопрос))) как ускорить вычисление произведения матриц большой размерности в матлаб, так чтобы это выполнялось быстрее чем просто А*В
  11. умножте B на А вы не получите единичную матрицу, а это значит что В не обратная к А Вы получите матрицу состоящую из единиц да и вообще если опустить пока проблему с int32 и запустить вот такой код A = randi(10, 5, 5); B = inv(A); E = A.*B; то у меня в результате почемуто не получается Е = [1 0 0 0 0; 0 1 0 0 0; 0 0 1 0 0; 0 0 0 1 0; 0 0 0 0 1] извиняюсь точка не нужна тогда все норм A = randi(10, 5, 5); B = inv(A); E = A*B; В итоге Е - единичная матрица Остается вопрос что делать когда матрица задана в формате int32
  12. Добрый вечер! Есть проблема матлаб выдает ошибку при поиске обратной матрицы заданной в формате int32 A = int32(randi(1000, 2000, 2000)); % Ищем обратную матрицу B = inv(A); Ошибка: Undefined function 'inv' for input arguments of type 'int32'. Error in InversMatrix (line 6) B = inv(A); Что можно сделать? как это обойти?
  13. да я в курсе. Но без защитного интервала там вобще два побочных пика получается Вот в статье Парка10.1109_LCOMM.2003.812181.pdf у него тоже этот пик тока с другой стороны, видимо потому что суммирование в другом порядке делал отсюда я и предположил что префикс нужен А в жизни преамбулы разве без защитного передают?
  14. Если быть точнее то я щас делаю вот, так clear all; clc; close all; flTimeShift = 1; % 1 - с уходом времени; 0 - без ухода времени flChann = 0; % 1 - с каналом; 0 - без канала %choose SNR level in dB SNR=-5:10; %choose FFT length N_FFT=1024; %choose guard interval length as a percentage of N_FFT NGI=1/4; %choose number of used carriers N_used=N_FFT/2; N_GI=round(NGI*N_FFT); Nofdm=N_FFT+N_GI; Nsym = 500; %frequency offset nSTOs=50; CFO=0.4; Fs = 11.2e6; % Частота дискретизации сигнала Tofdm = Nofdm/Fs; % Длительность OFDM сигнала в сек ppm = 50*10^-6; % Стабильность тактового гененратора Nppm = Fs*ppm; % Уход в отсчетах в сек %% Канал 1 % PathDelays = [0 50e-9 110e-9 170e-9 290e-9 310e-9]; % задержки лучей % U = [0 -3 -10 -18 -26 -32]; % Fd= [4.6 23 139]; % Доплеровское смещение в Гц %% Канал 2 % PathDelays = [0 110e-9 190e-9 410e-9]; % задержки лучей % U = [0 -9.7 -19.2 -22.8]; % Fd= [4.6 23 139]; % Доплеровское смещение в Гц %% Канал 3 PathDelays = [0 310e-9 710e-9 1090e-9 1730e-9 2510e-9]; % задержки лучей U = [0 -1.0 -9.0 -10.0 -15.0 -20.0]; Fd= [4.6 23 139]; % Доплеровское смещение в Гц %% preamble Minn B=2; reS=(-1).^round(rand(1,round(N_used/B))); imS=1i.*(-1).^round(rand(1,round(N_used/B))); s1=reS+imS; s2=fliplr(s1); tx_signal_noGI=[s1 s2 conj(s1) conj(s2)]; tx_signal = zeros(1,Nsym*N_FFT); tx_signal_GI=[tx_signal_noGI(1,N_FFT-N_GI+1:N_FFT) tx_signal_noGI]; tx_signal=repmat(tx_signal_GI,1,Nsym); %% Модель канала OutChan = complex(zeros(Nsym*N_FFT,1),zeros(Nsym*N_FFT,1)); rand('seed',0); if flChann == 1 tic %T = [0 PathDelays(OptChan)]; %U = [0 0]; T = PathDelays; chan = rayleighchan(1/Fs,Fd(3)/2,T,U); chan.DopplerSpectrum=doppler.ajakes; %flat ajakes chan.ResetBeforeFiltering=0; OutChan=filter(chan,tx_signal); t = toc; fprintf('Сигнал искажен каналом...\n Время выполнения %4.2f секунд\n', t); else OutChan = tx_signal; end %% Добавление смещение частоты и времени tic; delay(1,1) = Nppm*Tofdm; L = Nofdm; for n = 2:Nsym delay(1,n) = delay(1,n-1) + Nppm*Tofdm; int_delay = fix(delay); fract_delay = delay - int_delay; end MaxDelay = fix(max(int_delay)); OutChan(1,end:end+MaxDelay) = 0; buff_delay = complex(zeros(1, 2*L), zeros(1, 2*L)); if flTimeShift == 1 for n = 1:Nsym buff_delay = circshift(buff_delay, [0 -(L+int_delay(1,n))]); buff_delay(1,L-int_delay(1,n)+1:end) = OutChan(1,(n-1)*L+1:n*L+int_delay(1,n)); re_buff_delay = sig_delay(real(buff_delay),1/Fs,fract_delay(1,n)/Fs); im_buff_delay = sig_delay(imag(buff_delay),1/Fs,fract_delay(1,n)/Fs); buff_delay = re_buff_delay + 1i*im_buff_delay; y_STO(1,(n-1)*L+1:n*L) = buff_delay(1,L+1:2*L); end else y_STO = OutChan; end if nSTOs>=0, y_STO=[y_STO(1,nSTOs+1:end) zeros(1,nSTOs)]; else y_STO=[zeros(1,-nSTOs) y_STO(1,1:end+nSTOs)]; end nn=0:length(y_STO)-1; y_CFO_STO = y_STO.*exp(1i*2*pi*CFO*nn/N_FFT); t = toc; fprintf('Осуществлен сдвиг времени и частоты сигнала...\n Время выполнения %4.2f секунд\n', t); %% buff = []; for k = 1:length(SNR) recvd_signal=awgn(y_CFO_STO, SNR(k), 'measured', 'dB'); for n = 1:Nsym %% Len_all=N_FFT; % recvd_signal_zeropad=[zeros(1,Len_all) recvd_signal(1,(n-1)*Nofdm+1:n*Nofdm) zeros(1,Len_all) zeros(1,Len_all)]; for d=1:length(recvd_signal_zeropad)-Len_all-1 P_Park(d)=sum(recvd_signal_zeropad(d+(1:N_FFT/2)).*fliplr(recvd_signal_zeropad(d+N_FFT/2+(1:N_FFT/2)))); %fliplr E_Park(d)=sum(abs(recvd_signal_zeropad(d+(1:N_FFT))).^2); Q_Park(d)=sum(conj(recvd_signal_zeropad(d+(1:N_FFT/2))).*fliplr(recvd_signal_zeropad(d+N_FFT/2+(1:N_FFT/2)))); end Park_metric=(abs(P_Park).^2)./(E_Park).^2; buff = [buff Park_metric]; plot(Park_metric/max(Park_metric)) [~, maxipos1]=max(Park_metric-N_GI); t_est_Park(1,n)=Nofdm - maxipos1; FreqOffset(1,n) = angle(Q_Park(maxipos1-N_GI))/pi; end mse_CFO(k) = sqrt(sum(abs(FreqOffset - CFO).^2)/Nsym) if flTimeShift == 1 mse_STO(k) = sqrt(sum(abs(diff(t_est_Park - nSTOs) - diff(int_delay(1,:))).^2)/Nsym) % else mse_STO(k) = sqrt(sum(abs(t_est_Park - nSTOs).^2)/Nsym) end end function sig_d = sig_delay(sig,T,dt) % Задержка сигнала по времени % sig - отсчеты сигнала %T - шаг дискретизации %dt - задержка по времени %sig_d - задержанный сигнал if dt==0 sig_d=sig; return end N=numel(sig); sig_d(1:N)=0; a=fix(dt/T); b=dt/T-a; x=-b; y0=0;y1=0;y2=0;y3=0; for m=1:N if m-a-2>0 y0=sig(m-a-2); end if m-a-1>0 y1=sig(m-a-1); end if m-a>0 y2=sig(m-a); end if (m-a+1>0)&&(m-a+1<=N) y3=sig(m-a+1); end a3=(y3-y0)/6+(y1-y2)/2; a1=(y3-y1)/2-a3; a2=y3-y2-a1-a3; a0=y2; sig_d(m)=((a3*x+a2)*x+a1)*x+a0; end end но чет у меня какие-то сомнения в адекватности модели
  15. Добрый день! Решил я поразбираться с синхрой по преамбуле(тренировочным символам) реализовал метод Парка, не знаю правильно или нет замоделил, подскажите если что не так. Хочу померить MSE оценок по данной преамбуле, как это можно правильно сделать? clear all; clc; close all; SNR=-5:10; N_FFT=1024; NGI=1/4; N_used=N_FFT/2; N_GI=round(NGI*N_FFT); Nofdm=N_FFT+N_GI; Nsym = 500; nSTOs=50; CFO=0.4; %% Формирование тренировочных символов B=2; reS=(-1).^round(rand(1,round(N_used/B))); imS=1i.*(-1).^round(rand(1,round(N_used/B))); s1=reS+imS; s2=fliplr(s1); tx_signal_noGI=[s1 s2 conj(s1) conj(s2)]; tx_signal = zeros(1,Nsym*N_FFT); tx_signal_GI=[tx_signal_noGI(1,N_FFT-N_GI+1:N_FFT) tx_signal_noGI]; tx_signal=repmat(tx_signal_GI,1,Nsym); %% Добавление смещения частоты и времени if nSTOs>=0, y_STO=[tx_signal(1,nSTOs+1:end) zeros(1,nSTOs)]; else y_STO=[zeros(1,-nSTOs) tx_signal(1,1:end+nSTOs)]; end nn=0:length(y_STO)-1; y_CFO_STO = y_STO.*exp(1i*2*pi*CFO*nn/N_FFT); %% buff = []; for k = 1:length(SNR) recvd_signal=awgn(y_CFO_STO, SNR(k), 'measured', 'dB'); for n = 1:Nsym %% Len_all=N_FFT; recvd_signal_zeropad=[zeros(1,Len_all) recvd_signal(1,(n-1)*Nofdm+1:n*Nofdm) zeros(1,Len_all) zeros(1,Len_all)]; for d=1:length(recvd_signal_zeropad)-Len_all-1 P_Park(d)=sum(recvd_signal_zeropad(d+(1:N_FFT/2)).*fliplr(recvd_signal_zeropad(d+N_FFT/2+(1:N_FFT/2)))); % E_Park(d)=sum(abs(recvd_signal_zeropad(d+(1:N_FFT))).^2); Q_Park(d)=sum(conj(recvd_signal_zeropad(d+(1:N_FFT/2))).*fliplr(recvd_signal_zeropad(d+N_FFT/2+(1:N_FFT/2)))); end Park_metric=(abs(P_Park).^2)./(E_Park).^2; buff = [buff Park_metric]; plot(Park_metric/max(Park_metric)) [~, maxipos1]=max(Park_metric-N_GI); t_est_Park(1,n)=Nofdm - maxipos1; FreqOffset(1,n) = angle(Q_Park(maxipos1-N_GI+1))/pi; end mse_CFO(k) = sqrt(sum(abs(FreqOffset - CFO).^2)/Nsym) mse_STO(k) = sqrt(sum(abs(t_est_Park - nSTOs).^2)/Nsym) end
  16. не пойму что где... берем среднеквадратичное значение входного сигнала и его подаем в АРУ?
  17. Спасибо! читал уже Не поможет, там все тоже самое
  18. Добрый всем день! У меня тоже вопрос по АРУ, реализовал с Лайонса вот этот АРУ Вопрос такой, как сделать АРУ чтоб он не выдавал всплеск который я выделил на картинке? Компрессор вам в помощь
  19. Знаю, в моем случае этого нет, если вы знаете как пилоты должны меняться по фазе в пределах символа то подскажите А для чего? да именно в этом ну или как сделать чтоб можно было эти пилоты закоррелировать? потому что без ЦП все хорошо, а с ним картина корреляции искажается из-за того что амплитуда пилотов поменялась и расположение пилотов не на тех позициях в которые я всятавлял
  20. Спектр берется по модулю, фаза тут не причем то что они не меняются это неважно, пилоты это просто сигнал который известен приемнику и передатчику А вы говорите про пилоты которые не отличаются по мощности от информационных, это немного другое, там ПСП применяют чтоб пилоты нельзя было найти и перехватить связь, поэтому там пилоты случайно меняются и не отличаются от сигнала
  21. Почему спектр сигнала с префиксом и без имеет такой спектр? хотел замоделить синхру по пилотам, вставил пилоты и заметил что при добавлении префикса их амплитуда падает, еще и их частота как то сдвигается, потому что когда я ищу пилоты то не попадаю на их позиции вот код: OFDM.rar без префикса с префиксом
  22. Добрый день! Скиньте у кого есть стандарт DAB/DAB+ где описаны параметры сигнала кодирование и все остальное, не могу чет найти
×
×
  • Создать...