Задание 4 к практическим занятиям (ММ РУиС) — различия между версиями

Материал из SRNS
Перейти к: навигация, поиск
(Задача 4.1)
(Задача 4.1)
 
(не показаны 10 промежуточных версий 2 участников)
Строка 6: Строка 6:
 
* рассмотреть пример использования ДПФ в алгоритмах обработки сигналов;
 
* рассмотреть пример использования ДПФ в алгоритмах обработки сигналов;
 
* научиться применять весовые окна.  
 
* научиться применять весовые окна.  
 
[[Категория: ММ РУиС (дисциплина)]]
 
  
 
== Задача 4.1 ==
 
== Задача 4.1 ==
 +
 +
'''Постановка задачи''':
 +
 +
Угадайте частоту загаданного сигнала и выведите значение в Гц в Command Window:
 +
 +
<source lang = matlab>
 +
clear all; close all; clc;
 +
 +
Fd = 40e3;    % [Hz]
 +
Td = 1/Fd;    % [sec]
 +
Tmod = 0.3;  % [sec]
 +
t = 0:Td:Tmod; % [sec]
 +
 +
df = 100;
 +
S = cos(2*pi* (500 + df * rand(1,1)) * t);
 +
 +
figure;
 +
plot(t, S)
 +
 +
% freq of S - ?
 +
</source>
 +
 +
Попробуйте применить оконную обработку для улучшения результатов.
 +
 +
Подсказка: <code>Tmod = T - Td</code>
 +
 +
== Задача 4.2 ==
  
 
'''Постановка задачи''':
 
'''Постановка задачи''':
Строка 17: Строка 42:
  
 
частота дискретизации <math>f_d = 44.2</math> МГц.
 
частота дискретизации <math>f_d = 44.2</math> МГц.
 +
 +
Помимо полезного сигнала присутствует аддитивная гармоническая помеха с частотой <math>f_0</math> и мощностью на <math>J/S</math> = 30 дБ выше полезного сигнала.
 +
 +
Сигнал АЦП обрабатывается режектором узкополосных помех на базе быстрого преобразования Фурье (объем выборки <math>N</math> = 64).
 +
 +
Требуется построить осциллограммы и спектры сигналов на входе и выходе режектора для различных значений <math>f_0</math>, с использования оконной обработки (окно Парзена) и без неё.
 +
 +
'''Пример листинга программы''':
 +
<source lang = matlab>
 +
clear all; clc; close all;
 +
 +
use_window = 0;
 +
 +
Fd = 44.1e6; % Hz
 +
N = 64;
 +
T = 1/Fd * N;
 +
t = ( (1:N) - 1 ) / Fd;
 +
f = ( (1:N) - 1 ) / T;
 +
stdS = 8; % RMS of signal
 +
JtoS_dB = 30; %dB, jammer-to-signal
 +
JtoS_amp = 10^(JtoS_dB/20);
 +
 +
S = randn(1, N) * stdS; % Signal
 +
 +
f0 = Fd / 8; % Jammer intermediate frequency
 +
A_jam = stdS * JtoS_amp; % Amplitude of jam
 +
Jam = A_jam * sin(2*pi*f0*t); % Jam
 +
 +
y = S + Jam; % ADC output
 +
 +
% Graphics
 +
figure(1);
 +
subplot(5,2,1)
 +
stem(t*1e6, S)
 +
xlabel('t, \mus');
 +
ylabel('S');
 +
 +
subplot(5,2,2)
 +
stem(f/1e6, abs(fft(S)))
 +
xlabel('f, MHz');
 +
ylabel('fft(S)');
 +
 +
subplot(5,2,3)
 +
stem(t*1e6, Jam)
 +
xlabel('t, \mus');
 +
ylabel('Jam');
 +
 +
subplot(5,2,4)
 +
stem(f/1e6, abs(fft(Jam)))
 +
xlabel('f, MHz');
 +
ylabel('fft(Jam)');
 +
 +
subplot(5,2,5)
 +
stem(t*1e6, y)
 +
xlabel('t, \mus');
 +
ylabel('y');
 +
 +
yf = fft(y);
 +
subplot(5,2,6)
 +
stem(f/1e6, abs(yf))
 +
xlabel('f, MHz');
 +
ylabel('fft(y)');
 +
 +
h = 400;
 +
signal_clear = 0;
 +
 +
if use_window
 +
    yw = y .* parzenwin(N)';
 +
else
 +
    yw = y;
 +
end
 +
yfw = fft(yw);
 +
 +
subplot(5,2,7)
 +
stem(t*1e6, yw);
 +
xlabel('t, \mus');
 +
ylabel('y after window');
 +
 +
subplot(5,2,8)
 +
stem(f/1e6, abs(yfw));
 +
xlabel('f, MHz');
 +
ylabel('fft(y after window)');
 +
 +
yf_rej = yfw;
 +
