<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.7.2" -->
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <atom:link href="http://ujjvalshah.synthasite.com/blog/category/blog.rss" rel="self" type="application/rss+xml" />
        <title>blog</title>
        <description>blog</description>
        <link>http://ujjvalshah.synthasite.com/blog/category/blog.php</link>
        <lastBuildDate>Sat, 06 Jun 2026 03:28:01 +0100</lastBuildDate>
        <generator>FeedCreator 1.7.2</generator>
        <item>
            <title>Solutions / Workarounds / Tweaks</title>
            <link>http://ujjvalshah.synthasite.com/blog/category/blog/solutions-workarounds-tweaks</link>
            <description>&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;text-decoration: underline;&quot;&gt;Solutions&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;The solutions provided here mainly discuss how to decrease the processing time. It also addresses some of the issues listed in the previous section.&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;text-decoration: underline;&quot;&gt;&lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;text-decoration: underline;&quot;&gt;Reentrant VIs&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;LabVIEW is a data flow programming tool. It can execute data independent codes in parallel if programmed in such a way. In the simulation there are several instances where a same chunk of code is repeated a number of times. This code is defined as a VI and is called every time the main code wants to utilize it. However by default, VIs are not reentrant and the execution system will not run multiple calls to the same subVI simultaneously. If it is tried to call a subVI that is not reentrant from more than one place, one call runs and the other call waits for the first to finish before running. In reentrant execution, calls to multiple instances of a subVI can execute in parallel with distinct and separate data storage. If the subVI is reentrant, the second call can start before the first call finishes running. In a reentrant VI, each instance of the call maintains its own state of information. Then, the execution system runs the same subVI simultaneously from multiple places. Thus this reduces the processing time as the simulation can execute several parts of codes in parallel rather than waiting for one part to finish before starting the second part. Some of the VI which are reentrant in the simulation model are symbol manipulation VI, symbol demanipulation VI, Jakes fading VI, etcetera.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;text-decoration: underline;&quot;&gt;Using same symbols and path gains&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt; (for all iterations and SNR)&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;As discussed in 5.1.1 the simulation model runs multiple times for a single SNR value to find out the average BER. This is time consuming. Moreover during each of the iterations, the symbols and the fading channel changes but the overall effect remains the same as the system parameters don’t change after each iteration as well as the SNR value. Thus it is possible to use the symbols and fading channel path gains generated for a particular SNR for all other SNR values. This saves a lot of processing time otherwise used up in generating the symbols and fading profile. This tweak doesn’t have a detrimental effect on the results; the improvement in processing time is up to 4000%.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;text-decoration: underline;&quot;&gt;  Using file read write&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;The solution provided above works very well but still it takes up time in creating the symbols and fading profile for the first iteration. There is a possibility that the same simulation can be carried out later. So it will help the processing time if during a new execution of the model, the symbols and fading profile generated earlier can be used. Thus file functionality was added to the simulation model. If ‘Read from previously created data’ is selected, it reads the symbols and path gain information from a previously stored file. If ‘Create new data’ is selected, it generates fresh new data and overwrites the old file.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;text-decoration: underline;&quot;&gt; Storing Complex numbers&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;As discussed in section 5.1.4 LabVIEW doesn’t support writing complex numbers directly to a spreadsheet file. So the problem was solved by breaking the real and imaginary part of the complex number and storing them in adjacent columns of the spreadsheet file as double data types. The file is read accordingly.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;text-decoration: underline;&quot;&gt;Timed Loop&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;previous post described Hardware’s limitations. As discussed it calls for a measure to explicitly assign data independent VIs to separate processing cores. Timed Loop addresses this problem. It has the capacity to explicitly assign separate VIs to the separate cores. Figure 5.1 shows a screenshot of Timed Loop function. The node encircled in red is of prime importance as far as explicit assignment of cores is concerned. &lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;The value of that node specifies the processor one wants to handle execution. The default is -1, which means LabVIEW automatically assigns a processor. To manually assign a processor, a number between 0 and 255 is entered, where 0 represents the first available processor. If a number that exceeds the number of available processors is entered, a run-time error is generated and the timed structure does not execute. Parallel assignments are done by placing two instances of a VI in two timed loops each assigned a separate processor. The timed loop can help only if the VIs are independent from each other. Thus to make this possible not all the SNR values are calculated in a single VI. The first timed loop assigned to core 0 does the BER calculations for odd SNR values and the second timed loop assigned to core 1 does the BER calculations for even SNR values. It can be other way round too. Thus this cuts down the processing time to half.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;</description>
            <pubDate>Wed, 22 Apr 2009 16:47:59 +0100</pubDate>
        </item>
        <item>
            <title>Simulation Problems and Challenges - A summary</title>
            <link>http://ujjvalshah.synthasite.com/blog/category/blog/simulation-problems-and-challenges-a-summary</link>
            <description>&lt;h3&gt;&lt;a name=&quot;_Toc228167787&quot;&gt;&lt;span style=&quot;color:windowtext&quot;&gt;Large processing
