久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4111|回復: 1
打印 上一主題 下一主題
收起左側

OFDM不同信噪比下的誤碼率matlab源碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:346524 發表于 2018-6-6 22:18 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
clear;
clc;
s = rng(211);            % 設置RNG狀態的可重復性
numFFT = 1024;           % FFT點的數量
numRBs = 50;             % 資源塊的數量
rbSize = 12;             % 每個資源塊的副載波數量
cpLen = 72;              % 樣本中的循環前綴長度

bitsPerSubCarrier = 6;   % 2: QPSK, 4: 16QAM, 6: 64QAM, 8: 256QAM
snrdB =30;              % 以dB為單位的SNR

toneOffset = 2.5;        % 音調偏移或超額帶寬(在副載波中)
L = 513;                 % 濾波器長度(=濾波器次序+ 1),奇數
numDataCarriers = numRBs*rbSize;    % 子帶中數據子載波的數量
halfFilt = floor(L/2);
n = -halfFilt:halfFilt;

% Sinc函數原型濾波器
pb = sinc((numDataCarriers+2*toneOffset).*n./numFFT);

% Sinc截斷窗口
w = (0.5*(1+cos(2*pi.*n/(L-1)))).^0.6;

% 歸一化的低通濾波器系數
fnum = (pb.*w)/sum(pb.*w);

% 過濾脈沖響應
h = fvtool(fnum, 'Analysis', 'impulse', ...
    'NormalizedFrequency', 'off', 'Fs', 15.36e6);
h.CurrentAxes.XLabel.String = 'Time (\mus)';
h.FigureToolbar = 'off';

% 使用dsp過濾器對象進行過濾
filtTx = dsp.FIRFilter('Structure', 'Direct form symmetric', ...
    'Numerator', fnum);
filtRx = clone(filtTx); % Rx的匹配過濾器

% QAM符號映射器
qamMapper = comm.RectangularQAMModulator( ...
    'ModulationOrder', 2^bitsPerSubCarrier, 'BitInput', true, ...
    'NormalizationMethod', 'Average power');

% 為譜圖設置一個數字
hFig = figure('Position', figposition([46 50 30 30]), 'MenuBar', 'none');
axis([-0.5 0.5 -200 -20]);
hold on;
grid on
xlabel('Normalized frequency');
ylabel('PSD (dBW/Hz)')
title(['F-OFDM, ' num2str(numRBs) ' Resource blocks, '  ...
    num2str(rbSize) ' Subcarriers each'])

% 生成數據符號
bitsIn = randi([0 1], bitsPerSubCarrier*numDataCarriers, 1);
symbolsIn = qamMapper(bitsIn);

% 將數據打包成OFDM符號
offset = (numFFT-numDataCarriers)/2; % 為通帶中心
symbolsInOFDM = [zeros(offset,1); symbolsIn; ...
                 zeros(numFFT-offset-numDataCarriers,1)];
ifftOut = ifft(ifftshift(symbolsInOFDM));

%預先加上循環前綴
txSigOFDM = [ifftOut(end-cpLen+1:end); ifftOut];

% 使用零填充過濾器來刷新尾部。 獲取發射信號
txSigFOFDM = filtTx([txSigOFDM; zeros(L-1,1)]);

%繪制功率譜密度(PSD)
[psd,f] = periodogram(txSigFOFDM, rectwin(length(txSigFOFDM)), ...
                      numFFT*2, 1, 'centered');
plot(f,10*log10(psd));

% 計算峰均功率比(PAPR)
PAPR = comm.CCDF('PAPROutputPort', true, 'PowerUnits', 'dBW');
[~,~,paprFOFDM] = PAPR(txSigFOFDM);
disp(['Peak-to-Average-Power-Ratio for F-OFDM = ' num2str(paprFOFDM) ' dB']);

% 繪制OFDM信號的功率譜密度(PSD)
[psd,f] = periodogram(txSigOFDM, rectwin(length(txSigOFDM)), numFFT*2, ...
                      1, 'centered');
hFig1 = figure('Position', figposition([46 15 30 30]));
plot(f,10*log10(psd));
grid on
axis([-0.5 0.5 -200 -20]);
xlabel('Normalized frequency');
ylabel('PSD (dBW/Hz)')
title(['OFDM, ' num2str(numRBs*rbSize) ' Subcarriers'])