for k = 1:N
 +
    if abs(yf_rej(k)) > h
 +
        yf_rej(k) = 0;
 +
    else
 +
        yf_rej(k) = yf_rej(k);
 +
    end
 +
end
 +
y_rej = ifft(yf_rej);
 +
 +
subplot(5,2,9)
 +
stem(t*1e6, real(y_rej));
 +
xlabel('t, \mus');
 +
ylabel('y after rejector');
 +
 +
subplot(5,2,10)
 +
stem(f/1e6, abs(fft(y_rej)));
 +
xlabel('f, MHz');
 +
ylabel('fft(y after rejector)');
 +
</source>
 +
 +
 +
[[Категория: ММ РУиС (дисциплина)]]

Текущая версия на 16:44, 25 марта 2015

Тема занятия: Преобразование Фурье. Режектор узкополосных помех.

Цели занятия:

  • научиться выполнять преобразование Фурье в MATLAB;
  • научиться правильно интерпретировать результаты дискретного преобразования Фурье;
  • рассмотреть пример использования ДПФ в алгоритмах обработки сигналов;
  • научиться применять весовые окна.

[править] Задача 4.1

Постановка задачи:

Угадайте частоту загаданного сигнала и выведите значение в Гц в Command Window:

clear all; close all; clc;

Fd = 40e3;     % [Hz]
Td = 1/Fd;     % [sec]
Tmod = 0.3;   % [sec]
t = 0:Td:Tmod; % [sec]

df = 100;
S = cos(2*pi* (500 + df * rand(1,1)) * t);

figure;
plot(t, S)

% freq of S - ?

Попробуйте применить оконную обработку для улучшения результатов.

Подсказка: Tmod = T - Td

[править] Задача 4.2

Постановка задачи:

Производится обработка отсчетов АЦП в радиоприемнике. Модель полезного сигнала:

S_n = N(0, \sigma_S^2),

частота дискретизации f_d = 44.2 МГц.

Помимо полезного сигнала присутствует аддитивная гармоническая помеха с частотой f_0 и мощностью на J/S = 30 дБ выше полезного сигнала.

Сигнал АЦП обрабатывается режектором узкополосных помех на базе быстрого преобразования Фурье (объем выборки N = 64).

Требуется построить осциллограммы и спектры сигналов на входе и выходе режектора для различных значений f_0, с использования оконной обработки (окно Парзена) и без неё.

Пример листинга программы:

clear all; clc; close all;

use_window = 0;

Fd = 44.1e6; % Hz
N = 64;
T = 1/Fd * N;
t = ( (1:N) - 1 ) / Fd;
f = ( (1:N) - 1 ) / T;
stdS = 8; % RMS of signal
JtoS_dB = 30; %dB, jammer-to-signal
JtoS_amp = 10^(JtoS_dB/20);

S = randn(1, N) * stdS; % Signal

f0 = Fd / 8; % Jammer intermediate frequency
A_jam = stdS * JtoS_amp; % Amplitude of jam
Jam = A_jam * sin(2*pi*f0*t); % Jam

y = S + Jam; % ADC output

% Graphics
figure(1);
subplot(5,2,1)
stem(t*1e6, S)
xlabel('t, \mus');
ylabel('S');

subplot(5,2,2)
stem(f/1e6, abs(fft(S)))
xlabel('f, MHz');
ylabel('fft(S)');

subplot(5,2,3)
stem(t*1e6, Jam)
xlabel('t, \mus');
ylabel('Jam');

subplot(5,2,4)
stem(f/1e6, abs(fft(Jam)))
xlabel('f, MHz');
ylabel('fft(Jam)');

subplot(5,2,5)
stem(t*1e6, y)
xlabel('t, \mus');
ylabel('y');

yf = fft(y);
subplot(5,2,6)
stem(f/1e6, abs(yf))
xlabel('f, MHz');
ylabel('fft(y)');

h = 400;
signal_clear = 0;

if use_window
    yw = y .* parzenwin(N)';
else
    yw = y;
end
yfw = fft(yw);

subplot(5,2,7)
stem(t*1e6, yw);
xlabel('t, \mus');
ylabel('y after window');

subplot(5,2,8)
stem(f/1e6, abs(yfw));
xlabel('f, MHz');
ylabel('fft(y after window)');

yf_rej = yfw;
for k = 1:N
    if abs(yf_rej(k)) > h
        yf_rej(k) = 0;
    else
        yf_rej(k) = yf_rej(k);
    end
end
y_rej = ifft(yf_rej);

subplot(5,2,9)
stem(t*1e6, real(y_rej));
xlabel('t, \mus');
ylabel('y after rejector');

subplot(5,2,10)
stem(f/1e6, abs(fft(y_rej)));
xlabel('f, MHz');
ylabel('fft(y after rejector)');
Персональные инструменты
Пространства имён

Варианты
Действия
SRNS Wiki
Рабочие журналы
Приватный файлсервер
QNAP Сервер
Инструменты