Задание 4 к практическим занятиям (ММ РУиС) — различия между версиями
Korogodin (обсуждение | вклад) (→Задача 4.1) |
Korogodin (обсуждение | вклад) (→Задача 4.1) |
||
(не показаны 8 промежуточных версий 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 == | ||
'''Постановка задачи''': | '''Постановка задачи''': | ||
Строка 111: | Строка 136: | ||
subplot(5,2,9) | subplot(5,2,9) | ||
− | stem(t*1e6, y_rej); | + | stem(t*1e6, real(y_rej)); |
xlabel('t, \mus'); | xlabel('t, \mus'); | ||
ylabel('y after rejector'); | ylabel('y after rejector'); | ||
Строка 120: | Строка 145: | ||
ylabel('fft(y after rejector)'); | ylabel('fft(y after rejector)'); | ||
</source> | </source> | ||
+ | |||
+ | |||
+ | [[Категория: ММ РУиС (дисциплина)]] |
Текущая версия на 16:44, 25 марта 2015
Тема занятия: Преобразование Фурье. Режектор узкополосных помех.
Цели занятия:
- научиться выполнять преобразование Фурье в MATLAB;
- научиться правильно интерпретировать результаты дискретного преобразования Фурье;
- рассмотреть пример использования ДПФ в алгоритмах обработки сигналов;
- научиться применять весовые окна.
[править] Задача 4.1
Постановка задачи:
Угадайте частоту загаданного сигнала и выведите значение в Гц в Command Window:
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
Постановка задачи:
Производится обработка отсчетов АЦП в радиоприемнике. Модель полезного сигнала:
- ,
частота дискретизации МГц.
Помимо полезного сигнала присутствует аддитивная гармоническая помеха с частотой и мощностью на = 30 дБ выше полезного сигнала.
Сигнал АЦП обрабатывается режектором узкополосных помех на базе быстрого преобразования Фурье (объем выборки = 64).
Требуется построить осциллограммы и спектры сигналов на входе и выходе режектора для различных значений , с использования оконной обработки (окно Парзена) и без неё.
Пример листинга программы:
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)');