<div dir="ltr">Hi there<div><br></div><div>In a loudspeaker the driver can move several <span class="gmail-ginger-module-highlighter-mistake-anim gmail-ginger-module-highlighter-mistake-type-3" id="gmail-gwmw-15272683394297076298816">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.</div><div><br></div><div>In Matlab this can be simulated with <span class="gmail-ginger-module-highlighter-mistake-anim gmail-ginger-module-highlighter-mistake-type-1" id="gmail-gwmw-15272683859886369571086">pmmod</span>.</div><div><a href="https://matlabandsimulink.wordpress.com/2013/03/12/phase-modulation/">https://matlabandsimulink.wordpress.com/2013/03/12/phase-modulation/</a><br></div><div><br></div><div>Is there a similar function in Scilab? (name - please ?)</div><div><br></div><div>Here's the code I have written so far - this is the part that shows the input signal (the un-distorted signal):</div><div><br></div><div><pre style="font-family:Monospaced;font-style:normal"><span style="color:rgb(0,0,0)">sample_rate</span><span style="color:rgb(92,92,92)">=</span><span style="color:rgb(188,143,143)">20000</span><span style="color:rgb(0,0,0)">;</span>
<span style="color:rgb(0,0,0)">t</span> <span style="color:rgb(92,92,92)">=</span> <span style="color:rgb(188,143,143)">0</span><span style="color:rgb(255,170,0)">:</span><span style="color:rgb(188,143,143)">1</span><span style="color:rgb(92,92,92)">/</span><span style="color:rgb(0,0,0)">sample_rate</span><span style="color:rgb(255,170,0)">:</span><span style="color:rgb(188,143,143)">0.6</span><span style="color:rgb(0,0,0)">;</span>
<span style="color:rgb(0,0,0)">N</span><span style="color:rgb(92,92,92)">=</span><span style="color:rgb(50,185,185)">size</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(0,0,0)">t</span><span style="color:rgb(0,0,0)">,</span><span style="color:rgb(188,143,143)">'</span><span style="color:rgb(188,143,143)">*</span><span style="color:rgb(188,143,143)">'</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">;</span> <span style="color:rgb(100,174,100);font-style:italic">//number of samples</span>
<span style="color:rgb(0,0,0)">y1</span> <span style="color:rgb(92,92,92)">=</span> <span style="color:rgb(50,185,185)">sin</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(188,143,143)">2</span><span style="color:rgb(92,92,92)">*</span><span style="color:rgb(218,112,214)">%pi</span><span style="color:rgb(92,92,92)">*</span><span style="color:rgb(188,143,143)">50</span><span style="color:rgb(92,92,92)">*</span><span style="color:rgb(0,0,0)">t</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">;</span>
<span style="color:rgb(0,0,0)">y2</span> <span style="color:rgb(92,92,92)">=</span> <span style="color:rgb(188,143,143)">0.5</span><span style="color:rgb(92,92,92)">*</span><span style="color:rgb(50,185,185)">sin</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(188,143,143)">2</span><span style="color:rgb(92,92,92)">*</span><span style="color:rgb(218,112,214)">%pi</span><span style="color:rgb(92,92,92)">*</span><span style="color:rgb(188,143,143)">500</span><span style="color:rgb(92,92,92)">*</span><span style="color:rgb(0,0,0)">t</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">;</span>
<span style="color:rgb(100,174,100);font-style:italic">// y2 = 0.5*sin(2*%pi*500*t+%pi/4);</span>
<span style="color:rgb(0,0,0)">s</span><span style="color:rgb(92,92,92)">=</span><span style="color:rgb(0,0,0)">y1</span><span style="color:rgb(92,92,92)">+</span><span style="color:rgb(0,0,0)">y2</span><span style="color:rgb(92,92,92)">+</span><span style="color:rgb(50,185,185)">grand</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(188,143,143)">1</span><span style="color:rgb(0,0,0)">,</span><span style="color:rgb(0,0,0)">N</span><span style="color:rgb(0,0,0)">,</span><span style="color:rgb(188,143,143)">'</span><span style="color:rgb(188,143,143)">nor</span><span style="color:rgb(188,143,143)">'</span><span style="color:rgb(0,0,0)">,</span><span style="color:rgb(188,143,143)">0</span><span style="color:rgb(0,0,0)">,</span><span style="color:rgb(188,143,143)">1</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">;</span>

