• Регистрация
Bronikovskii
Bronikovskii 0.00
н/д

Построение амплитудного спектра косинусоидального сигнала и его нормировка.

04.10.2020

Всем привет. Только начинаю использовать MATLAB, может ли кто-нибудь с написанием кода для амплитудного спектра косинусоидального сигнала??? Излазил кучу форумов, но так как знания у меня скудные, я не смог понять. Строил спектр разными способами, но все время амплитуда не соотвествовала второму рисунку. Понимаю, что необходимо сделать нормировку спектра, но как я не знаю.

Код косинусоидального импульса

Fs=1000; % Частота дискретизации
A=4; % Амплитуда сигнала
F=0.25; % Частота сигнала
t=0:1/Fs:10; % создаем вектор времени
ang=54; % задаём угол отсечки в градусах ...
ang_rad=ang*pi/180; % переводим угол в радианы
s3=A*cos(2*pi*F*t); % синтез косинусоидального сигнала с заданой начальной фазой
s3_mag=abs(s3);
s3_mag=4*(cos(2*pi*F*t)-cos(ang_rad))/(1-cos(ang_rad)); синтез косинусоидального импульса
s3_mag(s3_mag<0)=0; % зануление отрицательных значений
plot(t,s3_mag)

Теги

    04.10.2020

    Ответы

    • aBoomest
      aBoomest+942.89
      4.10.2020 20:00

      С трех периодов тяжко что-то получить влоб. Хотя если постараться )))

      А с большого количества - уже лучше.

      Что из этого больше подходит?

      • Bronikovskii
        Bronikovskii0.00
        5.10.2020 01:26

        Думаю второй, а можете скинуть программный код. Буду признателен. 

        • aBoomest
          aBoomest+942.89
          5.10.2020 04:50

          Нету с собой к сожалению (

          используете функцию fft

          в хелпе помнится хороший пример был

          это пример из хелпа, заменил только на Ваш косинус

          Fs = 100;           % Sampling frequency
          t = -0.5:1/Fs:0.5;  % Time vector 
          L = length(t);      % Signal length
          
          X = cos(2*pi*30*t);
          X(X<0)=0
          
          Plot the pulse in the time domain.
          plot(t,X)
          title('Gaussian Pulse in Time Domain')
          xlabel('Time (t)')
          ylabel('X(t)')
          
          To use the fft function to convert the signal to the frequency domain, first identify a new input length that is the next power of 2 from the original signal length. This will pad the signal X with trailing zeros in order to improve the performance of fft.
          n = 2^nextpow2(L);
          
          Convert the Gaussian pulse to the frequency domain.
          Y = fft(X,n);
          
          Define the frequency domain and plot the unique frequencies.
          f = Fs*(0:(n/2))/n;
          P = abs(Y/n).^2;
          
          plot(f,P(1:n/2+1)) 
          title('Gaussian Pulse in Frequency Domain')
          xlabel('Frequency (f)')
          ylabel('|P(f)|^2')
          
          Copyright 2015 The MathWorks, Inc.