شبیه سازی نرخ خطای بیت بلوتوث کم انرژی با AWGN در MATLAB
در این مقاله آموزشی شبکه مثال پیش رو نحوه اندازه گیری نرخ خطای بیت (BER) را برای حالت های مختلف بلوتوث کم انرژی (Bluetooth LE) با استفاده از شبیه سازی لایه فیزیکی انتها به انتها به کمک جعبه ابزار Bluetooth در نرم افزار MATLAB نشان می دهد. در این مثال، یک شبیه سازی انتها به انتها (E2E) برای تعیین عملکرد BER بلوتوث کم انرژی تحت یک کانال نویز سفید گوسی (AWGN) برای طیفی از مقادیر نسبت انرژی بیت به نویز (Eb/No) استفاده می شود. در هر نقطه Eb/No، چندین بسته بلوتوث LE از طریق یک کانال نویزی بدون هیچ گونه اختلال در قسمت پیشانه آراف (RF) منتقل می شود. با فرض همگام سازی کامل، یک گیرنده ایده آل برای بازیابی بیت های داده استفاده می شود. این بیت های داده بازیابی شده با بیت های داده ارسالی برای تعیین BER مقایسه می شوند. منحنی های BER برای چهار حالت توان انتقال PHY که در مشخصات بلوتوث LE پشتیبانی می شوند به شرح زیر هستند:
- لایه فیزیکی بدون کد با سرعت داده ۱ مگابیت بر ثانیه (LE1M)
- لایه فیزیکی بدون کد با سرعت داده ۲ مگابیت بر ثانیه (LE2M)
- لایه فیزیکی بدون کد با سرعت داده ۵۰۰ کیلوبیت بر ثانیه (LE500K)
- لایه فیزیکی بدون کد با سرعت داده ۱۲۵ کیلوبیت بر ثانیه (LE125K)
شکل زیر شبیه سازی برای هر بسته را خلاصه می کند.
مقدار دهی اولیه پارامترهای شبیه سازی
1 2 3 4 | EbNo = -2:2:8; % Eb/No range in dB sps = 4; % Samples per symbol dataLen = 2080; % Data length in bits simMode = {'LE1M','LE2M','LE500K','LE125K'}; |
تعداد بسته های تست شده در هر نقطه Eb/No توسط دو پارامتر کنترل می شود:
- پارامتر اول maxNumErrors است که حداکثر تعداد خطا های بیت شبیه سازی شده در هر نقطه Eb/No می باشد. هنگامی که تعداد خطا های بیت به این حد می رسد، شبیه سازی در این نقطه Eb/No کامل می شود.
- پارامتر دوم maxNumPackets حداکثر تعداد بسته های شبیه سازی شده در هر نقطه Eb/No می باشد و در صورت عدم رسیدن به حد خطای بیت، طول شبیه سازی را محدود می کند.
اعداد انتخاب شده برای maxNumErrors و maxNumPackets در این مثال منجر به یک شبیه سازی بسیار کوتاه می شود. برای به دست آوردن نتایج آماری معنی دار، توصیه می شود که این اعداد را افزایش دهید.
1 2 | maxNumErrors = 100; % Maximum number of bit errors at an Eb/No point maxNumPackets = 10; % Maximum number of packets at an Eb/No point |
شبیه سازی برای هر نقطه Eb/No
همچنین این مثال نشان می دهد که چگونه می توان از یک حلقه parfor به جای حلقه for در هنگام شبیه سازی هر نقطه Eb/No برای سرعت بخشیدن به یک شبیه سازی استفاده کرد. parfor به عنوان بخشی از جعبه ابزار محاسبات موازی (Parallel Computing Toolbox) ، پردازش را برای هر نقطه Eb/No به صورت موازی اجرا می کند تا کل زمان شبیه سازی را کاهش دهد. برای فعال کردن استفاده از تولباکس محاسبات موازی جهت افزایش سرعت، عبارت for را کامنت کنید و عبارت parfor را نیز از کامنت خارج کنید. اگر تولباکس پردازش موازی (Parallel Computing Toolbox) بر روی متلب شما نصب شده باشد، parfor به طور پیش فرض روی عبارت for نرمال خواهد بود.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | numMode = numel(simMode); % Number of modes ber = zeros(numMode,length(EbNo)); % Pre-allocate to store BER results for iMode = 1:numMode phyMode = simMode{iMode}; % Set signal to noise ratio (SNR) points based on mode % For Coded PHY's (LE500K and LE125K), the code rate factor is included % in SNR calculation as 1/2 rate FEC encoder is used. if any(strcmp(phyMode,{'LE1M','LE2M'})) snrVec = EbNo - 10*log10(sps); else codeRate = 1/2; snrVec = EbNo + 10*log10(codeRate) - 10*log10(sps); end % parfor iSnr = 1:length(snrVec) % Use 'parfor' to speed up the simulation for iSnr = 1:length(snrVec) % Use 'for' to debug the simulation % Set random substream index per iteration to ensure that each % iteration uses a repeatable set of random numbers stream = RandStream('combRecursive','Seed',0); stream.Substream = iSnr; RandStream.setGlobalStream(stream); % Create an instance of error rate errorRate = comm.ErrorRate('Samples','Custom','CustomSamples',1:(dataLen-1)); % Loop to simulate multiple packets numErrs = 0; numPkt = 1; % Index of packet transmitted while numErrs < maxNumErrors && numPkt < maxNumPackets % Generate Bluetooth LE waveform txBits = randi([0 1],dataLen,1,'int8'); % Data bits generation channelIndex = randi([0 39],1,1); % Random channel index value for each packet if channelIndex <=36 % Random access address for data channels % Ideally, this access address value should meet the requirements specified in % Section 2.1.2, Part-B, Vol-6 of Bluetooth specification. accessAddress = [1 0 0 0 1 1 1 0 1 1 0 0 1 ... 0 0 1 1 0 1 1 1 1 1 0 1 1 0 1 0 1 1 0]'; else % Default access address for periodic advertising channels accessAddress = [0 1 1 0 1 0 1 1 0 1 1 1 1 1 0 1 1 0 0 ... 1 0 0 0 1 0 1 1 1 0 0 0 1]'; end txWaveform = bleWaveformGenerator(txBits,'Mode',phyMode,... 'SamplesPerSymbol',sps,... 'ChannelIndex',channelIndex,... 'AccessAddress',accessAddress); % Pass the transmitted waveform through AWGN channel rxWaveform = awgn(txWaveform,snrVec(iSnr)); % Recover data bits using ideal receiver rxBits = bleIdealReceiver(rxWaveform,'Mode',phyMode,... 'SamplesPerSymbol',sps,... 'ChannelIndex',channelIndex); % Determine the BER errors = errorRate(txBits,rxBits); ber(iMode,iSnr) = errors(1); numErrs = errors(2); numPkt = numPkt + 1; end disp(['Mode ' phyMode ', '... 'Simulating for Eb/No = ', num2str(EbNo(iSnr)), ' dB' ', '... 'BER:',num2str(ber(iMode,iSnr))]) end end |
رسم نمودار نتیجه مقایسه BER در مقابل Eb/No
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | markers = 'ox*s'; color = 'bmcr'; dataStr = {zeros(numMode,1)}; figure; for iMode = 1:numMode semilogy(EbNo,ber(iMode,:).',['-' markers(iMode) color(iMode)]); hold on; dataStr(iMode) = simMode(iMode); end grid on; xlabel('Eb/No (dB)'); ylabel('BER'); legend(dataStr); title('BER for Bluetooth LE with AWGN channel'); |
کاوش بیشتر
تعداد بسته های تست شده در هر نقطه Eb/No توسط پارامترهای maxNumErrors و maxNumPackets کنترل می شود. برای رسیدن به نتایج معنی دار آماری، این مقادیر باید بزرگتر از مقادیر ارائه شده در این مثال باشند. شکل زیر با اجرای مثال برای مدت طولانی تر با maxNumErrors = 1e3، maxNumPackets = 1e4، برای هر چهار حالت ایجاد شده است.
نتیجه گیری
این مثال ارتباط لایه فیزیکی بلوتوث را در یک کانال AWGN شبیه سازی می کند. این نشان می دهد که چگونه می توان شکل های موج بلوتوث کم انرژی را ایجاد کرد، بیت ها را با استفاده از یک گیرنده ایده آل بازیابی و رمزگشایی کرد و BER را نیز محاسبه کرد.
1 | openExample('bluetooth/BLEBitErrorRateExample') |
منبع: mathworks
هیچ نظری ثبت نشده است