OFDM kod anlatım ve Odev

Transkript

OFDM kod anlatım ve Odev
 OFDM Yukarıdaki yapıda görüldüğü gibi kanalımız 3 yoldan oluşmaktadır. h=[ h(1) h(2) h(3) ] şeklinde 3 noktalı kanalımız elde edilir. Yani gönderilen sinyal birinci yolla alıcıda elde edilirken h(1) ile çarpılır aynı sinyalin 2. yolla belli bir gecikmeyle elde edilen sinyal h(2) ile çarpılır son olarak aynı sinyalin 3 yolu izleyerek gecikmiş halı elde edilip h(3) ile çarpılıp bu 3 sinyal toplanarak alıcıda gönderilen sinyalin kanaldan geçirilmiş hali elde edilir. Alıcıda elde edilen sinyali farklı biçimlerde elde edebiliriz; Gönderilen sinyal x=[ x(1) x(2) x(3) …… x(N) ] olsun yol1=h(1)*[ x 0 0] yol2=h(2)*[ 0 x 0] R1=yol1+yol2+yol3 şeklinde alıcıda elde edilen sinyal bulunur. yol3=h(3)*[ 0 0 x] R2=conv(x,h) biçiminde de alıcıdaki sinyal elde edilir ya da; R3=filter(h,1,[ x 0 0]) şeklinde de bulunabilir. R1=R2=R3 sonucunu elde ederiz. Lineer Konvolusyon‐Dairesel Konvolusyon Bilindiği gibi zaman boyutundaki iki sinyalin konvolusyonu , sinyallerin Fourier dönüşümü sonrası frekans boyutundaki çarpımlarıyla ilişkilidir. Bu ilişki benzer bir şekilde DFT için de geçerlidir, ancak bu sefer dairesel konvolüsyon kullanılır. Frekans boyutundaki çarpma şöyle ifade edilebilir: Bir iletişim sisteminde veri bitleri x[n]’lerin doğrudan kanal h[n]’e verilmeleri doğrusal konvolusyon neden olur ve DFT’nin frekans boyutundaki çarpma işlemini bozar. x[n‐k] periyodik veya döngüsel hale dönüştürülmelidir. Bu amaçla veri paketinin başına döngüsel önek(cyclic prefix) eklenir. Burada yapmak istediğimiz lineer konvolüsyondan yararlanarak dairesel konvolüsyona geçmek bunu yapabilmek için ise aşağıdaki yapıyı kullanırız. Kanalın uzunluğu μ ise, bu önek şöyle gösterilebilir: Bu önek işlemi konvolüsyonun dairesel olmasını sağlar, kanal çıkışı ; y[n] , 0≤ n≤N‐1 Matlab kodu: clc ,close all,clear all h=[2 .5 .1]; x=[1 1 ‐1 1 1 ‐1 ‐1 1]; x1=[x(8) x(7) x(6) x]; R=conv(x1,h); R1=R(1:15) R1=R(4:end) R2=cconv(x,h,8) R3=ifft(fft(h,8).*fft(x)) R4=filter(h,1,x1) Burada R1=R2=R3=R4 çıkmaktadır. Kanal çıkışının DFT’sini almak sonucunu doğurur ki, alınan sinyal y[n]’den gönderilen sembol dizisi x[n] şu şekilde bulunur: Buradan gönderilen sembollerin herhangi bir girişime uğramadan alıcıda tekrar çözülebileceği görülür. Gerçekte alınan sinyal y[n]’de semboller arası girişim, bloklar arası girişim olarak meydana çıkmakta, ancak döngüsel önek bu girişimi soğurmaktadır. Doğal olarak önek eklenmesi iletişim hızını etkilemektedir. Bir paket için N+m sembol süresi harcanmakta ancak N sembol gönderilmektedir. Dolayısıyla iletişim verimliliği h=N/(M+m) ile verilmektedir. Ofdm sistemi için bir örnek; clc close all clear all h=[2 .5 .1]; kanalımız x=[1 1 ‐1 1 1 ‐1 ‐1 1] gönderilen işaret y1=ifft(x); alt taşıyıcı oluşturma hl=3; kanalımızın uzunluğu y1g=[y1((end‐hl+1):end),y1]; cyclic prefix ekleme rofdm=filter(h,1,y1g); filtreleme işlemi rofdm2=rofdm((hl+1):end); cyclic prefix kaldırma x_est=(fft(rofdm2)./fft(h,8)) kestirilen işaretimizi OFDM SİMÜLASYONU: OFDM (Dik frekans bölmeli çoğullama)’de QAM modülasyonu ve DFT‐IDFT işlemleri için FFT‐
