<div dir="ltr">Hi Gary<div><br></div><div>Thanks for your input. I went the analytic route for now, and simplified a bit (as you often do with analytic solutions). You're right that from an electro-mechanical point of view, superposition applies, but as the waves transmit in acoustics in air - not, I'm afraid, this is where we see the distortion, simply because the speaker cone moves several millimeter.</div><div><br></div><div>Best regards,</div><div>Claus</div></div><br><div class="gmail_quote"><div dir="ltr">On Sat, May 26, 2018 at 10:55 PM Gary Nelson <<a href="mailto:porpoiseseeker@gmail.com">porpoiseseeker@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="EN-US" link="blue" vlink="#954F72"><div class="m_8496412004421645070WordSection1"><p class="MsoNormal">Claus,</p><p class="MsoNormal">Back in the late 60s, I did my PhD research using analytic signal. Yes,it works, and the implementation details are more complex that we find on the link. A few years ago, I implemented a system for analyzing harbor porpoise vocalizations using scilab. For example, instantaneous phase(t) wants to be differentiable if instantaneous frequency is to be positive. I found that octave bands are the widest that preserves this feature. Yes, you can calculate phase(t) = atan(imaginary/real), but you have to add 2PI when atan wraps around in order to make phase monotonically increase.</p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">Also, I am not convinced that a loudspeaker does phase modulation.  Certainly, if the speaker is linear, then superposition applies. If phase modulation occurs, it is a non-linear effect. Perhaps that effect is real, but we need to see a model to show how it comes to be. </p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">I might be able to help you write analytic signal Â code. </p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">Good wishes</p><p class="MsoNormal">Gary Nelson </p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">Sent from my Windows 10 phone</p><p class="MsoNormal"><u></u> <u></u></p><div style="border:none;border-top:solid #e1e1e1 1.0pt;padding:3.0pt 0in 0in 0in"><p class="MsoNormal" style="border:none;padding:0in"><b>From: </b><a href="mailto:cfuttrup@gmail.com" target="_blank">Claus Futtrup</a><br><b>Sent: </b>Saturday, May 26, 2018 7:41 AM<br><b>To: </b><a href="mailto:users@lists.scilab.org" target="_blank">International users mailing list for Scilab.</a><br><b>Subject: </b>Re: [Scilab-users] Simulating phase modulation</p></div><p class="MsoNormal"><u></u> <u></u></p><div><p class="MsoNormal">Hi Rafael</p><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">Thank you, I shall print and study. :-)</p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">Cheers,</p></div><div><p class="MsoNormal">Claus</p></div></div><p class="MsoNormal"><u></u> <u></u></p><div><div><p class="MsoNormal">On Fri, May 25, 2018 at 8:42 PM Rafael Guerra <<a href="mailto:jrafaelbguerra@hotmail.com" target="_blank">jrafaelbguerra@hotmail.com</a>> wrote:</p></div><blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in"><div><div><p class="MsoNormal"><span style="color:black">Hi Claus,</span></p><p class="MsoNormal"><span style="color:black"> </span></p><p class="MsoNormal"><span style="color:black">I am not aware of such function. However, you can find simple code here below for both phase modulation and demodulation, which is straightforward to translate in Scilab:</span></p><p class="MsoNormal"><span style="color:black"><a href="https://www.gaussianwaves.com/2017/06/phase-demodulation-using-hilbert-transform-application-of-analytic-signal/" target="_blank">https://www.gaussianwaves.com/2017/06/phase-demodulation-using-hilbert-transform-application-of-analytic-signal/</a></span></p><p class="MsoNormal"><span style="color:black"> </span></p><p class="MsoNormal"><span style="color:black">Note that the phase modulation is coded differently from you snippet below.</span></p><p class="MsoNormal"><span style="color:black"> </span></p><p class="MsoNormal"><span style="color:black">Regards,</span></p><p class="MsoNormal"><span style="color:black">Rafael</span></p><p class="MsoNormal"><span style="color:black"> </span></p><p class="MsoNormal"><b>From:</b> users [mailto:<a href="mailto:users-bounces@lists.scilab.org" target="_blank">users-bounces@lists.scilab.org</a>] <b>On Behalf Of </b>Claus Futtrup<br><b>Sent:</b> Friday, May 25, 2018 7:17 PM<br><b>To:</b> International users mailing list for Scilab. <<a href="mailto:users@lists.scilab.org" target="_blank">users@lists.scilab.org</a>><br><b>Subject:</b> [Scilab-users] Simulating phase modulation</p><p class="MsoNormal"> </p><div><p class="MsoNormal">Hi there</p><div><p class="MsoNormal"> </p></div><div><p class="MsoNormal">In a loudspeaker the driver can move several <span class="m_8496412004421645070m-860483954252869115gmail-ginger-module-highlighter-mistake-anim">millimeter</span> in an attempt to reproduce a low-frequency note. If the speaker also at the same time produce a higher tone, this second tone is phase modulated by the first one. This is a distortion of the original signal which I'd like to simulate / illustrate with some simple Scilab code, if possible.</p></div><div><p class="MsoNormal"> </p></div><div><p class="MsoNormal">In Matlab this can be simulated with <span class="m_8496412004421645070m-860483954252869115gmail-ginger-module-highlighter-mistake-anim">pmmod</span>.</p></div><div><p class="MsoNormal"><a href="https://matlabandsimulink.wordpress.com/2013/03/12/phase-modulation/" target="_blank">https://matlabandsimulink.wordpress.com/2013/03/12/phase-modulation/</a></p></div><div><p class="MsoNormal"> </p></div><div><p class="MsoNormal">Is there a similar function in Scilab? (name - please ?)</p></div><div><p class="MsoNormal"> </p></div><div><p class="MsoNormal">Here's the code I have written so far - this is the part that shows the input signal (the un-distorted signal):</p></div><div><p class="MsoNormal"> </p></div><div><pre><span style="font-family:"Monospaced",serif;color:black">sample_rate</span><span style="font-family:"Monospaced",serif;color:#5c5c5c">=</span><span style="font-family:"Monospaced",serif;color:rosybrown">20000</span><span style="font-family:"Monospaced",serif;color:black">;</span></pre><pre><span style="font-family:"Monospaced",serif;color:black">t</span><span style="font-family:"Monospaced",serif"> <span style="color:#5c5c5c">=</span> <span style="color:rosybrown">0</span><span style="color:#ffaa00">:</span><span style="color:rosybrown">1</span><span style="color:#5c5c5c">/</span><span style="color:black">sample_rate</span><span style="color:#ffaa00">:</span><span style="color:rosybrown">0.6</span><span style="color:black">;</span></span></pre><pre><span style="font-family:"Monospaced",serif;color:black">N</span><span style="font-family:"Monospaced",serif;color:#5c5c5c">=</span><span style="font-family:"Monospaced",serif;color:#32b9b9">size</span><span style="font-family:"Monospaced",serif;color:#4a55db">(</span><span style="font-family:"Monospaced",serif;color:black">t,</span><span style="font-family:"Monospaced",serif;color:rosybrown">'*'</span><span style="font-family:"Monospaced",serif;color:#4a55db">)</span><span style="font-family:"Monospaced",serif;color:black">;</span><span style="font-family:"Monospaced",serif"> <i><span style="color:#64ae64">//number of samples</span></i></span></pre><pre><span style="font-family:"Monospaced",serif;color:black">y1</span><span style="font-family:"Monospaced",serif"> <span style="color:#5c5c5c">=</span> <span style="color:#32b9b9">sin</span><span style="color:#4a55db">(</span><span style="color:rosybrown">2</span><span style="color:#5c5c5c">*</span><span style="color:orchid">%pi</span><span style="color:#5c5c5c">*</span><span style="color:rosybrown">50</span><span style="color:#5c5c5c">*</span><span style="color:black">t</span><span style="color:#4a55db">)</span><span style="color:black">;</span></span></pre><pre><span style="font-family:"Monospaced",serif;color:black">y2</span><span style="font-family:"Monospaced",serif"> <span style="color:#5c5c5c">=</span> <span style="color:rosybrown">0.5</span><span style="color:#5c5c5c">*</span><span style="color:#32b9b9">sin</span><span style="color:#4a55db">(</span><span style="color:rosybrown">2</span><span style="color:#5c5c5c">*</span><span style="color:orchid">%pi</span><span style="color:#5c5c5c">*</span><span style="color:rosybrown">500</span><span style="color:#5c5c5c">*</span><span style="color:black">t</span><span style="color:#4a55db">)</span><span style="color:black">;</span></span></pre><pre><i><span style="font-family:"Monospaced",serif;color:#64ae64">// y2 = 0.5*sin(2*%pi*500*t+%pi/4);</span></i></pre><pre><span style="font-family:"Monospaced",serif;color:black">s</span><span style="font-family:"Monospaced",serif;color:#5c5c5c">=</span><span style="font-family:"Monospaced",serif;color:black">y1</span><span style="font-family:"Monospaced",serif;color:#5c5c5c">+</span><span style="font-family:"Monospaced",serif;color:black">y2</span><span style="font-family:"Monospaced",serif;color:#5c5c5c">+</span><span style="font-family:"Monospaced",serif;color:#32b9b9">grand</span><span style="font-family:"Monospaced",serif;color:#4a55db">(</span><span style="font-family:"Monospaced",serif;color:rosybrown">1</span><span style="font-family:"Monospaced",serif;color:black">,N,</span><span style="font-family:"Monospaced",serif;color:rosybrown">'nor'</span><span style="font-family:"Monospaced",serif;color:black">,</span><span style="font-family:"Monospaced",serif;color:rosybrown">0</span><span style="font-family:"Monospaced",serif;color:black">,</span><span style="font-family:"Monospaced",serif;color:rosybrown">1</span><span style="font-family:"Monospaced",serif;color:#4a55db">)</span><span style="font-family:"Monospaced",serif;color:black">;</span></pre><pre><span style="font-family:"Monospaced",serif"> </span></pre><pre><i><span style="font-family:"Monospaced",serif;color:#64ae64">// Plot time-domain</span></i></pre><pre><span style="font-family:"Monospaced",serif;color:black">endplot</span><span style="font-family:"Monospaced",serif"> <span style="color:#5c5c5c">=</span> <span style="color:#32b9b9">round</span><span style="color:#4a55db">(</span><span style="color:black">N</span><span style="color:#5c5c5c">/</span><span style="color:rosybrown">15</span><span style="color:#4a55db">)</span><span style="color:black">;</span></span></pre><pre><span style="font-family:"Monospaced",serif;color:black">twoplots</span><span style="font-family:"Monospaced",serif"> <span style="color:#5c5c5c">=</span> <span style="color:black">scf</span><span style="color:#4a55db">()</span><span style="color:black">;</span> <i><span style="color:#64ae64">// Set Current Figure (Graphics Window)</span></i></span></pre><pre><span style="font-family:"Monospaced",serif;color:black">subplot</span><span style="font-family:"Monospaced",serif;color:#4a55db">(</span><span style="font-family:"Monospaced",serif;color:rosybrown">211</span><span style="font-family:"Monospaced",serif;color:#4a55db">)</span><span style="font-family:"Monospaced",serif;color:black">;</span></pre><pre><span style="font-family:"Monospaced",serif;color:black">plot</span><span style="font-family:"Monospaced",serif;color:#4a55db">(</span><span style="font-family:"Monospaced",serif;color:black">t</span><span style="font-family:"Monospaced",serif;color:#4a55db">(</span><span style="font-family:"Monospaced",serif;color:rosybrown">1</span><span style="font-family:"Monospaced",serif;color:#ffaa00">:</span><span style="font-family:"Monospaced",serif;color:black">endplot</span><span style="font-family:"Monospaced",serif;color:#4a55db">)</span><span style="font-family:"Monospaced",serif;color:black">,y1</span><span style="font-family:"Monospaced",serif;color:#4a55db">(</span><span style="font-family:"Monospaced",serif;color:rosybrown">1</span><span style="font-family:"Monospaced",serif;color:#ffaa00">:</span><span style="font-family:"Monospaced",serif;color:black">endplot</span><span style="font-family:"Monospaced",serif;color:#4a55db">)</span><span style="font-family:"Monospaced",serif;color:black">,t</span><span style="font-family:"Monospaced",serif;color:#4a55db">(</span><span style="font-family:"Monospaced",serif;color:rosybrown">1</span><span style="font-family:"Monospaced",serif;color:#ffaa00">:</span><span style="font-family:"Monospaced",serif;color:black">endplot</span><span style="font-family:"Monospaced",serif;color:#4a55db">)</span><span style="font-family:"Monospaced",serif;color:black">,y2</span><span style="font-family:"Monospaced",serif;color:#4a55db">(</span><span style="font-family:"Monospaced",serif;color:rosybrown">1</span><span style="font-family:"Monospaced",serif;color:#ffaa00">:</span><span style="font-family:"Monospaced",serif;color:black">endplot</span><span style="font-family:"Monospaced",serif;color:#4a55db">))</span><span style="font-family:"Monospaced",serif;color:black">;</span></pre><pre><span style="font-family:"Monospaced",serif;color:black">subplot</span><span style="font-family:"Monospaced",serif;color:#4a55db">(</span><span style="font-family:"Monospaced",serif;color:rosybrown">212</span><span style="font-family:"Monospaced",serif;color:#4a55db">)</span><span style="font-family:"Monospaced",serif;color:black">;</span></pre><pre><span style="font-family:"Monospaced",serif;color:black">plot</span><span style="font-family:"Monospaced",serif;color:#4a55db">(</span><span style="font-family:"Monospaced",serif;color:black">t</span><span style="font-family:"Monospaced",serif;color:#4a55db">(</span><span style="font-family:"Monospaced",serif;color:rosybrown">1</span><span style="font-family:"Monospaced",serif;color:#ffaa00">:</span><span style="font-family:"Monospaced",serif;color:black">endplot</span><span style="font-family:"Monospaced",serif;color:#4a55db">)</span><span style="font-family:"Monospaced",serif;color:black">,y1</span><span style="font-family:"Monospaced",serif;color:#4a55db">(</span><span style="font-family:"Monospaced",serif;color:rosybrown">1</span><span style="font-family:"Monospaced",serif;color:#ffaa00">:</span><span style="font-family:"Monospaced",serif;color:black">endplot</span><span style="font-family:"Monospaced",serif;color:#4a55db">)</span><span style="font-family:"Monospaced",serif;color:#5c5c5c">+</span><span style="font-family:"Monospaced",serif;color:black">y2</span><span style="font-family:"Monospaced",serif;color:#4a55db">(</span><span style="font-family:"Monospaced",serif;color:rosybrown">1</span><span style="font-family:"Monospaced",serif;color:#ffaa00">:</span><span style="font-family:"Monospaced",serif;color:black">endplot</span><span style="font-family:"Monospaced",serif;color:#4a55db">))</span><span style="font-family:"Monospaced",serif;color:black">;</span></pre><pre><span style="font-family:"Monospaced",serif"> </span></pre><pre><span style="font-family:"Monospaced",serif;color:black">y</span><span style="font-family:"Monospaced",serif;color:#5c5c5c">=</span><span style="font-family:"Monospaced",serif;color:#32b9b9">fft</span><span style="font-family:"Monospaced",serif;color:#4a55db">(</span><span style="font-family:"Monospaced",serif;color:black">s</span><span style="font-family:"Monospaced",serif;color:#4a55db">)</span><span style="font-family:"Monospaced",serif;color:black">;</span></pre><pre><span style="font-family:"Monospaced",serif;color:black">ymax</span><span style="font-family:"Monospaced",serif"> <span style="color:#5c5c5c">=</span> <span style="color:#32b9b9">max</span><span style="color:#4a55db">(</span><span style="color:#32b9b9">abs</span><span style="color:#4a55db">(</span><span style="color:black">y</span><span style="color:#4a55db">))</span><span style="color:black">;</span></span></pre><pre><span style="font-family:"Monospaced",serif;color:black">y</span><span style="font-family:"Monospaced",serif"> <span style="color:#5c5c5c">=</span> <span style="color:black">y</span> <span style="color:#5c5c5c">./</span> <span style="color:black">ymax;</span> <i><span style="color:#64ae64">// Normalize</span></i></span></pre><pre><span style="font-family:"Monospaced",serif"> </span></pre><pre><i><span style="font-family:"Monospaced",serif;color:#64ae64">// s is real so the fft response is conjugate symmetric</span></i></pre><pre><i><span style="font-family:"Monospaced",serif;color:#64ae64">// and we retain only the first N/2 points</span></i></pre><pre><span style="font-family:"Monospaced",serif;color:black">f</span><span style="font-family:"Monospaced",serif;color:#5c5c5c">=</span><span style="font-family:"Monospaced",serif;color:black">sample_rate</span><span style="font-family:"Monospaced",serif;color:#5c5c5c">*</span><span style="font-family:"Monospaced",serif;color:#4a55db">(</span><span style="font-family:"Monospaced",serif;color:rosybrown">0</span><span style="font-family:"Monospaced",serif;color:#ffaa00">:</span><span style="font-family:"Monospaced",serif;color:#4a55db">(</span><span style="font-family:"Monospaced",serif;color:black">N</span><span style="font-family:"Monospaced",serif;color:#5c5c5c">/</span><span style="font-family:"Monospaced",serif;color:rosybrown">2</span><span style="font-family:"Monospaced",serif;color:#4a55db">))</span><span style="font-family:"Monospaced",serif;color:#5c5c5c">/</span><span style="font-family:"Monospaced",serif;color:black">N;</span><span style="font-family:"Monospaced",serif"> <i><span style="color:#64ae64">//associated frequency vector</span></i></span></pre><pre><span style="font-family:"Monospaced",serif;color:black">n</span><span style="font-family:"Monospaced",serif;color:#5c5c5c">=</span><span style="font-family:"Monospaced",serif;color:#32b9b9">size</span><span style="font-family:"Monospaced",serif;color:#4a55db">(</span><span style="font-family:"Monospaced",serif;color:black">f,</span><span style="font-family:"Monospaced",serif;color:rosybrown">'*'</span><span style="font-family:"Monospaced",serif;color:#4a55db">)</span><span style="font-family:"Monospaced",serif;color:black">;</span></pre><pre><span style="font-family:"Monospaced",serif;color:black">fftplots</span><span style="font-family:"Monospaced",serif"> <span style="color:#5c5c5c">=</span> <span style="color:black">scf</span><span style="color:#4a55db">()</span><span style="color:black">;</span></span></pre><pre><span style="font-family:"Monospaced",serif;color:black">plot</span><span style="font-family:"Monospaced",serif;color:#4a55db">(</span><span style="font-family:"Monospaced",serif;color:black">f</span><span style="font-family:"Monospaced",serif;color:#4a55db">(</span><span style="font-family:"Monospaced",serif;color:rosybrown">2</span><span style="font-family:"Monospaced",serif;color:#ffaa00">:$</span><span style="font-family:"Monospaced",serif;color:#4a55db">)</span><span style="font-family:"Monospaced",serif;color:black">,</span><span style="font-family:"Monospaced",serif;color:#32b9b9">abs</span><span style="font-family:"Monospaced",serif;color:#4a55db">(</span><span style="font-family:"Monospaced",serif;color:black">y</span><span style="font-family:"Monospaced",serif;color:#4a55db">(</span><span style="font-family:"Monospaced",serif;color:rosybrown">2</span><span style="font-family:"Monospaced",serif;color:#ffaa00">:</span><span style="font-family:"Monospaced",serif;color:black">n</span><span style="font-family:"Monospaced",serif;color:#4a55db">)))</span><span style="font-family:"Monospaced",serif;color:black">;</span><span style="font-family:"Monospaced",serif"> <i><span style="color:#64ae64">// drop first datapoint, f = 0 (it prevents log-plot)</span></i></span></pre><pre><span style="font-family:"Monospaced",serif;color:black">a</span><span style="font-family:"Monospaced",serif"> <span style="color:#5c5c5c">=</span> <span style="color:black">gca</span><span style="color:#4a55db">()</span><span style="color:black">;</span></span></pre><pre><span style="font-family:"Monospaced",serif;color:black">a</span><span style="font-family:"Monospaced",serif;color:#5c5c5c">.</span><span style="font-family:"Monospaced",serif;color:#aaaaaa">log_flags</span><span style="font-family:"Monospaced",serif"> <span style="color:#5c5c5c">=</span> <span style="color:rosybrown">"lnn"</span><span style="color:black">;</span></span></pre><p class="MsoNormal"> </p></div><div><p class="MsoNormal">Best regards,</p></div><div><p class="MsoNormal">Claus</p></div></div></div></div></blockquote></div><p class="MsoNormal" style="margin-left:4.8pt">_______________________________________________<br>users mailing list<br><a href="mailto:users@lists.scilab.org" target="_blank">users@lists.scilab.org</a><br><a href="http://lists.scilab.org/mailman/listinfo/users" target="_blank">http://lists.scilab.org/mailman/listinfo/users</a></p><p class="MsoNormal"><u></u> <u></u></p></div></div>_______________________________________________<br>
users mailing list<br>
<a href="mailto:users@lists.scilab.org" target="_blank">users@lists.scilab.org</a><br>
<a href="http://lists.scilab.org/mailman/listinfo/users" rel="noreferrer" target="_blank">http://lists.scilab.org/mailman/listinfo/users</a><br>
</blockquote></div>