%計算峰均功率比(PAPR)
PAPR2 = comm.CCDF('PAPROutputPort', true, 'PowerUnits', 'dBW');
[~,~,paprOFDM] = PAPR2(txSigOFDM);
disp(['Peak-to-Average-Power-Ratio for OFDM = ' num2str(paprOFDM) ' dB']);

%添加AWGN和Rayleigh
chan = rayleighchan(0.00001,100);
rxSig = filter(chan,txSigFOFDM);
rxtSig = awgn(rxSig, snrdB, 'measured');



% 接收匹配的過濾器,
rxSigFilt = filtRx(rxtSig);

% 考慮過濾器延遲
rxSigFiltSync = rxSigFilt(L:end);

% 刪除循環前綴
rxSymbol = rxSigFiltSync(cpLen+1:end);

%執行FFT
RxSymbols = fftshift(fft(rxSymbol));

%選擇數據副載波
dataRxSymbols = RxSymbols(offset+(1:numDataCarriers));

% 繪制接收符號星座圖
switch bitsPerSubCarrier
    case 2  % QPSK
        refConst = qammod((0:3).', 4, 'UnitAveragePower', true);
    case 4  % 16QAM
        refConst = qammod((0:15).', 16,'UnitAveragePower', true);
    case 6  % 64QAM
        refConst = qammod((0:63).', 64,'UnitAveragePower', true);
    case 8  % 256QAM
        refConst = qammod((0:255).', 256,'UnitAveragePower', true);
end
constDiagRx = comm.ConstellationDiagram( ...
    'ShowReferenceConstellation', true, ...
    'ReferenceConstellation', refConst, ...
    'Position', figposition([20 15 30 40]), ...
    'MeasurementInterval', length(dataRxSymbols), ...
    'Title', 'F-OFDM Demodulated Symbols', ...
    'Name', 'F-OFDM Reception', ...
    'XLimits', [-1.5 1.5], 'YLimits', [-1.5 1.5]);
constDiagRx(dataRxSymbols);

% 由于沒有通道建模,因此通道均衡不是必要的

%解映射和BER計算
qamDemod = comm.RectangularQAMDemodulator('ModulationOrder', ...
    2^bitsPerSubCarrier, 'BitOutput', true, ...
    'NormalizationMethod', 'Average power');

BER = comm.ErrorRate;

% 執行艱難的決策并測量錯誤
rxBits = qamDemod(dataRxSymbols);
ber = BER(bitsIn, rxBits);

disp(['F-OFDM Reception, BER = ' num2str(ber(1)) ' at SNR = ' ...
    num2str(snrdB) ' dB']);

%恢復RNG狀態
rng(s);


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:395916 發表于 2018-9-10 10:40 | 只看該作者
這段代碼,我正在看,不知你有什么理解,可以溝通一下。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线视频 中文字幕 | 一级看片免费视频囗交动图 | 国产精品毛片无码 | 亚洲国产一区视频 | 国产精品一区二区三区久久久 | 日韩成人免费av | 综合久久综合久久 | 日本三级电影免费 | 亚洲精品色 | 毛片在线视频 | 日韩小视频| 欧美日韩综合 | 在线国产视频观看 | 91精品国产乱码久久久久久久久 | 日韩中文字幕 | 日本欧美国产在线观看 | 精品视频一区二区 | 男女下面一进一出网站 | 欧美成人性生活 | 国产亚洲欧美日韩精品一区二区三区 | 日本久久一区二区三区 | 亚洲精品一区二三区不卡 | 日本理论片好看理论片 | 日韩精品久久一区二区三区 | 日韩欧美在 | 国产精品久久久久久婷婷天堂 | 美国a级毛片免费视频 | 中文字幕亚洲一区二区三区 | 欧美福利 | 午夜视频免费在线观看 | a在线免费观看 | 国产一区二区 | 国产精品国产三级国产a | 日本成人一区二区 | 国产乱码精品一区二区三区中文 | 国产在线视频一区 | 国产日韩欧美在线 | 国产中文一区二区三区 | 99精品一区 | 日本粉嫩一区二区三区视频 | 日韩国产免费观看 |