time&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color:windowtext&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h3&gt;

&lt;p class=&quot;MsoNormal&quot;&gt;&lt;o:p&gt;The simulation model aims in finding the BER value for
various SNR values and plots them on a chart. The processes involving in
finding a BER value for a single SNR value are random generation of a large
number of symbols, modulation of these symbols using one of the modulation
schemes such as PSK, MIMO- STC scheme encoding, generating and applying a
Rayleigh flat fading profile to it, generating and adding AWGN to it, decoding,
demodulation and BER calculation. Each of these processes manipulates and handles
the large number of symbols generated. The processing time involved is directly
related to the number of symbols. All the simulation results discussed in this
report have been generated by using 10,000 symbols. For generating accurate and
faithful results to the real world environment the Fading and AWGN channels are
programmed to change randomly; thus each time the model runs different BER
value is obtained to. Hence to obtain an average BER value the model repeats
the procedure a number of times and then takes the average of all the BER
values. Thus the processing time increases directly by the number of times the
user defines the ‘# of iterations per SNR’ control.&lt;/o:p&gt;&lt;/p&gt;

&lt;p class=&quot;MsoNormal&quot;&gt;In addition to the above reason, the processing time also
increases as the MIMO-STC coding scheme becomes more and more complex. For
example, the Spatial Multiplexing scheme requires the most processing time for
BER calculations. This is due to the fact that at the receiver it checks for
which value the maximum likelihood function is minimum by permuting all the
possible combinations. Thus in this case the modulation scheme determines a
part processing time. Also, the number of permutations increases by a large
number each time a communication channel is added, i.e. the number of
transmitter or receiver antennas increases. Thus this again increases the
processing time in an exponential manner.&lt;/p&gt;

&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 15px; font-weight: bold; line-height: 18px; &quot;&gt;&lt;a name=&quot;_Ref228064826&quot;&gt;&lt;span style=&quot;mso-bookmark:
_Toc228167788&quot;&gt;&lt;span style=&quot;color:windowtext&quot;&gt;Hardware’s
Limitation&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;br&gt;&lt;/p&gt;

&lt;p class=&quot;MsoNormal&quot;&gt;&lt;o:p&gt; The processor used for simulating the model is Intel’s
Pentium D. The CPU comprises two dies, each containing a single core residing
next to each other on a multi-chip module package. Despite having two dies, the
LabVIEW software was not able to take advantage of it. The reason for this is
due to the processors architecture. Pentium D has two processing cores, however
a single application can never utilize the both the cores simultaneously. The
other core comes to life only if one core is completely utilized by some other
process. Hence by default LabVIEW doesn't create threads for two processors; it
creates only for one (which has been observed and confirmed from Task Manager).
So unless it is manually configured both the cores are not used. This manual
configuration of the processors to work independently is shown in the next
section by using the Timed Loop feature of LabVIEW. However this thing is
possible only if two data independent VIs are created and assigned to each of
the cores. It doesn’t solve problem for a single VI. Had it been a core to duo
processor where an application is allowed to access both the cores, LabVIEW
would automatically create threads for both the cores. But as mentioned in
Pentium D LabVIEW is not aware of the second core by default, so it doesn’t
create threads for the second core. Manual creation and management of two sets
of threads for each core such that each set can be independently executed is
beyond the scope of this project&lt;/o:p&gt;&lt;/p&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 15px; font-weight: bold; line-height: 18px; &quot;&gt;&lt;a name=&quot;_Toc228167789&quot; style=&quot;color: blue !important; text-decoration: underline !important; cursor: text !important; &quot;&gt;&lt;span style=&quot;color: windowtext; &quot;&gt;Maximum BER resolution - a limit on number of symbols&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;br&gt;