IFFT çifti kullanarak aşağıdaki yapının simülasyonunu yapalım. MATLAB KODU: M=16; x=randint(1280,1,M); x’in aldığı değerler aşağıdaki şekildeki değerlerle map edilir. y_m=modulate(modem.qammod(M),x); burada matlabta bulunan hazır fonksiyonu kullanarak modülasyon yapılmaktadır. y_p=reshape(y_m,128,10); burada sinyali 10’lu bloklar halinde 128 altband taşıyıcı ile göndermek istiyoruz bu yüzden matris boyutuna geçtik. y_ifft=ifft(y_p); altband taşıyıcıları elde etmek için ters fft aldık. y=[y_ifft(125:128,:);y_ifft]; cyclic prefix ekleme işlemi yapılır. Matrisimizin son 4 sütunu(cyclic prefix) alınarak başa eklendi. y=reshape(y,1320,1); cyclic prefix eklenmiş sinyalimiz kanaldan geçecek h=rayleighchan(1/10000,0,[0 .5/100],[0,‐10]); kanalımızı oluşturduk.Bu kanalı 2 yollu bir kanal olarak seçtik 1. yoldan gelen sinyal 0dB ve 2. yolla gelen sinyal ‐10dB lik bir kayba uğrayarak alıcıya ulaşır. y_h=filter(h,y); kanalımızın parametrelerini kullanarak sinyalimizi kanaldan geçirdik. ynoisy=awgn(y_h,15,'measured'); SRD değeri 15dB olan gürültüyü ekledik. ynoisy_p=reshape(ynoisy,132,10); burada daha önceden eklediğimiz cyclic prefix sinyallerini cıkarmak istiyoruz. ynoisy_p(1:4,:)=[ ]; burada ise matrisin ilk 4 satiri yok ediliyor boylelikle cyclic prefix sinyalini elemiş oluyoruz y_fft=fft(ynoisy_p); gürültülü işaretimizin fft’sini aldık. Böylelikle elimizde ofdm’li sinyali elde etmiş oluyoruz. Şimdi ise kanalımızı kestirmeye çalışalım. Alıcı gelen ilk ofdm li sinyali (pilot bitler) önceden biliyor kabul ediyoruz. Alıcıda gelen ilk sinyalin fft ‘sini alarak önceden bildiği sinyalin fft ‘sine bölüp kanalı elde eder. H=y_fft(:,1)./y_p(:,1); kanalımız y_eq=y_fft./repmat(H,1,10); alıcıya gelen her ofdm’li blok kanala bölünerek sinyalimizi elde ederiz. y_eq_est=reshape(y_eq,1280,1); elde ettiğimiz sinyalin hata olasılığını bulmak için vektörel boyuta getirdik. z=demodulate(modem.qamdemod(M),y_eq_est); hazır fonksiyon ile demodulasyon işlemini yapıyoruz. [num,rt]=biterr(x,z); hatlı bit sayısı(num) ve hata oranını buluyoruz(rt). Genel olarak yaptığımız işlemler aşağıda şekilde ki gibidir. RF TX D/A kodlama karıştırıcı QAM Pilot ekleme Seri/Paralel
Paralel/Seri Cyclic prefix ekleme ve Pencereleme
Seri/Paralel Cyclic prefix ekleri çıkarma IFFT (TX)
Kod çözme düzenleyici QAM Pilot çıkarma Paralel/Seri FFT(RX) RF RX A/D Zamanlama ve frekans senkroniz. SORU : Daha önce bpsk ve qpsk’in reyleigh kanal için başarımlarını elde etmiştik.
Şimdi ise bpsk ve qpsk ‘nin OFDM sistemlerdeki başarımlarını elde ederek
önceden elde ettiğimiz başarımlarla kıyaslayınız. Frekansı düzeltilmiş sinyal