Plot a sine wave with decreasing frequency over time

21 visualizzazioni (ultimi 30 giorni)
Alison Huffman il 4 Ago 2021
Hi! I'm trying to plot a sine wave whose frequency decreases linearly over time (amplitude stays the same). This is my code:
clear all;
close all;
clc
period = 0.08;
for x = 0:4/1000:2
a = 5;
b = ((2*pi)/(period + 0.001));
c = 300;
d = 30;
c = c * -1;
output = a.*sin(b.*(x+c))+d;
plot(x, output, 'Linewidth', 2);
end
When I run the code, my plot is blank. I know Matlab doesn't require the use of a "for" loop when plotting sinusoids, however I'm unsure of how else I can modify the frequency over time if I don't use a "for" loop. Any help is much appreciated!
0 CommentiMostra -2 commenti meno recentiNascondi -2 commenti meno recenti

Accedi per commentare.

Risposte (3)

Eike Blechschmidt il 4 Ago 2021
f_upper = 50;
f_lower = 10;
t = 0:0.01:10;
f = linspace(f_upper, f_lower, numel(t));
a = 10;
x = a * sin(2*pi*f.*t);
plot(t,x)
1 CommentoMostra -1 commenti meno recentiNascondi -1 commenti meno recenti
darova il 4 Ago 2021
DOesn't work well
f_upper = 5;
f_lower = 1;
t = 0:0.01:10;
f = linspace(f_upper, f_lower, numel(t));
a = 10;
x = a * sin(2*pi*f.*t);
plot(t,x)

Accedi per commentare.

darova il 4 Ago 2021
Modify x coordinate
x = 0:.1:30;
y = sin(x);
x1 = x - 10*(x/max(x)).^2; % shift last point 10 units
plot(x1,y)
5 CommentiMostra 3 commenti meno recentiNascondi 3 commenti meno recenti
darova il 8 Ago 2021
Because requency changes i think
Eike Blechschmidt il 9 Ago 2021
@darova changed the x-axis after calculating the sin. So I'm unsure (as in "I have not mathematically checked") if that solution is still expressable with a single sin function (you can always find multiple sin-waves to express any kind of time signal -> fourier transformation) which was my understanding of "is it still a sin function". My first solution does that as I only manipulate the input to the sin function. So I guess my question was not precise.

Accedi per commentare.

Eike Blechschmidt il 5 Ago 2021
The easiest and correct is probably to use:
f1 = 50;
f2 = 10;
t = 0:0.001:10;
y = chirp(t,f1,t(end),f2);
plot(t, y);
3 CommentiMostra 1 commento meno recenteNascondi 1 commento meno recente
Alison Huffman il 5 Ago 2021
Modificato: Alison Huffman il 5 Ago 2021
@Eike Blechschmidt Thank you very much, this is helpful. What calculation does the chirp function do? Is it just modifying the period of the sine wave?
Eike Blechschmidt il 6 Ago 2021
You can also do
edit chirp
and scroll downt to
function yvalue = calculateChirp(f0,f1,t1,p,t,phi,isComplex)
It shows quite clear how the chirp is calculated.

Accedi per commentare.

Categorie

Scopri di più su Descriptive Statistics in Help Center e File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by