&lt;p class=&quot;MsoNormal&quot;&gt;BER is the value of ratio of number of bits erroneously
received and the total number of bits received. A typical BER vs. SNR curve
shows a logarithmic BER range from 1E0 to 1E-6. Thus the minimum BER resolution
that the chart needs to successfully display the desired results is 1E-6. This
implies that such resolution can be obtained only if the receiver finds only 1
bit error in 1 million bits. However this is never the case practically and
generally the error bits are much more than 1. Hence the resolution is much
lesser. But as it is, the simulation model finds it difficult and time
consuming to handle more than 10,000 symbols. And other way round 10,000
symbols can provide resolution only upto 2E-4 for QPSK modulation (or other
quadrature schemes). Thus the hardware and software limitation that puts a
restrain on the number of symbols generated ultimately affects the BER
resolution of the curves. This can be observed easily from all the curves
displayed in the report as most of them are out of the keeping once the BER
crosses 1E-4 limit.&lt;/p&gt;

&lt;p class=&quot;MsoNormal&quot;&gt;&lt;o:p&gt; &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 15px; font-weight: bold; line-height: 18px; &quot;&gt;&lt;a name=&quot;_Ref228064447&quot;&gt;&lt;span style=&quot;mso-bookmark:
_Toc228167790&quot;&gt;&lt;span style=&quot;color:windowtext&quot;&gt;Storing Complex
Numbers&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class=&quot;MsoNormal&quot;&gt;A solution to decrease the processing time substantially is
to skip the process of generation of symbols and even the generation and
application of fading profile. Instead the data is obtained from a stored file.
It is found that this method yields results faster without any considerable
loss in accuracy. LabVIEW has the feature of storing data to a spreadsheet.
However it supports only double data type, but the simulation model requires storing
complex data type.&lt;br&gt;&lt;/p&gt;

&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 15px; font-weight: bold; line-height: 18px; &quot;&gt;&lt;a name=&quot;_Toc228167791&quot;&gt;&lt;span style=&quot;mso-fareast-font-family:
&amp;quot;Times New Roman&amp;quot;;mso-bidi-font-family:&amp;quot;Times New Roman&amp;quot;;color:windowtext&quot;&gt;&lt;span style=&quot;mso-list:Ignore&quot;&gt;&lt;span style=&quot;font:7.0pt &amp;quot;Times New Roman&amp;quot;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:windowtext&quot;&gt;Flatten to
string; pointer limitation&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;br&gt;&lt;/p&gt;

