arborium-matlab 2.18.1

MATLAB grammar for arborium (tree-sitter bindings)
Documentation
% Fast Fourier Transform Example
% Demonstrates signal processing in MATLAB

function [freq, magnitude] = analyze_signal(signal, fs)
    % ANALYZE_SIGNAL Compute frequency spectrum of a signal
    %   [freq, magnitude] = analyze_signal(signal, fs)
    %   signal - input time-domain signal
    %   fs - sampling frequency in Hz
    
    n = length(signal);
    
    % Apply Hanning window to reduce spectral leakage
    window = hanning(n);
    windowed_signal = signal .* window';
    
    % Compute FFT
    fft_result = fft(windowed_signal);
    
    % Compute single-sided spectrum
    magnitude = abs(fft_result / n);
    magnitude = magnitude(1:n/2+1);
    magnitude(2:end-1) = 2 * magnitude(2:end-1);
    
    % Frequency vector
    freq = fs * (0:(n/2)) / n;
end

% Example usage
fs = 1000;  % Sampling frequency
t = 0:1/fs:1-1/fs;  % Time vector

% Create test signal: 50 Hz + 120 Hz
signal = sin(2*pi*50*t) + 0.5*sin(2*pi*120*t);

% Add noise
noisy_signal = signal + 0.2*randn(size(t));

% Analyze
[f, mag] = analyze_signal(noisy_signal, fs);

% Plot results
figure;
subplot(2,1,1);
plot(t, noisy_signal);
xlabel('Time (s)');
ylabel('Amplitude');
title('Time Domain Signal');

subplot(2,1,2);
plot(f, mag);
xlabel('Frequency (Hz)');
ylabel('Magnitude');
title('Frequency Spectrum');