qpsk频谱图matlab,QPSK调制得出的调制信号频谱波形多了一个点频信号
clc;
clear all;
%假定接收端已經實現載波同步,位同步(盲信號解調重點要解決的問題:載波同步(costas環(未見到相關代碼)),位同步(Gardner算法(未見相關代碼)),幀同步)
%carrier frequency??for modulation and demodulation
fc=2.5e6;
f_code=2.4e6;
fs=24e6;
%QPSK transmitter
data=2500??;? ?? ?? ?? ?? ? %原碼個數
rand_data=round(rand(1,2500));? ? %產生5000個隨機數 均值為0??方差為1
%seriel to parallel? ?? ???%同時單極性碼轉為雙極性碼
for??i=1:data
if rem(i,2)==1? ? %如果i是奇數
if??rand_data(i)==1? ?%如果第i個數據為1
I(i)=1;
I(i+1)=1;
else
I(i)=-1;
I(i+1)=-1;
end
else
if rand_data(i)==1
Q(i-1)=1;
Q(i)=1;
else
Q(i-1)=-1;
Q(i)=-1;
end
end
end
%zero insertion? ?,此過程稱為成形。成形的意思就是實現由消息到波形的轉換,以便發射,脈沖成形應該是在基帶調制之后。
zero=fs/f_code;? ?? ?? ?%明白了,zero為過采樣率。它等于 采樣率fs/碼速率。采樣率為24MHZ
for??i=1:zero*data? ???% 采樣點數目=過采樣率*原碼數目
if rem(i,zero)==1
Izero(i)=I(fix((i-1)/zero)+1);
Qzero(i)=Q(fix((i-1)/zero)+1);
else
Izero(i)=0;
Qzero(i)=0;
end
end
%pulse shape filter, 接著,將進行低通濾波,因為 隨著傳輸速率的增大,基帶脈沖的頻譜將變寬
%如果不濾波(如升余弦濾波)進行低通濾波,后面加載頻的時候可能會出現困難。
%平方根升余弦濾波器
%psf=rcosfir(rf,n_t,rate,fs,'sqrt')? ?%rate:過采樣率,rf:滾降因子,n_t:濾波器階數,fs:采樣率
%用在調制或發送之前,用在解調或接受之后,用來降低過采樣符號流帶寬并不引發ISI(碼間串擾)
NT=25;
N=2*zero*NT;? ? % =500
rf=0.25;
psf=rcosfir(rf,NT,zero,fs,'sqrt');% psf大小為500
Ipulse=conv(Izero,psf);
Qpulse=conv(Qzero,psf);
% 為什么數字信號傳輸也要過采樣,成形濾波?
% 答:過采樣的數字信號處理起來對低通濾波器的要求相對較低,如果不過采樣,濾波的時候濾波器需要很陡峭,指標會很嚴格
% 成形濾波的作用是保證采樣點不失真。如果沒有它,那信號在經過帶限信道后,眼圖張不開,ISI非常嚴重。成形濾波的位置在基帶調制之后。
% 因為經成形濾波后,信號的信息已經有所損失,這也是為避免ISI付出的代價。換句話說,成形濾波的位置在載波調制之前,僅挨著載波調制。
% 即:(發送端)插值(采樣)-成形-濾波(LPF)-加載頻(載波調制)-加噪聲至(接收端)乘本振-低通-定時抽取-判決。
%modulation
for i=1:zero*data+N? ?%采樣點數目改變 (因為卷積的緣故)
t(i)=(i-1)/(fs);??%這里因為假設載頻與碼速率大小相等,所以用載頻fc乘以過采樣率=采樣率。
Imod(i)=Ipulse(i)*sqrt(2)*cos(2*pi*fc*t(i));
Qmod(i)=Qpulse(i)*(-sqrt(2)*sin(2*pi*fc*t(i)));
end
sum=(Imod+Qmod);
figure(1)
SUM=abs(fftshift(fft(sum)))
f=linspace(-fs/2,fs/2,length(sum))
plot(f,10*log(SUM/max(SUM)))? ?? ?? ?? ?? ???%產生QPSK信號
sum4=sum.^4;? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?%進行4次方并計算頻譜
SUM4=abs(fftshift(fft(sum4)))
figure(2)
plot(f,10*log(SUM4/max(SUM4)))
總結
以上是生活随笔為你收集整理的qpsk频谱图matlab,QPSK调制得出的调制信号频谱波形多了一个点频信号的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (JAVA)超大整数运算
- 下一篇: break在matlab中的用法,求助这