&lt;p class=&quot;MsoNormal&quot;&gt;&lt;o:p&gt; An alternative to storing the complex data to a spreadsheet
file to store the data in the form a string. LabVIEW has the feature ‘Flatten
to String’ which converts any type of data to string data. This string data can
be stored as a text file. However when this file is opened the data memory gets
corrupt. The reason for this yet unknown but the possible answer to it is the
pointer’s limitation. LabVIEW’s documentation says that when data is read from
the text file the data should not exceed the 32-bit pointer’s range, failing to
which it gives an error.&lt;/o:p&gt;&lt;/p&gt;</description>
            <pubDate>Wed, 22 Apr 2009 16:37:25 +0100</pubDate>
        </item>
        <item>
            <title>SMUX BER vs. SNR curves</title>
            <link>http://ujjvalshah.synthasite.com/blog/category/blog/smux-ber-vs-snr-curves</link>
            <description>&lt;img src=&quot;http://ujjvalshah.synthasite.com/blog/category/resources/SMUX.JPG&quot; style=&quot;width:640px;&quot; class=&quot;selected yui-img&quot;&gt;</description>
            <pubDate>Wed, 22 Apr 2009 16:31:39 +0100</pubDate>
        </item>
        <item>
            <title>MIMO MISO SIMO SISO BER vs. SNR curves</title>
            <link>http://ujjvalshah.synthasite.com/blog/category/blog/mimo-miso-simo-siso-ber-vs-snr-curves</link>
            <description>&lt;img src=&quot;http://ujjvalshah.synthasite.com/blog/category/resources/MIMO SIMO MISO.JPG&quot; style=&quot;width:640px;&quot;&gt;</description>
            <pubDate>Wed, 22 Apr 2009 16:31:47 +0100</pubDate>
        </item>
        <item>
            <title>RX Diversity BER vs. SNR curves</title>
            <link>http://ujjvalshah.synthasite.com/blog/category/blog/rx-diversity-ber-vs-snr-curves</link>
            <description>&lt;img src=&quot;http://ujjvalshah.synthasite.com/blog/category/resources/RX Diversity.JPG&quot; style=&quot;width:640px;&quot; class=&quot;yui-img&quot;&gt;</description>
            <pubDate>Wed, 22 Apr 2009 16:28:46 +0100</pubDate>
        </item>
        <item>
            <title>SC, MRC BER vs. SNR curves</title>
            <link>http://ujjvalshah.synthasite.com/blog/category/blog/sc-mrc-ber-vs-snr-curves</link>
            <description>&lt;img src=&quot;http://ujjvalshah.synthasite.com/blog/category/resources/SC, MRC BER vs. SNR curve.JPG&quot; style=&quot;width:640px;&quot; class=&quot;yui-img&quot;&gt;</description>
            <pubDate>Wed, 22 Apr 2009 16:27:13 +0100</pubDate>
        </item>
        <item>
            <title>2x1, 2x2 Alamouti BER vs. SNR curve</title>
            <link>http://ujjvalshah.synthasite.com/blog/category/blog/2x1-2x2-alamouti-ber-vs-snr-curve</link>
            <description>&lt;img src=&quot;http://ujjvalshah.synthasite.com/blog/category/resources/2x1, 2x2 Alamouti BER vs. SNR curve.JPG&quot; style=&quot;width:640px;&quot; class=&quot; selected&quot;&gt;</description>
            <pubDate>Wed, 22 Apr 2009 16:24:25 +0100</pubDate>
        </item>
        <item>
            <title>GUI - The Front Panel</title>
            <link>http://ujjvalshah.synthasite.com/blog/category/blog/gui-the-front-panel</link>
            <description>&lt;img src=&quot;http://ujjvalshah.synthasite.com/blog/category/resources/GUI.JPG&quot; style=&quot;width:800px;&quot; class=&quot;yui-img&quot;&gt;</description>
            <pubDate>Wed, 22 Apr 2009 12:02:11 +0100</pubDate>
        </item>
        <item>
            <title>Generalized Complex Orthogonal Space Time Block Codes</title>
            <link>http://ujjvalshah.synthasite.com/blog/category/blog/generalized-complex-orthogonal-space-time-block-codes</link>
            <description>Some important results:&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Rate one generalized complex orthogonal designs do not exist for more than two transmit antennas&lt;br&gt;&lt;/li&gt;&lt;li&gt;The rate of a generalized complex orthogonal design cannot exceed R = 3/4 for more than two antennas&lt;br&gt;&lt;/li&gt;&lt;li&gt;Rate half, R = 0.5, generalized complex orthogonal designs exist for any number of transmit antennas &lt;/li&gt;&lt;li&gt;For a generator matrix for a given rate and number of antennas, a generator matrix of same rate for number of tranmist antennas less by one can be obtained by simply removing one column.&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;</description>
            <pubDate>Tue, 14 Apr 2009 08:39:10 +0100</pubDate>
        </item>
        <item>
            <title>Selection Combining</title>
            <link>http://ujjvalshah.synthasite.com/blog/category/blog/selection-combining</link>
            <description>Selection combining involves the process of selecting one of the multiple receiver antennas and thus the communication channel which is least affected by noise.&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;The question: Is it possible to use this technique if there are more than two transmitter antennas?&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;My instinct says no, however i need to find out the answer and the reason for it as well.&lt;/div&gt;&lt;br&gt;------------------&lt;br&gt;edited on 22nd April&lt;br&gt;&lt;br&gt;well the answer is yes as well as know.&lt;br&gt;for STBC you need to lock into one receiver antenna only during the transmission of a codeword. the receiver antenna cannot be changed during this one code transmission time.&lt;br&gt;&lt;br&gt;for spatial mux, the best rx antenna can be found and selected after each time slot, but then is difficult and complex to find out which receiver is best cause each time the received signal is a combination from a no of transmitter antennas. It requires a complex mechanism to separately make an estimation of each channel and thus make a combined channel estimations for a single receiver antenna.&lt;br&gt;&lt;br&gt;</description>
            <pubDate>Wed, 22 Apr 2009 16:20:26 +0100</pubDate>
        </item>
    </channel>
</rss>
