📄 test.asv
字号:
% OFDM system simulation
clear all;
clc;
% initialize the parametres********************************************
Bit_Num=4; %每个符号比特数
IFFT_Num=256; %采样点数
Carrier_Num=150; %子载波数
OFDM_per_Symbol=30; %每帧OFDM信号含有的OFDM信号的个数
GI=20; %保护间隔长度
Carriers=1:Carrier_Num;
N_Num=Bit_Num*Carrier_Num*OFDM_per_Symbol;
% Change the sound file to binary stream for transmit test***************
file_name='short.wav';
data_samples=wavread(file_name,2250);
figure(1);plot(data_samples);
%-1:1数据转化为0-255方便用8bit来表示
data_samples_resized = round(128*data_samples +127);
length(data_samples_resized);
data_in = zeros(1,8*length(data_samples_resized));
for i = 1:length(data_samples_resized)
data_in(1 + (i-1)*8:(i-1)*8 + 8) = eight2bin(data_samples_resized(i));
end
BitTx=zeros(1,N_Num);
BitTx=data_in;
% Modulate (generates 16QAM symbols)***********************************
SymQAM=tx_16QAM_mod(BitTx);
figure(2);plot(1:length(SymQAM),abs(SymQAM(1:length(SymQAM))));
figure(3);plot(SymQAM,'bx');axis([-5 5 -5 5]);
% P/S transform*********************************************************
SymQAM1=reshape(SymQAM,Carrier_Num,OFDM_per_Symbol).';
SymQAM3=SymQAM1.';
% IFFT transform********************************************************
SymIFFT=ifft(SymQAM3,IFFT_Num,1);
%加保护间隔(循环前缀)
SymTxtmp=zeros(IFFT_Num+GI,OFDM_per_Symbol);
SymTxtmp(1:GI,:)=SymIFFT(IFFT_Num-GI+1:IFFT_Num,:);
SymTxtmp(GI+1:GI+IFFT_Num,:)=SymIFFT;
SymTx=reshape(SymTxtmp,1,(IFFT_Num+GI)*OFDM_per_Symbol);
% ideal Channel**********************************************************
%SymTxChannel=SymTx;
d=[0 0 0]; % 信道延迟
channel1=zeros(size(SymTx));
channel1(1+d(1):length(SymTx))=SymTx(1:length(SymTx)-d(1));
channel2=zeros(size(SymTx));
channel2(1+d(2):length(SymTx))=SymTx(1:length(SymTx)-d(2));
channel3=zeros(size(SymTx));
channel3(1+d(3):length(SymTx))=SymTx(1:length(SymTx)-d(3));
SymTxChannel=SymTx+channel1+channel2+channel3;
figure(4);plot(1:length(SymTx),10*log10(abs(SymTxChannel))/IFFT_Num);
% FFT transform**********************************************************
%去保护间隔
SymRxtmp=reshape(SymTxChannel,IFFT_Num+GI,OFDM_per_Symbol);
SymRx=SymRxtmp(GI+1:GI+IFFT_Num,:);
SymFFT=fft(SymRx,IFFT_Num,1);
SymFFT=SymFFT(1:Carrier_Num,:);
figure(5);plot(SymFFT,'x');%axis([-5 5 -5 5]);
% Demodulate ***********************************************************
SymDeQAM=rx_16QAM_mod(SymFFT,OFDM_per_Symbol,Carrier_Num,Bit_Num);
output_samples_big = zeros(1,floor(length(SymDeQAM)/8)); %extra zeros are not original data
for i = 1:length(output_samples_big)
output_samples_big(i) = bin2eight(SymDeQAM(1 + (i-1)*8:(i-1)*8 + 8));
end
figure(1);plot(data_samples);
%convert dynamic range from 0:255 to -1:1
output_samples = (output_samples_big-127)/128;
%sound file output
wavwrite(output_samples, 11025, 8, 'short_out.wav');
disp('Original sound :'), pause
sound(data_samples,11025)
disp('After OFDM transmission :'), pause
sound(output_samples,11025)
%figure(111111);plot(SymTx,'x');axis([-5 5 -5 5]);hold on;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -