Re: [Scilab-users] Simulating phase modulation

2018-05-27 Thread Claus Futtrup
Hi Gary

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.

Best regards,
Claus

On Sat, May 26, 2018 at 10:55 PM Gary Nelson <porpoisesee...@gmail.com>
wrote:

> Claus,
>
> 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.
>
>
>
> 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.
>
>
>
> I might be able to help you write analytic signal  code.
>
>
>
> Good wishes
>
> Gary Nelson
>
>
>
>
>
> Sent from my Windows 10 phone
>
>
>
> *From: *Claus Futtrup <cfutt...@gmail.com>
> *Sent: *Saturday, May 26, 2018 7:41 AM
> *To: *International users mailing list for Scilab.
> <users@lists.scilab.org>
> *Subject: *Re: [Scilab-users] Simulating phase modulation
>
>
>
> Hi Rafael
>
>
>
> Thank you, I shall print and study. :-)
>
>
>
> Cheers,
>
> Claus
>
>
>
> On Fri, May 25, 2018 at 8:42 PM Rafael Guerra <jrafaelbgue...@hotmail.com>
> wrote:
>
> Hi Claus,
>
>
>
> 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:
>
>
> https://www.gaussianwaves.com/2017/06/phase-demodulation-using-hilbert-transform-application-of-analytic-signal/
>
>
>
> Note that the phase modulation is coded differently from you snippet below.
>
>
>
> Regards,
>
> Rafael
>
>
>
> *From:* users [mailto:users-boun...@lists.scilab.org] *On Behalf Of *Claus
> Futtrup
> *Sent:* Friday, May 25, 2018 7:17 PM
> *To:* International users mailing list for Scilab. <users@lists.scilab.org
> >
> *Subject:* [Scilab-users] Simulating phase modulation
>
>
>
> Hi there
>
>
>
> In a loudspeaker the driver can move several millimeter 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.
>
>
>
> In Matlab this can be simulated with pmmod.
>
> https://matlabandsimulink.wordpress.com/2013/03/12/phase-modulation/
>
>
>
> Is there a similar function in Scilab? (name - please ?)
>
>
>
> Here's the code I have written so far - this is the part that shows the
> input signal (the un-distorted signal):
>
>
>
> sample_rate=2;
>
> t = 0:1/sample_rate:0.6;
>
> N=size(t,'*'); *//number of samples*
>
> y1 = sin(2*%pi*50*t);
>
> y2 = 0.5*sin(2*%pi*500*t);
>
> *// y2 = 0.5*sin(2*%pi*500*t+%pi/4);*
>
> s=y1+y2+grand(1,N,'nor',0,1);
>
>
>
> *// Plot time-domain*
>
> endplot = round(N/15);
>
> twoplots = scf(); *// Set Current Figure (Graphics Window)*
>
> subplot(211);
>
> plot(t(1:endplot),y1(1:endplot),t(1:endplot),y2(1:endplot));
>
> subplot(212);
>
> plot(t(1:endplot),y1(1:endplot)+y2(1:endplot));
>
>
>
> y=fft(s);
>
> ymax = max(abs(y));
>
> y = y ./ ymax; *// Normalize*
>
>
>
> *// s is real so the fft response is conjugate symmetric*
>
> *// and we retain only the first N/2 points*
>
> f=sample_rate*(0:(N/2))/N; *//associated frequency vector*
>
> n=size(f,'*');
>
> fftplots = scf();
>
> plot(f(2:$),abs(y(2:n))); *// drop first datapoint, f = 0 (it prevents 
> log-plot)*
>
> a = gca();
>
> a.log_flags = "lnn";
>
>
>
> Best regards,
>
> Claus
>
> ___
> users mailing list
> users@lists.scilab.org
> http://lists.scilab.org/mailman/listinfo/users
>
>
> ___
> users mailing list
> users@lists.scilab.org
> http://lists.scilab.org/mailman/listinfo/users
>
___
users mailing list
users@lists.scilab.org
http://lists.scilab.org/mailman/listinfo/users


Re: [Scilab-users] Simulating phase modulation

2018-05-26 Thread Gary Nelson
Claus,
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.

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. 

I might be able to help you write analytic signal  code. 

Good wishes
Gary Nelson 


Sent from my Windows 10 phone

From: Claus Futtrup
Sent: Saturday, May 26, 2018 7:41 AM
To: International users mailing list for Scilab.
Subject: Re: [Scilab-users] Simulating phase modulation

Hi Rafael

Thank you, I shall print and study. :-)

Cheers,
Claus

On Fri, May 25, 2018 at 8:42 PM Rafael Guerra <jrafaelbgue...@hotmail.com> 
wrote:
Hi Claus,
 
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:
https://www.gaussianwaves.com/2017/06/phase-demodulation-using-hilbert-transform-application-of-analytic-signal/
 
Note that the phase modulation is coded differently from you snippet below.
 
Regards,
Rafael
 
From: users [mailto:users-boun...@lists.scilab.org] On Behalf Of Claus Futtrup
Sent: Friday, May 25, 2018 7:17 PM
To: International users mailing list for Scilab. <users@lists.scilab.org>
Subject: [Scilab-users] Simulating phase modulation
 
Hi there
 
In a loudspeaker the driver can move several millimeter 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.
 
In Matlab this can be simulated with pmmod.
https://matlabandsimulink.wordpress.com/2013/03/12/phase-modulation/
 
Is there a similar function in Scilab? (name - please ?)
 
Here's the code I have written so far - this is the part that shows the input 
signal (the un-distorted signal):
 
sample_rate=2;
t = 0:1/sample_rate:0.6;
N=size(t,'*'); //number of samples
y1 = sin(2*%pi*50*t);
y2 = 0.5*sin(2*%pi*500*t);
// y2 = 0.5*sin(2*%pi*500*t+%pi/4);
s=y1+y2+grand(1,N,'nor',0,1);
 
// Plot time-domain
endplot = round(N/15);
twoplots = scf(); // Set Current Figure (Graphics Window)
subplot(211);
plot(t(1:endplot),y1(1:endplot),t(1:endplot),y2(1:endplot));
subplot(212);
plot(t(1:endplot),y1(1:endplot)+y2(1:endplot));
 
y=fft(s);
ymax = max(abs(y));
y = y ./ ymax; // Normalize
 
// s is real so the fft response is conjugate symmetric
// and we retain only the first N/2 points
f=sample_rate*(0:(N/2))/N; //associated frequency vector
n=size(f,'*');
fftplots = scf();
plot(f(2:$),abs(y(2:n))); // drop first datapoint, f = 0 (it prevents log-plot)
a = gca();
a.log_flags = "lnn";
 
Best regards,
Claus
___
users mailing list
users@lists.scilab.org
http://lists.scilab.org/mailman/listinfo/users

___
users mailing list
users@lists.scilab.org
http://lists.scilab.org/mailman/listinfo/users


Re: [Scilab-users] Simulating phase modulation

2018-05-26 Thread Claus Futtrup
Hi Rafael

Thank you, I shall print and study. :-)

Cheers,
Claus

On Fri, May 25, 2018 at 8:42 PM Rafael Guerra <jrafaelbgue...@hotmail.com>
wrote:

> Hi Claus,
>
>
>
> 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:
>
>
> https://www.gaussianwaves.com/2017/06/phase-demodulation-using-hilbert-transform-application-of-analytic-signal/
>
>
>
> Note that the phase modulation is coded differently from you snippet below.
>
>
>
> Regards,
>
> Rafael
>
>
>
> *From:* users [mailto:users-boun...@lists.scilab.org] *On Behalf Of *Claus
> Futtrup
> *Sent:* Friday, May 25, 2018 7:17 PM
> *To:* International users mailing list for Scilab. <users@lists.scilab.org
> >
> *Subject:* [Scilab-users] Simulating phase modulation
>
>
>
> Hi there
>
>
>
> In a loudspeaker the driver can move several millimeter 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.
>
>
>
> In Matlab this can be simulated with pmmod.
>
> https://matlabandsimulink.wordpress.com/2013/03/12/phase-modulation/
>
>
>
> Is there a similar function in Scilab? (name - please ?)
>
>
>
> Here's the code I have written so far - this is the part that shows the
> input signal (the un-distorted signal):
>
>
>
> sample_rate=2;
>
> t = 0:1/sample_rate:0.6;
>
> N=size(t,'*'); *//number of samples*
>
> y1 = sin(2*%pi*50*t);
>
> y2 = 0.5*sin(2*%pi*500*t);
>
> *// y2 = 0.5*sin(2*%pi*500*t+%pi/4);*
>
> s=y1+y2+grand(1,N,'nor',0,1);
>
>
>
> *// Plot time-domain*
>
> endplot = round(N/15);
>
> twoplots = scf(); *// Set Current Figure (Graphics Window)*
>
> subplot(211);
>
> plot(t(1:endplot),y1(1:endplot),t(1:endplot),y2(1:endplot));
>
> subplot(212);
>
> plot(t(1:endplot),y1(1:endplot)+y2(1:endplot));
>
>
>
> y=fft(s);
>
> ymax = max(abs(y));
>
> y = y ./ ymax; *// Normalize*
>
>
>
> *// s is real so the fft response is conjugate symmetric*
>
> *// and we retain only the first N/2 points*
>
> f=sample_rate*(0:(N/2))/N; *//associated frequency vector*
>
> n=size(f,'*');
>
> fftplots = scf();
>
> plot(f(2:$),abs(y(2:n))); *// drop first datapoint, f = 0 (it prevents 
> log-plot)*
>
> a = gca();
>
> a.log_flags = "lnn";
>
>
>
> Best regards,
>
> Claus
> ___
> users mailing list
> users@lists.scilab.org
> http://lists.scilab.org/mailman/listinfo/users
>
___
users mailing list
users@lists.scilab.org
http://lists.scilab.org/mailman/listinfo/users


Re: [Scilab-users] Simulating phase modulation

2018-05-25 Thread Rafael Guerra
Hi Claus,

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:
https://www.gaussianwaves.com/2017/06/phase-demodulation-using-hilbert-transform-application-of-analytic-signal/

Note that the phase modulation is coded differently from you snippet below.

Regards,
Rafael

From: users [mailto:users-boun...@lists.scilab.org] On Behalf Of Claus Futtrup
Sent: Friday, May 25, 2018 7:17 PM
To: International users mailing list for Scilab. <users@lists.scilab.org>
Subject: [Scilab-users] Simulating phase modulation

Hi there

In a loudspeaker the driver can move several millimeter 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.

In Matlab this can be simulated with pmmod.
https://matlabandsimulink.wordpress.com/2013/03/12/phase-modulation/

Is there a similar function in Scilab? (name - please ?)

Here's the code I have written so far - this is the part that shows the input 
signal (the un-distorted signal):


sample_rate=2;

t = 0:1/sample_rate:0.6;

N=size(t,'*'); //number of samples

y1 = sin(2*%pi*50*t);

y2 = 0.5*sin(2*%pi*500*t);

// y2 = 0.5*sin(2*%pi*500*t+%pi/4);

s=y1+y2+grand(1,N,'nor',0,1);



// Plot time-domain

endplot = round(N/15);

twoplots = scf(); // Set Current Figure (Graphics Window)

subplot(211);

plot(t(1:endplot),y1(1:endplot),t(1:endplot),y2(1:endplot));

subplot(212);

plot(t(1:endplot),y1(1:endplot)+y2(1:endplot));



y=fft(s);

ymax = max(abs(y));

y = y ./ ymax; // Normalize



// s is real so the fft response is conjugate symmetric

// and we retain only the first N/2 points

f=sample_rate*(0:(N/2))/N; //associated frequency vector

n=size(f,'*');

fftplots = scf();

plot(f(2:$),abs(y(2:n))); // drop first datapoint, f = 0 (it prevents log-plot)

a = gca();

a.log_flags = "lnn";

Best regards,
Claus
___
users mailing list
users@lists.scilab.org
http://lists.scilab.org/mailman/listinfo/users


[Scilab-users] Simulating phase modulation

2018-05-25 Thread Claus Futtrup
Hi there

In a loudspeaker the driver can move several millimeter 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.

In Matlab this can be simulated with pmmod.
https://matlabandsimulink.wordpress.com/2013/03/12/phase-modulation/

Is there a similar function in Scilab? (name - please ?)

Here's the code I have written so far - this is the part that shows the
input signal (the un-distorted signal):

sample_rate=2;t = 0:1/sample_rate:0.6;N=size(t,'*'); //number of
samplesy1 = sin(2*%pi*50*t);y2 = 0.5*sin(2*%pi*500*t);// y2 =
0.5*sin(2*%pi*500*t+%pi/4);s=y1+y2+grand(1,N,'nor',0,1);
// Plot time-domainendplot = round(N/15);twoplots = scf(); // Set
Current Figure (Graphics
Window)subplot(211);plot(t(1:endplot),y1(1:endplot),t(1:endplot),y2(1:endplot));subplot(212);plot(t(1:endplot),y1(1:endplot)+y2(1:endplot));
y=fft(s);ymax = max(abs(y));y = y ./ ymax; // Normalize
// s is real so the fft response is conjugate symmetric// and we
retain only the first N/2 pointsf=sample_rate*(0:(N/2))/N;
//associated frequency vectorn=size(f,'*');fftplots =
scf();plot(f(2:$),abs(y(2:n))); // drop first datapoint, f = 0 (it
prevents log-plot)a = gca();a.log_flags = "lnn";


Best regards,
Claus
___
users mailing list
users@lists.scilab.org
http://lists.scilab.org/mailman/listinfo/users