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

7 次查看（过去 30 天）
인성 이2022-8-16

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
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.

### 采纳的回答

Chunru 2022-8-16

fs = 100e3; % 100kHz sampling frequency
ts = 1/fs;
Time = ts:ts:84986*ts; % 0.84986 sec
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'); ##### 1 个评论显示隐藏 无
인성 이 2022-8-16

Thank you so much for your kind reply. It really helped me a lot.

### 类别

Find more on Spectral Measurements in Help Center and File Exchange

R2021b

### Community Treasure Hunt

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

Start Hunting!