How can I generate sinusoidal signal with a time-varying frequency?

11 次查看(过去 30 天)
Hi. I want to generate time-varying frequency signal.
I have frequency data per every time sample.
For example, for a 1 second time duration signal with a sampling frequency of 100 Hz, I have 100 frequency values.
The picture above is showing the frequency data per time sample that I actually have. It is a signal of 0.85 seconds sampled at 100 kHz.
I want to get a spectrogram by making sound data from this value, but something goes wrong.
Down below is the code I made and the result. I'm not sure where I went wrong in the code.
clc;clear all;close all;
fs = 100e3; % 100kHz sampling frequency
ts = 1/fs;
Time = ts:ts:84986*ts; % 0.84986 sec
load('Freq.mat'); % 84.986 frequency value
Signal = cos(2*pi*Freq.*Time) + 1j*sin(2*pi*Freq.*Time); % generating signal
[s,ff,ttt] = spectrogram(y,1024,800,1024,fs);
s = abs(s);
%% ploting spectrogram of Signal
X = figure;
axes1 = axes('Parent',X);
imagesc(ttt,ff,s);
set(axes1,'YDir','normal');
axis([ttt(1) ttt(end) 4e3 17e3]);xlabel('sec');ylabel('Hz');
The above spectrogram figure is the result of the generated spectrogram. As you can see, the signal was generated a lot different from the frequency data I had.
Please help. Thanks.

采纳的回答

Chunru
Chunru 2022-8-16
编辑:Chunru 2022-8-16
fs = 100e3; % 100kHz sampling frequency
ts = 1/fs;
Time = ts:ts:84986*ts; % 0.84986 sec
load('Freq.mat'); % 84.986 frequency value
figure;
plot(Time, Freq);
You need to integrate the instantaneous fre quency over time:
where is the time-varying phase and is the instantaneous frequency. The signal can be then expressed as:
phase = 2*pi*cumsum(Freq)/fs;
% Signal = cos(2*pi*Freq.*Time) + 1j*sin(2*pi*Freq.*Time); % generating signal
Signal = exp(1j*phase);
[s,ff,ttt] = spectrogram(Signal,1024,800,1024,fs);
s = abs(s);
%% ploting spectrogram of Signal
X = figure;
axes1 = axes('Parent',X);
imagesc(ttt,ff,s);
set(axes1,'YDir','normal');
axis([ttt(1) ttt(end) 4e3 17e3]);xlabel('sec');ylabel('Hz');

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Spectral Measurements 的更多信息

产品


版本

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by