Matlab fft plot axes

3 ビュー (過去 30 日間)
Iro Liontou
Iro Liontou 2024 年 4 月 11 日
回答済み: Star Strider 2024 年 4 月 11 日
%
clc;
clear;
close all;
%% Visualization loop for raw EMG signal
% Parameters
sampling_frequency = 1000; % Sampling frequency in Hz
duration = 5; % Duration of signal acquisition in seconds
num_samples = sampling_frequency * duration;
% Initialize variables
time = (0:num_samples-1)/sampling_frequency;
frequency = linspace(0, sampling_frequency/2, num_samples/2);
x = zeros(1, num_samples);
a = arduino();
%figure('Name', 'Signal from EMG sensor');
%grid on;
%title('Signal from EMG sensor');
%xlabel('Time (s)');
%ylabel('Voltage');
% Plot frequency spectrum
figure('Name', 'Frequency Spectrum');
grid on;
title('Frequency Spectrum of EMG Signal');
xlabel('Frequency (Hz)');
ylabel('Magnitude');
% Start loop to acquire signal
for i = 1:num_samples
% Read voltage
voltage = readVoltage(a, 'A0');
% Store voltage
x(i) = voltage;
% Update plot
plot(time(1:i), x(1:i));
xlim([0, duration]); % Adjust xlim as needed
drawnow;
end
% Calculate Fourier Transform
X = fft(x);
X_magnitude = 2*abs(X(1:num_samples/2))/num_samples;
% Plot frequency spectrum
figure('Name', 'Frequency Spectrum');
plot(frequency, X_magnitude);
title('Frequency Spectrum of EMG Signal');
xlabel('Frequency (Hz)');
ylabel('Magnitude');
xlim([0, max(frequency)]); % Adjust xlim as needed
I have this code in MATLAB. I want to acquire EMG signal from Arduino and i tried FFT, but i want the y axis to have magnitude values and the x axis to have the frequency values. how do I do that?

回答 (1 件)

Star Strider
Star Strider 2024 年 4 月 11 日
This would be my approach —
Fs = 1000;
Fn = Fs/2;
L = 60;
t = linspace(0, Fs*L, Fs*L+1).'/Fs; % Time Vector
EMG = sum(sin(2*pi*t*(1:50:450)),2); % Signal Vector
slen = size(EMG,1);
NFFT = 2^nextpow2(slen);
FTEMG = fft((EMG-mean(EMG)).*hann(slen), NFFT)/sum(hann(slen));
Fv = linspace(0, 1, NFFT/2+1)*Fn; % Frequency Vector
Iv = 1:numel(Fv); % Index Vector
figure
plot(Fv, abs(FTEMG(Iv))*2)
grid
xlabel('Frequency')
ylabel('Magnitude')
There are other ways to do this. This code is my usual approach.
.

カテゴリ

Help Center および File ExchangeFourier Analysis and Filtering についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by