<span style="color:rgb(100,174,100);font-style:italic">// Plot time-domain</span>
<span style="color:rgb(0,0,0)">endplot</span> <span style="color:rgb(92,92,92)">=</span> <span style="color:rgb(50,185,185)">round</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(0,0,0)">N</span><span style="color:rgb(92,92,92)">/</span><span style="color:rgb(188,143,143)">15</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">;</span>
<span style="color:rgb(0,0,0)">twoplots</span> <span style="color:rgb(92,92,92)">=</span> <span style="color:rgb(0,0,0)">scf</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">;</span> <span style="color:rgb(100,174,100);font-style:italic">// Set Current Figure (Graphics Window)</span>
<span style="color:rgb(0,0,0)">subplot</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(188,143,143)">211</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">;</span>
<span style="color:rgb(0,0,0)">plot</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(0,0,0)">t</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(188,143,143)">1</span><span style="color:rgb(255,170,0)">:</span><span style="color:rgb(0,0,0)">endplot</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">,</span><span style="color:rgb(0,0,0)">y1</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(188,143,143)">1</span><span style="color:rgb(255,170,0)">:</span><span style="color:rgb(0,0,0)">endplot</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">,</span><span style="color:rgb(0,0,0)">t</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(188,143,143)">1</span><span style="color:rgb(255,170,0)">:</span><span style="color:rgb(0,0,0)">endplot</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">,</span><span style="color:rgb(0,0,0)">y2</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(188,143,143)">1</span><span style="color:rgb(255,170,0)">:</span><span style="color:rgb(0,0,0)">endplot</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">;</span>
<span style="color:rgb(0,0,0)">subplot</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(188,143,143)">212</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">;</span>
<span style="color:rgb(0,0,0)">plot</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(0,0,0)">t</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(188,143,143)">1</span><span style="color:rgb(255,170,0)">:</span><span style="color:rgb(0,0,0)">endplot</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">,</span><span style="color:rgb(0,0,0)">y1</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(188,143,143)">1</span><span style="color:rgb(255,170,0)">:</span><span style="color:rgb(0,0,0)">endplot</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(92,92,92)">+</span><span style="color:rgb(0,0,0)">y2</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(188,143,143)">1</span><span style="color:rgb(255,170,0)">:</span><span style="color:rgb(0,0,0)">endplot</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">;</span>

<span style="color:rgb(0,0,0)">y</span><span style="color:rgb(92,92,92)">=</span><span style="color:rgb(50,185,185)">fft</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(0,0,0)">s</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">;</span>
<span style="color:rgb(0,0,0)">ymax</span> <span style="color:rgb(92,92,92)">=</span> <span style="color:rgb(50,185,185)">max</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(50,185,185)">abs</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(0,0,0)">y</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">;</span>
<span style="color:rgb(0,0,0)">y</span> <span style="color:rgb(92,92,92)">=</span> <span style="color:rgb(0,0,0)">y</span> <span style="color:rgb(92,92,92)">./</span> <span style="color:rgb(0,0,0)">ymax</span><span style="color:rgb(0,0,0)">;</span> <span style="color:rgb(100,174,100);font-style:italic">// Normalize</span>

<span style="color:rgb(100,174,100);font-style:italic">// s is real so the fft response is conjugate symmetric</span>
<span style="color:rgb(100,174,100);font-style:italic">// and we retain only the first N/2 points</span>
<span style="color:rgb(0,0,0)">f</span><span style="color:rgb(92,92,92)">=</span><span style="color:rgb(0,0,0)">sample_rate</span><span style="color:rgb(92,92,92)">*</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(188,143,143)">0</span><span style="color:rgb(255,170,0)">:</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(0,0,0)">N</span><span style="color:rgb(92,92,92)">/</span><span style="color:rgb(188,143,143)">2</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(92,92,92)">/</span><span style="color:rgb(0,0,0)">N</span><span style="color:rgb(0,0,0)">;</span> <span style="color:rgb(100,174,100);font-style:italic">//associated frequency vector</span>
<span style="color:rgb(0,0,0)">n</span><span style="color:rgb(92,92,92)">=</span><span style="color:rgb(50,185,185)">size</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(0,0,0)">f</span><span style="color:rgb(0,0,0)">,</span><span style="color:rgb(188,143,143)">'</span><span style="color:rgb(188,143,143)">*</span><span style="color:rgb(188,143,143)">'</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">;</span>
<span style="color:rgb(0,0,0)">fftplots</span> <span style="color:rgb(92,92,92)">=</span> <span style="color:rgb(0,0,0)">scf</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">;</span>
<span style="color:rgb(0,0,0)">plot</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(0,0,0)">f</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(188,143,143)">2</span><span style="color:rgb(255,170,0)">:</span><span style="color:rgb(255,170,0)">$</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">,</span><span style="color:rgb(50,185,185)">abs</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(0,0,0)">y</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(188,143,143)">2</span><span style="color:rgb(255,170,0)">:</span><span style="color:rgb(0,0,0)">n</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">;</span> <span style="color:rgb(100,174,100);font-style:italic">// drop first datapoint, f = 0 (it prevents log-plot)</span>
<span style="color:rgb(0,0,0)">a</span> <span style="color:rgb(92,92,92)">=</span> <span style="color:rgb(0,0,0)">gca</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">;</span>
<span style="color:rgb(0,0,0)">a</span><span style="color:rgb(92,92,92)">.</span><span style="color:rgb(170,170,170)">log_flags</span> <span style="color:rgb(92,92,92)">=</span> <span style="color:rgb(188,143,143)">"</span><span style="color:rgb(188,143,143)">lnn</span><span style="color:rgb(188,143,143)">"</span><span style="color:rgb(0,0,0)">;</span></pre><br></div><div>Best regards,<br></div><div>Claus</div></div>